

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

# チュートリアル: Apache Spark と統合してデータをインポートまたはエクスポートする
<a name="spark-integrating"></a>

Apache Spark は、大規模データ分析のためのオープンソースエンジンです。Apache Spark では、Amazon Keyspaces に保存されているデータの分析を効率的に実行できます。Amazon Keyspaces を利用すれば、Spark からの分析データへの一貫した 1 桁ミリ秒単位の読み取りアクセスをアプリケーションに提供することもできます。オープンソースの Spark Cassandra コネクタがあれば、Amazon Keyspaces と Spark 間でデータの読み取りや書き込みが簡単にできます。

Amazon Keyspaces は Spark Cassandra コネクタをサポートしています。そのため、フルマネージドのサーバーレスデータベースサービスで、Spark ベースの分析パイプラインで効率的に Cassandra ワークロードを実行できます。Amazon Keyspaces があれば、Spark で、テーブルと同じ基盤インフラストラクチャリソースをめぐって競合の心配をする必要がなくなります。Amazon Keyspaces テーブルでは、アプリケーションのトラフィックに基づいて拡大、縮小が行われます。

以下のチュートリアルでは、Spark Cassandra コネクタで Amazon Keyspaces にデータを読み書きするために必要な手順とベストプラクティスについて説明します。このチュートリアルでは、Spark Cassandra コネクタでファイルからデータを読み込み、Amazon Keyspaces テーブルに書き込んで、Amazon Keyspaces にデータを移行する方法を示します。次に、このチュートリアルでは、Spark Cassandra コネクタで Amazon Keyspaces からデータを読み取る方法を説明します。この方法で、Spark ベースの分析パイプラインで Cassandra ワークロードを実行できます。

**Topics**
+ [Spark Cassandra コネクタで Amazon Keyspaces までの接続をつなぐための前提条件](spark-tutorial-prerequisites.md)
+ [ステップ 1: Amazon Keyspaces と Apache Cassandra Spark コネクタとの統合を設定する](spark-tutorial-step1.md)
+ [ステップ 2: Apache Cassandra Spark コネクタを設定する](spark-tutorial-step2.md)
+ [ステップ 3: アプリケーション設定ファイルを作成する](spark-tutorial-step3.md)
+ [ステップ 4: Amazon Keyspaces でソースデータとターゲットテーブルを準備する](spark-tutorial-step4.md)
+ [ステップ 5: Apache Cassandra Spark コネクタで Amazon Keyspaces データの書き込みや読み込みを行う](spark-tutorial-step5.md)
+ [Amazon Keyspaces で Spark Cassandra コネクタを使用する場合の一般的なエラーのトラブルシューティング](spark-tutorial-step6.md)

# Spark Cassandra コネクタで Amazon Keyspaces までの接続をつなぐための前提条件
<a name="spark-tutorial-prerequisites"></a>

Spark Cassandra コネクタで Amazon Keyspaces に接続する前に、以下のソフトウェアがインストールされていることを確認してください。Amazon Keyspaces と Spark Cassandra コネクタの互換性は、以下の推奨バージョンでテスト済みです。
+ Java バージョン 8
+ Scala 2.12
+ Spark 3.4
+ Cassandra コネクタ 2.5 以上
+ Cassandra ドライバー 4.12

1. [https://www.scala-lang.org/download/scala2.html](https://www.scala-lang.org/download/scala2.html) は、次の手順に従ってインストールしてください。

1. Spark 3.4.1 は、次の例に従ってインストールしてください。

   ```
   curl -o spark-3.4.1-bin-hadoop3.tgz -k https://dlcdn.apache.org/spark/spark-3.4.1/spark-3.4.1-bin-hadoop3.tgz
   
   # now to untar
   tar -zxvf spark-3.4.1-bin-hadoop3.tgz
   
   # set this variable.
   export SPARK_HOME=$PWD/spark-3.4.1-bin-hadoop3
   ```
   ```

# ステップ 1: Amazon Keyspaces と Apache Cassandra Spark コネクタとの統合を設定する
<a name="spark-tutorial-step1"></a>

このステップでは、アカウントのパーティショナーに Apache Spark コネクタと互換性があることを確認し、必要な IAM 権限を設定します。以下のベストプラクティスは、テーブルに十分な読み取り/書き込みキャパシティをプロビジョニングするときに利用できます。

1. `Murmur3Partitioner` パーティショナーがアカウントのデフォルトパーティショナーであることを確認してください。このパーティショナーには Spark Cassandra コネクタと互換性があります。パーティショナーとその変更方法の詳細については、「[Amazon Keyspaces でのパーティショナーの操作](working-with-partitioners.md)」を参照してください。

1. Apache Spark のインターフェイス VPC エンドポイントで、Amazon Keyspaces の IAM アクセス権限を設定します。
   + 以下に示す IAM ポリシーの例に従って、ユーザーテーブルに対する読み取り/書き込みアクセス権限と、システムテーブルに対する読み取りアクセス権限を割り当てます。
   + [VPC エンドポイント](https://docs.aws.amazon.com/keyspaces/latest/devguide/vpc-endpoints.html)経由で Spark によって Amazon Keyspaces にアクセスするクライアントには、使用可能なインターフェイス VPC エンドポイントを system.peers テーブルをポピュレｰトする必要があります。

   ```
   {
      "Version":"2012-10-17",		 	 	 
      "Statement":[
         {
            "Effect":"Allow",
            "Action":[
               "cassandra:Select",
               "cassandra:Modify"
            ],
            "Resource":[
               "arn:aws:cassandra:us-east-1:111122223333:/keyspace/mykeyspace/table/mytable",
               "arn:aws:cassandra:us-east-1:111122223333:/keyspace/system*"
            ]
         },
         {
            "Sid":"ListVPCEndpoints",
            "Effect":"Allow",
            "Action":[
               "ec2:DescribeNetworkInterfaces",
               "ec2:DescribeVpcEndpoints"
            ],
            "Resource":"*"
         }
      ]
   }
   ```

1.  Amazon Keyspaces テーブルで Spark Cassandra コネクタからのトラフィックをサポートできる十分な読み取り/書き込みスループットキャパシティを設定する場合、以下のベストプラクティスを検討してください。
   + 最初は、シナリオのテストに役立つオンデマンドキャパシティから始めす。
   + コネクタからのトラフィックにレートリミッターを使用し、自動スケーリングでプロビジョニングされたキャパシティを使用するようにテーブルを設定して本番環境のテーブルスループットのコストを最適化します。詳細については、「[Amazon Keyspaces 自動スケーリングでスループットキャパシティを自動的に管理する](autoscaling.md)」を参照してください。
   + Cassandra ドライバーに付属の固定レートリミッターを使用できます。[AWS サンプルリポジトリには](https://github.com/aws-samples)、[Amazon Keyspaces に合わせたレートリミッター](https://github.com/aws-samples/amazon-keyspaces-java-driver-helpers)がいくつかあります。
   + キャパシティイベントの詳細については、「[Amazon Keyspaces で読み取り/書き込みのキャパシティモードを設定する](ReadWriteCapacityMode.md)」を参照してください。

# ステップ 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
    ```

# ステップ 3: アプリケーション設定ファイルを作成する
<a name="spark-tutorial-step3"></a>

オープンソースの Spark Cassandra コネクタを AmazonKeyspaces で使用するには、DataStax Java ドライバーとの接続に必要な設定をしたアプリケーション設定ファイルを用意する必要があります。接続には、サービス固有の認証情報または SigV4 プラグインを使用できます。

まだ行っていない場合は、TLS 接続の作成に使用したデジタル証明書を trustStore ファイルに変換する必要があります。Java ドライバー接続チュートリアルの詳細な手順については、「[[開始する前に]](using_java_driver.md#using_java_driver.BeforeYouBegin)」を参照してください。trustStore のファイルパスとパスワードを書き留めておいてください。この情報はアプリケーション設定ファイルを作成するときに必要になります。

## SigV4 認証による 接続
<a name="appconfig.sigv4"></a>

このセクションでは、 AWS 認証情報と SigV4 プラグインを使用して接続するときに使用できる`application.conf`ファイルの例を示します。まだ作成していない場合は、IAM アクセスキー (アクセスキー ID とシークレットアクセスキー) AWS を生成し、設定ファイルまたは環境変数として保存する必要があります。詳細な手順については、「[AWS CLI、 AWS SDK、または Cassandra クライアントドライバー用の Amazon Keyspaces SigV4 プラグインに必要な認証情報](SigV4_credentials.md)」を参照してください。

次の例では、 trustStore ファイルまでのファイルパスを置き換え、パスワードを置き換えます。

```
datastax-java-driver {
        basic.contact-points = ["cassandra.us-east-1.amazonaws.com:9142"]
        basic.load-balancing-policy {
            class = DefaultLoadBalancingPolicy
            local-datacenter = us-east-1
            slow-replica-avoidance = false
        }
        basic.request {
              consistency = LOCAL_QUORUM
        }
        advanced {
                auth-provider = {
                   class = software.aws.mcs.auth.SigV4AuthProvider
                   aws-region = us-east-1
                 }
            ssl-engine-factory {
                class = DefaultSslEngineFactory
                truststore-path = "path_to_file/cassandra_truststore.jks"
                truststore-password = "password"
        hostname-validation=false
            }
   }
        advanced.connection.pool.local.size = 3   
}
```

この設定ファイルを更新し、`/home/user1/application.conf` という名前で保存します。次の例ではこのパスを使用しています。

## サービス固有の認証情報で接続する
<a name="appconfig.ssc"></a>

 このセクションでは、サービス固有の認証情報で接続するときに使用できるサンプル`application.conf`ファイルを示します。まだ作成していない場合は、Amazon Keyspaces のサービス固有の認証情報を生成する必要があります。詳細な手順については、「[Amazon Keyspaces にプログラムによってアクセスするためのサービス固有の認証情報を作成する](programmatic.credentials.ssc.md)」を参照してください。

以下の例で、`username` と `password` を自分の認証情報あに置き換えます。また、 trustStore ファイルまでのファイルパスを置き換え、パスワードも置き換えてください。

```
datastax-java-driver {
        basic.contact-points = ["cassandra.us-east-1.amazonaws.com:9142"]
        basic.load-balancing-policy {
            class = DefaultLoadBalancingPolicy
            local-datacenter = us-east-1
        }
        basic.request {
              consistency = LOCAL_QUORUM
        }
        advanced {
            auth-provider = {
            class = PlainTextAuthProvider
                    username = "username"
                    password = "password"
                    aws-region = "us-east-1"
            }
            ssl-engine-factory {
                class = DefaultSslEngineFactory
                truststore-path = "path_to_file/cassandra_truststore.jks"
                truststore-password = "password"
                hostname-validation=false
            }
            metadata = {
                schema {
                     token-map.enabled = true
                }
            }
        }    
}
```

この構成ファイルをコード例で使用できるように `/home/user1/application.conf` に更新して保存します。

## 固定料金で接続する
<a name="appconfig.fixedrate"></a>

Spark エクゼキューターごとに固定レートを強制的に使用するには、リクエストスロットラーを定義します。このリクエストスロットラーで 1 秒あたりのリクエスト数を制限します。Spark Cassandra コネクタは、エクゼキューターごとに 1 つの Cassandra セッションをデプロイします。次の式を使用すると、テーブルに対して一貫したスループットを実現できます。

```
max-request-per-second * numberOfExecutors = total throughput against a table
```

この例の内容は、前に作成したアプリケーション設定ファイルに追加できます。

```
datastax-java-driver {
  advanced.throttler {
    class = RateLimitingRequestThrottler

    max-requests-per-second = 3000
    max-queue-size = 30000
    drain-interval = 1 millisecond
  }
}
```

# ステップ 4: Amazon Keyspaces でソースデータとターゲットテーブルを準備する
<a name="spark-tutorial-step4"></a>

このステップでは、サンプルデータと Amazon Keyspaces テーブルがあるソースファイルを作成します。

1. ソースファイルを作成します。次のオプションのいずれかを選択します。
   + このチュートリアルでは、`keyspaces_sample_table.csv` という名前のカンマ区切り値 (CSV) ファイルをデータ移行用のソースファイルとして使用します。提供されたサンプルファイルには、`book_awards` という名前のテーブルに関する数行のデータが含まれています。

     1. 次のアーカイブファイル [samplemigration.zip](samples/samplemigration.zip) にあるサンプル CSV ファイル (`keyspaces_sample_table.csv`) をダウンロードします。アーカイブを解凍し、`keyspaces_sample_table.csv` へのパスをメモしておきます。
   + 自分の CSV ファイルで Amazon Keyspaces にデータを書き込む場合は、データがランダム化されていることを確認してください。データベースから直接読み取られるデータやフラットファイルにエクスポートされるデータは、通常、パーティションとプライマリキーによって順序付けられます。注文したデータを Amazon Keyspaces にインポートすると、Amazon Keyspaces パーティションの小さなセグメントに書き込まれて、トラフィックが偏って分散するおそれがあります。その場合、パフォーマンスが低下し、エラー率が高くなるおそれがあります。

     対照的に、トラフィックをパーティション間でより均等に分散してデータをランダム化すれば、Amazon Keyspaces に組み込まれている負荷分散機能を活かすことができます。データのランダム化にはさまざまなツールを使用できます。オープンソースツールの [Shuf](https://en.wikipedia.org/wiki/Shuf) の使用例については、データ移行チュートリアルの「[ステップ 2: DSBulk を使用してアップロード対象のデータを準備する](dsbulk-upload-prepare-data.md)」を参照してください。以下に示した例は、`DataFrame` としてデータをシャッフルする方法です。

     ```
     import org.apache.spark.sql.functions.randval
     shuffledDF = dataframe.orderBy(rand())
     ```

1. Amazon Keyspaces でターゲットのキースペースとテーブルを作成します。

   1. を使用して Amazon Keyspaces に接続します`cqlsh-expansion`。`cqlsh-expansion` のインストール手順については、「[`cqlsh-expansion` による Amazon Keyspaces までの接続](programmatic.cqlsh.md#using_cqlsh)」を参照してください。

      次の例のサービスエンドポイントを独自の値に置き換えます。

      ```
      cqlsh-expansion cassandra.us-east-1.amazonaws.com 9142 --ssl
      ```

   1. 次の例に示すように、`catalog` という名前の新しいキースペースを作成します。

      ```
      CREATE KEYSPACE catalog WITH REPLICATION = {'class': 'SingleRegionStrategy'};
      ```

   1. 新しいキースペースが利用可能な状態になったら、次のコードを使用してターゲットテーブル `book_awards` を作成します。非同期的なリソース作成と、リソースが利用可能かどうかを確認する方法については、「[Amazon Keyspaces でキースペースの作成ステータスを確認する](keyspaces-create.md)」を参照してください。

      ```
      CREATE TABLE catalog.book_awards (
         year int,
         award text,
         rank int, 
         category text,
         book_title text,
         author text, 
         publisher text,
         PRIMARY KEY ((year, award), category, rank)
         );
      ```

# ステップ 5: Apache Cassandra Spark コネクタで Amazon Keyspaces データの書き込みや読み込みを行う
<a name="spark-tutorial-step5"></a>

このステップでは、まず Spark Cassandra `DataFrame` コネクタを使用してサンプルファイルのデータを読み込みます。次に、`DataFrame` のデータを、 Amazon Keyspaces テーブルに書き込みます。この部分を別々に利用して、たとえば Amazon Keyspaces テーブルにデータを移行することもできます。最後に、Spark Cassandra `DataFrame` コネクタで、テーブルからデータをに読み込みます。この部分を別々に利用して、たとえば、Amazon Keyspaces テーブルからデータを読み取り、Apache Spark でデータ分析を実行することができます。

1. 次の例のように Spark シェルを起動します。この例では、SigV4 認証を使用しています。注意してください。

   ```
   ./spark-shell --files application.conf --conf spark.cassandra.connection.config.profile.path=application.conf --packages software.aws.mcs:aws-sigv4-auth-cassandra-java-driver-plugin:4.0.5,com.datastax.spark:spark-cassandra-connector_2.12:3.1.0 --conf spark.sql.extensions=com.datastax.spark.connector.CassandraSparkExtensions
   ```

1. 以下のコードで Spark Cassandra コネクタをインポートします。

   ```
   import org.apache.spark.sql.cassandra._
   ```

1. CSV ファイルからデータを読み取って `DataFrame` に保存するには、次のコード例を利用できます。

   ```
   var df = spark.read.option("header","true").option("inferSchema","true").csv("keyspaces_sample_table.csv")
   ```

   次のコマンドで結果を表示できます。

   ```
   scala> df.show();
   ```

   出力は次のようになります。

   ```
   +----------------+----+-----------+----+------------------+--------------------+-------------+
   |           award|year|   category|rank|            author|          book_title|    publisher|
   +----------------+----+-----------+----+------------------+--------------------+-------------+
   |Kwesi Manu Prize|2020|    Fiction|   1|        Akua Mansa|   Where did you go?|SomePublisher|
   |Kwesi Manu Prize|2020|    Fiction|   2|       John Stiles|           Yesterday|Example Books|
   |Kwesi Manu Prize|2020|    Fiction|   3|        Nikki Wolf|Moving to the Cha...| AnyPublisher|
   |            Wolf|2020|Non-Fiction|   1|       Wang Xiulan|    History of Ideas|Example Books|
   |            Wolf|2020|Non-Fiction|   2|Ana Carolina Silva|       Science Today|SomePublisher|
   |            Wolf|2020|Non-Fiction|   3| Shirley Rodriguez|The Future of Sea...| AnyPublisher|
   |     Richard Roe|2020|    Fiction|   1| Alejandro Rosalez|         Long Summer|SomePublisher|
   |     Richard Roe|2020|    Fiction|   2|       Arnav Desai|             The Key|Example Books|
   |     Richard Roe|2020|    Fiction|   3|     Mateo Jackson|    Inside the Whale| AnyPublisher|
   +----------------+----+-----------+----+------------------+--------------------+-------------+
   ```

   `DataFrame` のデータのスキーマは、次の例のように確認できます。

   ```
   scala> df.printSchema
   ```

   出力は次のようになります。

   ```
   root
   |-- award: string (nullable = true)
   |-- year: integer (nullable = true)
   |-- category: string (nullable = true)
   |-- rank: integer (nullable = true)
   |-- author: string (nullable = true)
   |-- book_title: string (nullable = true)
   |-- publisher: string (nullable = true)
   ```

1. `DataFrame` のデータを次のコマンドで Amazon Keyspaces テーブルに書き込みます。

   ```
   df.write.cassandraFormat("book_awards", "catalog").mode("APPEND").save()
   ```

1. データが保存されたことを確認するには、次の例のように、データをデータフレームに読み戻します。

   ```
   var newDf = spark.read.cassandraFormat("book_awards", "catalog").load()
   ```

   これで、データフレームに組み込まれたデータを表示できます。

   ```
   scala> newDf.show()
   ```

   このコマンドの出力は次のようになります。

   ```
   +--------------------+------------------+----------------+-----------+-------------+----+----+
   |          book_title|            author|           award|   category|    publisher|rank|year|
   +--------------------+------------------+----------------+-----------+-------------+----+----+
   |         Long Summer| Alejandro Rosalez|     Richard Roe|    Fiction|SomePublisher|   1|2020|
   |    History of Ideas|       Wang Xiulan|            Wolf|Non-Fiction|Example Books|   1|2020|
   |   Where did you go?|        Akua Mansa|Kwesi Manu Prize|    Fiction|SomePublisher|   1|2020|
   |    Inside the Whale|     Mateo Jackson|     Richard Roe|    Fiction| AnyPublisher|   3|2020|
   |           Yesterday|       John Stiles|Kwesi Manu Prize|    Fiction|Example Books|   2|2020|
   |Moving to the Cha...|        Nikki Wolf|Kwesi Manu Prize|    Fiction| AnyPublisher|   3|2020|
   |The Future of Sea...| Shirley Rodriguez|            Wolf|Non-Fiction| AnyPublisher|   3|2020|
   |       Science Today|Ana Carolina Silva|            Wolf|Non-Fiction|SomePublisher|   2|2020|
   |             The Key|       Arnav Desai|     Richard Roe|    Fiction|Example Books|   2|2020|
   +--------------------+------------------+----------------+-----------+-------------+----+----+
   ```

# Amazon Keyspaces で Spark Cassandra コネクタを使用する場合の一般的なエラーのトラブルシューティング
<a name="spark-tutorial-step6"></a>

Amazon Virtual Private Cloud で Amazon Keyspaces に接続している場合、Spark コネクタを使用するときに発生する最も一般的なエラーは、以下の設定の問題が原因です。
+ VPC で使用する IAM ユーザーまたはロールに、Amazon Keyspaces の `system.peers` テーブルにアクセスするために必要な権限がない。詳細については、「[インターフェイス VPC エンドポイント情報を含む `system.peers` テーブルエントリの入力](vpc-endpoints.md#system_peers)」を参照してください。
+ IAM ユーザーまたはロールに、ユーザーテーブルへの必要な読み取り/書き込み許可と Amazon Keyspaces のシステムテーブルへの読み取り権限がない。詳細については、「[ステップ 1: Amazon Keyspaces と Apache Cassandra Spark コネクタとの統合を設定する](spark-tutorial-step1.md)」を参照してください。
+ Java ドライバーの設定では、SSL/TLS 接続を作成するときにホスト名検証が無効になりません。例については「[ステップ 2: ドライバーを設定する](using_java_driver.md#java_tutorial.driverconfiguration)」を参照してください。

接続トラブルシューティングの詳細な手順については、「[VPC エンドポイント接続が正しく機能しない](troubleshooting.connecting.md#troubleshooting.connection.vpce)」を参照してください。

さらに、Amazon CloudWatch メトリクスは、Amazon ｋKeyspaces の、 Spark Cassandra コネクタ設定に関する問題のトラブルシューティングに利用できます。CloudWatch における Amazon Keyspaces の使用の詳細については、「[Amazon CloudWatch による Amazon Keyspaces のモニタリング](monitoring-cloudwatch.md)」を参照してください。

以下のセクションでは、Spark Cassandra コネクタを使用する際に確認しておくと便利なメトリクスについて説明します。

**PerConnectionRequestRateExceeded**  
Amazon Keyspaces のクォータは、接続ごとに 1 秒あたり 3,000 件のリクエストです。各 Spark エクゼキューターが Amazon Keyspaces との接続を確立します。再試行を複数回実行すると、接続ごとのリクエストレートのクォータを使い果たす可能性があります。このクォータを超えると、Amazon Keyspaces は CloudWatch で `PerConnectionRequestRateExceeded` メトリクスを出力します。  
PerConnectionRequestrateExceeded イベントが、その他のシステムエラーやユーザーエラーとともに表示される場合は、Spark が接続ごとに割り当てられたリクエスト数を超えて複数回リトライを実行している可能性があります。  
他のエラーのない `PerConnectionRequestRateExceeded` イベントが表示される場合は、スループットを高めるためにドライバー設定の接続数を増やすか、Spark ジョブのエグゼキューターの数を増やす必要があるかもしれません。

**StoragePartitionThroughputCapacityExceeded**  
Amazon Keyspaces クォータは、パーティションごとに 1 秒あたり 1,000 WCU または WRU、1 秒あたり 3,000 RCU または RRU です。`StoragePartitionThroughputCapacityExceeded` CloudWatch イベントが表示される場合は、データがロード時にランダム化されていない可能性があります。データをシャッフルする方法の例については、「[ステップ 4: Amazon Keyspaces でソースデータとターゲットテーブルを準備する](spark-tutorial-step4.md)」を参照してください。

## 一般的なエラーおよび警告
<a name="common_errors_warnings"></a>

Amazon 仮想プライベートクラウドを使用していて Amazon Keyspaces に接続している場合、Cassandra ドライバーで `system.peers` テーブル内のコントロールノードそのものに関する警告メッセージが発行されることがあります。詳細については、「[よくあるエラーおよび警告](vpc-endpoints.md#vpc_troubleshooting)」を参照してください。この警告は、無視しても問題ありません。