本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
從 開始 AWS CLI
步驟 1:建立 EMR Serverless 應用程式
使用 emr-serverless create-application
命令來建立第一個 EMR Serverless 應用程式。您需要指定應用程式類型,以及與您要使用的應用程式版本相關聯的 Amazon EMR發行標籤。應用程式的名稱為選用。
- Spark
-
若要建立 Spark 應用程式,請執行下列命令。
aws emr-serverless create-application \
--release-label emr-6.6.0 \
--type "SPARK" \
--name my-application
- Hive
-
若要建立 Hive 應用程式,請執行下列命令。
aws emr-serverless create-application \
--release-label emr-6.6.0 \
--type "HIVE" \
--name my-application
請注意輸出中傳回的應用程式 ID。您將使用 ID 啟動應用程式,並在任務提交期間,在此之後稱為 application-id
。
在您繼續前往 之前步驟 2:將任務執行提交至您的 EMR Serverless 應用程式,請確定您的應用程式已使用 get-application
達到 CREATED
狀態API。
aws emr-serverless get-application \
--application-id application-id
EMR Serverless 會建立工作者來容納您請求的任務。根據預設,這些是隨需建立的,但您也可以在建立應用程式時設定 initialCapacity
參數,以指定預先初始化的容量。您也可以限制應用程式可與 maximumCapacity
參數搭配使用的總容量上限。若要進一步了解這些選項,請參閱設定應用程式。
步驟 2:將任務執行提交至您的 EMR Serverless 應用程式
現在,您的 EMR Serverless 應用程式已準備好執行任務。
- Spark
-
在此步驟中,我們使用 PySpark 指令碼來計算多個文字檔案中唯一單字的出現次數。公有唯讀 S3 儲存貯體會同時存放指令碼和資料集。應用程式會將輸出檔案和日誌資料從 Spark 執行期傳送至您建立的 S3 儲存貯體中的 /output
和 /logs
目錄。
執行 Spark 任務
-
使用下列命令來複製我們將執行到新儲存貯體的範例指令碼。
aws s3 cp s3://us-east-1.elasticmapreduce/emr-containers/samples/wordcount/scripts/wordcount.py s3://amzn-s3-demo-bucket
/scripts/
-
在下列命令中,application-id
以您的應用程式 ID 取代 。job-role-arn
以ARN您在 中建立的執行期角色取代 建立任務執行期角色。替代 job-run-name
使用您要呼叫任務執行的名稱。使用您建立的 Amazon S3 儲存貯體取代所有amzn-s3-demo-bucket
字串,然後/output
新增至路徑。這會在儲存貯體中建立新的資料夾,而 EMR Serverless 可以複製應用程式的輸出檔案。
aws emr-serverless start-job-run \
--application-id application-id
\
--execution-role-arn job-role-arn
\
--name job-run-name
\
--job-driver '{
"sparkSubmit": {
"entryPoint": "s3://amzn-s3-demo-bucket
/scripts/wordcount.py",
"entryPointArguments": ["s3://amzn-s3-demo-bucket
/emr-serverless-spark/output"],
"sparkSubmitParameters": "--conf spark.executor.cores=1 --conf spark.executor.memory=4g --conf spark.driver.cores=1 --conf spark.driver.memory=4g --conf spark.executor.instances=1"
}
}'
-
請注意輸出 中傳回的任務執行 ID。在下列步驟中job-run-id
使用此 ID 取代 。
- Hive
-
在本教學課程中,我們會建立資料表、插入一些記錄,以及執行計數彙總查詢。若要執行 Hive 任務,請先建立包含所有 Hive 查詢的檔案,以作為單一任務的一部分執行,將檔案上傳至 S3,並在啟動 Hive 任務時指定此 S3 路徑。
執行 Hive 任務
-
建立名為 的檔案hive-query.ql
,其中包含您想要在 Hive 任務中執行的所有查詢。
create database if not exists emrserverless;
use emrserverless;
create table if not exists test_table(id int);
drop table if exists Values__Tmp__Table__1;
insert into test_table values (1),(2),(2),(3),(3),(3);
select id, count(id) from test_table group by id order by id desc;
-
使用下列命令hive-query.ql
上傳至 S3 儲存貯體。
aws s3 cp hive-query.ql s3://amzn-s3-demo-bucket
/emr-serverless-hive/query/hive-query.ql
-
在下列命令中,application-id
使用您自己的應用程式 ID 取代 。job-role-arn
以ARN您在 中建立的執行期角色取代 建立任務執行期角色。使用您建立的 Amazon S3 儲存貯體取代所有amzn-s3-demo-bucket
字串,並將 /output
和 新增至/logs
路徑。這會在儲存貯體中建立新的資料夾,無EMR伺服器可以在其中複製應用程式的輸出和日誌檔案。
aws emr-serverless start-job-run \
--application-id application-id
\
--execution-role-arn job-role-arn
\
--job-driver '{
"hive": {
"query": "s3://amzn-s3-demo-bucket
/emr-serverless-hive/query/hive-query.ql",
"parameters": "--hiveconf hive.log.explain.output=false"
}
}' \
--configuration-overrides '{
"applicationConfiguration": [{
"classification": "hive-site",
"properties": {
"hive.exec.scratchdir": "s3://amzn-s3-demo-bucket
/emr-serverless-hive/hive/scratch",
"hive.metastore.warehouse.dir": "s3://amzn-s3-demo-bucket
/emr-serverless-hive/hive/warehouse",
"hive.driver.cores": "2",
"hive.driver.memory": "4g",
"hive.tez.container.size": "4096",
"hive.tez.cpu.vcores": "1"
}
}],
"monitoringConfiguration": {
"s3MonitoringConfiguration": {
"logUri": "s3://amzn-s3-demo-bucket
/emr-serverless-hive/logs"
}
}
}'
-
請注意輸出中傳回的任務執行 ID。在下列步驟中job-run-id
使用此 ID 取代 。
步驟 3:檢閱任務執行的輸出
任務執行通常需要 3-5 分鐘才能完成。
- Spark
-
您可以使用下列命令檢查 Spark 任務的狀態。
aws emr-serverless get-job-run \
--application-id application-id
\
--job-run-id job-run-id
將日誌目的地設定為 時s3://amzn-s3-demo-bucket
/emr-serverless-spark/logs
,您可以在 下找到此特定任務執行的日誌s3://amzn-s3-demo-bucket
/emr-serverless-spark/logs/applications/application-id
/jobs/job-run-id
。
對於 Spark 應用程式,EMRServerless 每 30 秒會將事件日誌推送到 S3 日誌目的地中的sparklogs
資料夾。當您的任務完成時,驅動程式和執行器的 Spark 執行期日誌會上傳至由工作者類型適當命名的資料夾,例如 driver
或 executor
。 PySpark 任務的輸出會上傳至 s3://amzn-s3-demo-bucket
/output/
。
- Hive
-
您可以使用下列命令檢查 Hive 任務的狀態。
aws emr-serverless get-job-run \
--application-id application-id
\
--job-run-id job-run-id
將日誌目的地設定為 時s3://amzn-s3-demo-bucket
/emr-serverless-hive/logs
,您可以在 下找到此特定任務執行的日誌s3://amzn-s3-demo-bucket
/emr-serverless-hive/logs/applications/application-id
/jobs/job-run-id
。
對於 Hive 應用程式,EMRServerless 會持續將 Hive 驅動程式上傳到 S3 日誌目的地的HIVE_DRIVER
資料夾,並將 Tez 任務日誌上傳到TEZ_TASK
資料夾。任務執行達到 SUCCEEDED
狀態後,Hive 查詢的輸出會在您在 monitoringConfiguration
欄位中指定的 Amazon S3 位置可用configurationOverrides
。
步驟 4:清理
完成本教學課程的使用後,請考慮刪除您建立的資源。建議您發行不打算再次使用的資源。
刪除您的應用程式
若要刪除應用程式,請使用下列命令。
aws emr-serverless delete-application \
--application-id application-id
刪除 S3 日誌儲存貯體
若要刪除 S3 記錄和輸出儲存貯體,請使用下列命令。amzn-s3-demo-bucket
以 中建立的 S3 儲存貯體實際名稱取代 為無EMR伺服器準備儲存體。
aws s3 rm s3://amzn-s3-demo-bucket
--recursive
aws s3api delete-bucket --bucket amzn-s3-demo-bucket
刪除您的任務執行期角色
若要刪除執行期角色,請將政策與角色分離。然後,您可以同時刪除角色和政策。
aws iam detach-role-policy \
--role-name EMRServerlessS3RuntimeRole \
--policy-arn policy-arn
若要刪除角色,請使用下列命令。
aws iam delete-role \
--role-name EMRServerlessS3RuntimeRole
若要刪除連接至角色的政策,請使用下列命令。
aws iam delete-policy \
--policy-arn policy-arn
如需執行 Spark 和 Hive 任務的更多範例,請參閱 Spark 任務和 Hive 任務。