

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# ステップ 2: Apache Cassandra Spark コネクタを設定する
<a name="spark-tutorial-step2"></a>

Apache Spark は、さまざまな方法で設定できる汎用コンピューティングプラットフォームです。Spark と Spark Cassandra Connector を Amazon Keyspaces との統合を設定するには、以下のセクションで説明する最小設定から始め、後でワークロードに応じてそれらを拡張することをお勧めします。
+ **8 MB 未満のサイズの Spark パーティションを作成します。**

  Spark では、*パーティション*は並列で実行可能なデータのアトミックチャンクを表します。Spark Cassandra コネクタで Amazon Keyspaces にデータを書き込むとき、Spark パーティションが小さいほど、タスクで書き込まれるレコードの量は少なくなります。Spark タスクで複数のエラーが発生した場合、指定された回数の再試行回数を過ぎると失敗します。大きなタスクのやり直しや、大量のデータの再処理を防ぐため、Spark パーティションのサイズは小さく設定してください。
+ **実行者 1 人あたりの同時書き込み回数を少なく設定して、再試行回数を多く設定してください。**

  Amazon Keyspaces は、オペレーションがタイムアウトになると、キャパシティ不足のエラーを Cassandra ドライバーに返します。Spark Cassandra コネクタは `MultipleRetryPolicy` でリクエストの透過的な再試行を試みるため、設定されているタイムアウト時間を変更しても、キャパシティ不足によるタイムアウトには対処できません。再試行によるドライバーの接続プールの圧迫を防ぐには、エグゼキューターあたりの同時書き込み回数を少なく設定して、再試行回数を多く設定してください。以下のコードスニペットに、この例を示します。

  ```
  spark.cassandra.query.retry.count = 500
  spark.cassandra.output.concurrent.writes = 3
  ```
+ **総スループットを細分化し、複数の Cassandra セッションに分散させます。**
  + Cassandra Spark コネクタは、Spark エクゼキューターごとに 1 つのセッションを作成します。このセッションは、必要なスループットと必要な接続数を決定するスケールの単位と考えてください。
  + エクゼキューター 1 人あたりのコア数とタスク 1 つあたりのコア数を定義するときは、最初は少ない数から始めて、必要に応じて増やしてください。
  + 一時的なエラーが発生した場合に処理できるように Spark タスク障害を設定します。アプリケーションのトラフィック特性と要件が理解できたら、`spark.task.maxFailures` を境界値に設定することをおすすめします。
  + たとえば、以下の設定では、エクゼキューター、セッションごとに 2 つの同時タスクを処理できます。

    ```
    spark.executor.instances = configurable -> number of executors for the session.
    spark.executor.cores = 2 -> Number of cores per executor.
    spark.task.cpus = 1 -> Number of cores per task.
    spark.task.maxFailures = -1
    ```
+ **バッチ処理をオフにします。**
  +  ランダムアクセスのパターンを改善するために、バッチ処理をオフにすることをお勧めします。以下のコードスニペットに、この例を示します。

    ```
    spark.cassandra.output.batch.size.rows = 1 (Default = None)
    spark.cassandra.output.batch.grouping.key = none (Default = Partition)
    spark.cassandra.output.batch.grouping.buffer.size = 100 (Default = 1000)
    ```
+ **`SPARK_LOCAL_DIRS` は、十分なキャパシティがある高速のローカルディスクに設定してください。**
  + デフォルトで、Spark はマップ出力ファイルと耐障害性のある分散データセット (RDD) を `/tmp ` フォルダに保存します。 Spark ホストの設定によっては、*デバイススタイルエラーのための空きキャパシティがなくなる*おそれがあります。
  + `SPARK_LOCAL_DIRS` 環境変数を `/example/spark-dir` というディレクトリーに設定するには、以下のコマンドを使用できます。

    ```
    export SPARK_LOCAL_DIRS=/example/spark-dir
    ```