

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

# 儲存 Spark 隨機資料
<a name="monitor-spark-shuffle-manager"></a>

隨機排序是每當資料分割區之間重新排列 Spark 任務的重要步驟。這是必需的，因為諸如 `join`、` groupByKey`、`reduceByKey` 以及 `repartition` 等廣泛轉換需要來自其他分割區的資訊才能完成處理。Spark 會從每個分割區收集所需的資料，並將其結合成一個新的分割區。在隨機排序期間，資料會寫入磁碟並透過網路傳輸。因此，隨機排序操作與本機磁碟容量密切相關。當執行器沒有足夠的磁碟空間並且沒有復原時，Spark 擲出 `No space left on device` 或 ` MetadataFetchFailedException` 錯誤。

**注意**  
 AWS Glue 僅 AWS Glue ETL 任務支援具有 Amazon S3 的 Spark 隨機播放外掛程式。

**解決方案**  
透過 AWS Glue，您現在可以使用 Amazon S3 來儲存使用 Cloud Shuffle Storage Plugin 的 Spark 隨機播放資料。Amazon S3 是一項物件儲存服務，提供領先業界的可擴展性、資料可用性、安全性和效能。此解決方案可為您的 Spark 任務分解運算和儲存，並提供完整的彈性和低成本的隨機排序儲存，讓您可靠地執行最密集的隨機排序工作負載。

![Spark Map Stage 寫入磁碟、將資料隨機播放至 S3，然後 Spark Reduce Stage 讀取自 S3。](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/gs-s3-shuffle-diagram.png)


如果已知任務受到大型隨機操作的本機磁碟容量限制，您可以開啟 Amazon S3 隨機排序來可靠地執行您的 AWS Glue 任務，而不會失敗。在某些情況下，如果您有大量的小分割區或隨機排序檔案已寫入 Amazon S3，則隨機排序到 Amazon S3 會比本機磁碟 (或 EBS) 稍慢一些。

## 使用雲端隨機排序儲存外掛程式的先決條件
<a name="monitor-spark-shuffle-manager-prereqs"></a>

 若要搭配 AWS Glue ETL 任務使用 Cloud Shuffle Storage Plugin，您需要下列項目：
+ 與任務執行位於相同區域的 Amazon S3 儲存貯體，用於存放中繼隨機排序和溢出的資料。您可以使用 `--conf spark.shuffle.glue.s3ShuffleBucket=s3://{{shuffle-bucket}}/{{prefix}}/` 指定隨機排序儲存的 Amazon S3 字首，如下列範例所示：

  ```
  --conf spark.shuffle.glue.s3ShuffleBucket=s3://glue-shuffle-123456789-us-east-1/glue-shuffle-data/
  ```
+  在*字首*上設定 Amazon S3 儲存生命週期政策 (如 `glue-shuffle-data`)，因為隨機排序管理器在任務完成後不會清除檔案。任務完成後，應刪除中繼隨機排序和溢出的資料。使用者可以在字首上設定簡短的生命週期政策。如需設定 Amazon S3 生命週期政策的說明，請參閱《Amazon Simple Storage Service 使用者指南》中的[設定儲存貯體的生命週期組態](https://docs.aws.amazon.com//AmazonS3/latest/userguide/how-to-set-lifecycle-configuration-intro.html)。

## 從 AWS 主控台使用 AWS Glue Spark 隨機播放管理員
<a name="monitor-spark-shuffle-manager-using-console"></a>

若要在設定任務時，使用 AWS Glue 主控台或 AWS Glue Studio 設定 AWS Glue Spark 隨機排序管理器：選擇 **--write-shuffle-files-to-s3** 任務參數以開啟該任務的 Amazon S3 隨機排序。

![任務參數區段顯示具有選用值欄位和移除按鈕的 write-shuffle-files 金鑰。](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/gs-s3-shuffle.png)


## 使用 AWS Glue Spark 隨機排序外掛程式
<a name="monitor-spark-shuffle-manager-using"></a>

下列任務參數會開啟並微調 AWS Glue 隨機排序管理器。這些參數是旗標，因此不會考慮提供的任何值。

**重要**  
若要停用 Amazon S3 隨機播放，您必須完全從任務組態中移除 `--write-shuffle-files-to-s3` 參數。將值設定為 `false` 不會停用 Amazon S3 隨機播放 — 參數充當以存在為基礎的旗標，這表示任何值 （包括 `false`) 都會在參數存在時啟用 Amazon S3 隨機播放。
+ `--write-shuffle-files-to-s3`：主要旗標，啟用 AWS Glue Spark 隨機排序管理器以使用 Amazon S3 儲存貯體來寫入和讀取隨機排序資料。當未指定旗標時不使用隨機排序管理器。
+ `--write-shuffle-spills-to-s3` – (僅對 AWS Glue 2.0 版本提供支援)。此為選用旗標，可讓您將溢出檔案卸載到 Amazon S3 儲存貯體，這可為 Spark 任務提供額外的彈性。只有將大量資料溢出到磁碟的大型工作負載才需要它。如果未指定旗標，則不會寫入中繼溢出檔案。
+ ` --conf spark.shuffle.glue.s3ShuffleBucket=s3://<shuffle-bucket>` — 另一個可選標記，它指定您在其中寫入隨機排序檔案的 Amazon S3 儲存貯體。根據預設，`--TempDir`/shuffle-data. AWS Glue 3.0\+ 支援將隨機播放檔案寫入多個儲存貯體，方法是使用逗號分隔符號指定儲存貯體，如 所示`--conf spark.shuffle.glue.s3ShuffleBucket=s3://{{shuffle-bucket-1}}/{{prefix}},s3://{{shuffle-bucket-2}}/{{prefix}}/`。使用多個儲存貯體可改善效能。

您需要提供安全組態設定，才能為隨機資料啟用靜態加密。如需安全組態的詳細資訊，請參閱 [設定 AWS Glue 中的加密](set-up-encryption.md)。AWS Glue 支援 Spark 提供的所有其他隨機顯示相關組態。

**雲端隨機排序儲存外掛程式的軟體二進位檔**  
您也可以依據 Apache 2.0 許可證下載 Apache Spark 雲端隨機排序儲存外掛程式的軟體二進位檔，並在任何 Spark 環境中執行該二進位檔。這個新的外掛程式隨附對 Amazon S3 的立即支援，也可以輕鬆設定為使用其他形式的雲端儲存，例如 [Google Cloud Storage 和 Microsoft Azure Blob 儲存體](https://github.com/aws-samples/aws-glue-samples/blob/master/docs/cloud-shuffle-plugin/README.md)。如需詳細資訊，請參閱 [Apache Spark 雲端隨機排序儲存外掛程式](https://docs.aws.amazon.com/glue/latest/dg/cloud-shuffle-storage-plugin.html)。

**備註與限制**  
以下是 AWS Glue 隨機排序管理器的備註或限制：
+  AWS Glue 隨機播放管理員不會在任務完成後自動刪除存放在 Amazon S3 儲存貯體中的 （暫時） 隨機播放資料檔案。若要確保資料保護，請在啟用雲端隨機排序儲存外掛程式之前遵循 [使用雲端隨機排序儲存外掛程式的先決條件](#monitor-spark-shuffle-manager-prereqs) 中的說明進行操作。
+ 如果資料偏斜，您可以使用此功能。