从这里开始 AWS CLI - Amazon EMR

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

从这里开始 AWS CLI

步骤 1:创建EMR无服务器应用程序

使用emr-serverless create-application命令创建您的第一个EMR无服务器应用程序。您需要指定应用程序类型以及与要使用的应用程序版本关联的 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无服务器应用程序提交作业运行,请确保您的应用程序已达到的CREATED状态get-applicationAPI。

aws emr-serverless get-application \ --application-id application-id

EMRServerless 会创建工作人员来容纳您请求的工作。默认情况下,这些容量是按需创建的,但您也可以通过在创建应用程序时设置initialCapacity参数来指定预初始化的容量。您还可以使用maximumCapacity参数限制应用程序可以使用的总最大容量。要了解有关这些选项的更多信息,请参阅配置应用程序

步骤 2:向您的EMR无服务器应用程序提交作业运行

现在,您的EMR无服务器应用程序已准备好运行作业。

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 用你想称之为作业运行的名字。将所有amzn-s3-demo-bucket字符串替换为您创建的 Amazon S3 存储桶,然后/output添加到路径中。这将在您的存储桶中创建一个新文件夹,EMRServerless 可以在其中复制应用程序的输出文件。

    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您在中创建的运行时角色替换创建作业运行时角色。将所有amzn-s3-demo-bucket字符串替换为您创建的 Amazon S3 存储桶,/output并在路径中/logs添加和。这会在您的存储桶中创建新的文件夹,EMRServerless 可以在其中复制应用程序的输出和日志文件。

    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

对EMR于 Spark 应用程序,Serverless 每 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

对EMR于 Hive 应用程序,Serverless 会持续将 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替换为在为EMR无服务器准备存储... 中创建的 S3 存储桶的实际名称

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 职位