

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 步驟 2：設定 Apache Cassandra Spark 連接器
<a name="spark-tutorial-step2"></a>

Apache Spark 是以不同方式設定的通用運算平台。若要設定 Spark 和 Spark Cassandra Connector 以與 Amazon Keyspaces 整合，建議您從下一節所述的最低組態設定開始，然後在稍後根據您的工作負載進行增加。
+ **建立小於 8 MBs Spark 分割區大小。**

  在 Spark 中，*分割區*代表可平行執行的資料原子區塊。當您使用 Spark Cassandra 連接器將資料寫入 Amazon Keyspaces 時，Spark 分割區越小，任務要寫入的記錄量就越小。如果 Spark 任務遇到多個錯誤，則會在指定的重試次數用盡之後失敗。為了避免重新播放大型任務和重新處理大量資料，請將 Spark 分割區的大小保持較小。
+ **對具有大量重試的每個執行器使用少量並行寫入。**

  Amazon Keyspaces 會將容量不足錯誤傳回 Cassandra 驅動程式，做為操作逾時。您無法透過變更設定的逾時持續時間來解決容量不足所造成的逾時，因為 Spark Cassandra Connector 會嘗試使用 透明地重試請求`MultipleRetryPolicy`。為了確保重試不會超過驅動程式的連線集區，請針對具有大量重試的每個執行器，使用較低的並行寫入次數。下列程式碼片段為範例。

  ```
  spark.cassandra.query.retry.count = 500
  spark.cassandra.output.concurrent.writes = 3
  ```
+ **細分總輸送量，並將其分散到多個 Cassandra 工作階段。**
  + Cassandra Spark Connector 會為每個 Spark 執行器建立一個工作階段。將此工作階段視為規模單位，以判斷所需的輸送量和所需的連線數。
  + 定義每個執行器的核心數量和每個任務的核心數量時，從低開始並視需要增加。
  + 設定 Spark 任務失敗，以在發生暫時性錯誤時允許處理。熟悉應用程式的流量特性和需求後，建議您`spark.task.maxFailures`將 設定為限定值。
  + 例如，下列組態可以處理每個執行器、每個工作階段的兩個並行任務：

    ```
    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 會將映射輸出檔案和彈性分散式資料集 (RDDs) 儲存到`/tmp `資料夾。視 Spark 主機的組態而定，這可能會導致*裝置樣式錯誤沒有剩餘空間*。
  + 若要將`SPARK_LOCAL_DIRS`環境變數設定為名為 的目錄`/example/spark-dir`，您可以使用下列命令。

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