從 開始 AWS CLI - Amazon EMR

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

從 開始 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 任務
  1. 使用下列命令來複製我們將執行到新儲存貯體的範例指令碼。

    aws s3 cp s3://us-east-1.elasticmapreduce/emr-containers/samples/wordcount/scripts/wordcount.py s3://amzn-s3-demo-bucket/scripts/
  2. 在下列命令中,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" } }'
  3. 請注意輸出 中傳回的任務執行 ID。在下列步驟中job-run-id使用此 ID 取代 。

Hive

在本教學課程中,我們會建立資料表、插入一些記錄,以及執行計數彙總查詢。若要執行 Hive 任務,請先建立包含所有 Hive 查詢的檔案,以作為單一任務的一部分執行,將檔案上傳至 S3,並在啟動 Hive 任務時指定此 S3 路徑。

執行 Hive 任務
  1. 建立名為 的檔案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;
  2. 使用下列命令hive-query.ql上傳至 S3 儲存貯體。

    aws s3 cp hive-query.ql s3://amzn-s3-demo-bucket/emr-serverless-hive/query/hive-query.ql
  3. 在下列命令中,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" } } }'
  4. 請注意輸出中傳回的任務執行 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 執行期日誌會上傳至由工作者類型適當命名的資料夾,例如 driverexecutor。 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 任務