

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

# 使用 Amazon EMR Serverless 的無伺服器儲存
使用無伺服器儲存

使用 Amazon EMR 7.12 版及更高版本時，請在執行 Apache Spark 任務時使用無伺服器儲存體，以消除本機磁碟佈建並降低資料處理成本，並防止任務失敗造成磁碟容量限制。無伺服器儲存會自動處理任務的隨機播放、磁碟溢出和磁碟快取操作，而不需要容量組態，並免費存放中繼資料。Amazon EMR Serverless 會將中繼資料存放在完全受管的無伺服器儲存體中，該儲存體會根據工作負載需求自動擴展，並可讓 Spark 在閒置時立即釋放運算工作者，進而降低運算成本。

## 主要優點


EMR Serverless 的無伺服器儲存提供下列優點。
+ **零組態儲存** – 無伺服器儲存不需要為每個應用程式或任務設定本機磁碟類型和大小。EMR Serverless 會自動管理中繼資料操作，無需容量規劃。
+ **透過自動擴展來防止任務失敗** – 儲存容量會根據工作負載需求自動擴展，防止任務失敗的磁碟容量不足。
+ **降低資料處理成本** – 無伺服器儲存體透過兩種機制降低處理成本。首先，免費提供中繼資料儲存，您只需支付運算和記憶體資源的費用。其次，具有 Spark 動態資源配置的解耦儲存可讓 Spark 在閒置時立即釋出工作者，而不是保留工作者，以保留本機磁碟上的中繼資料。這可讓每個 Spark 階段的向外擴展和向內擴展速度更快，降低較新階段需要較少工作者的任務運算成本。
+ **具有任務層級隔離的加密儲存** – 所有中繼資料都會在傳輸中和靜態時以嚴格的任務層級隔離進行加密。
+ **精細存取控制支援** – 無伺服器儲存支援透過 AWS Lake Formation 整合進行精細存取控制。

## 開始使用


請參閱下列步驟，以在 Spark 工作流程中使用 EMR Serverless 的無伺服器儲存。

1. **建立 EMR Serverless 應用程式**

   在 spark-defaults 分類中將 spark 屬性設定為 `spark.aws.serverlessStorage.enabled` **true**，以建立已啟用無伺服器儲存的 EMR Serverless 7.12 版 （或更新版本） 應用程式。

   ```
   aws emr-serverless create-application \
     --type "SPARK" \
     --name my-application \
     --release-label emr-7.12.0 \
     --runtime-configuration '[{
         "classification": "spark-defaults",
           "properties": {
             "spark.aws.serverlessStorage.enabled": "true"
           }
       }]' \
     --region <AWS_REGION>
   ```

1. **啟動 Spark 任務**

   在您的應用程式上啟動任務執行。EMR Serverless 的無伺服器儲存會自動處理中繼資料操作，例如任務的隨機播放。

   ```
   aws emr-serverless start-job-run \
     --application-id <application-id> \
     --execution-role-arn <job-role-arn> \
     --job-driver '{
       "sparkSubmit": {
         "entryPoint": "s3://<bucket>/script.py",
         "sparkSubmitParameters": "--conf spark.executor.cores=4 
           --conf spark.executor.memory=20g 
           --conf spark.driver.cores=4 
           --conf spark.driver.memory=8g 
           --conf spark.executor.instances=10"
       }
     }'
   ```

   您也可以在任務層級啟用 EMR Serverless 的無伺服器儲存體，即使應用程式層級未啟用也一樣。這將啟動已啟用無伺服器儲存的工作者節點，以處理您的任務。您也可以將相同的 Spark 屬性設定為 `spark.aws.serverlessStorage.enabled` **false**，以停用特定任務的無伺服器儲存。

   ```
   # Turn on serverless storage for EMR serverless for a specific job
   aws emr-serverless start-job-run \
       --application-id <application-id> \
       --execution-role-arn <job-role-arn> \
       --job-driver '{
   "sparkSubmit": {
   "entryPoint": "/usr/lib/spark/examples/jars/spark-examples.jar",
               "entryPointArguments": ["1"],
               "sparkSubmitParameters": "--class org.apache.spark.examples.SparkPi
               --conf spark.aws.serverlessStorage.enabled": "true"
           }
       }'
   ```
**注意**  
若要繼續使用傳統的本機磁碟佈建，請省略`spark.aws.serverlessStorage.enabled`組態或將其設定為 **false**。

## 考量和限制

+ **發行版本** – Amazon EMR 7.12 版及更新版本支援無伺服器儲存。
+ **資料量限制** – 每個任務每次任務執行最多可讀取和寫入總計 200 GB 的中繼資料。超過此限制的任務將會失敗，並顯示錯誤訊息，指出已達到無伺服器儲存限制。
+ **任務執行逾時** – 無伺服器儲存支援執行逾時長達 24 小時的任務。針對較長執行逾時設定的任務將會失敗，並顯示錯誤訊息。
+ **預先初始化的容量** – 預先初始化的容量工作者不支援無伺服器儲存。當您設定預先初始化容量時，它只會由在任務層級明確停用無伺服器儲存的任務使用。啟用無伺服器儲存的任務一律會隨需佈建新工作者，而且不會使用任何預先初始化的容量，無論應用程式層級中的組態為何。
+ **工作負載類型** – 串流和互動式任務不支援無伺服器儲存。
+ **工作者組態** – 具有 1 或 2 個 vCPUs工作者不支援無伺服器儲存。

## 支援的 AWS 區域


EMR Serverless 在下列區域中支援無伺服器儲存：
+ 美國東部 (維吉尼亞北部)
+ 美國西部 (奧勒岡)
+ 歐洲 (愛爾蘭)