本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
从这里开始 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-application
API。
aws emr-serverless get-application \
--application-id application-id
EMRServerless 会创建工作人员来容纳您请求的工作。默认情况下,这些容量是按需创建的,但您也可以通过在创建应用程序时设置initialCapacity
参数来指定预初始化的容量。您还可以使用maximumCapacity
参数限制应用程序可以使用的总最大容量。要了解有关这些选项的更多信息,请参阅配置应用程序。
步骤 2:向您的EMR无服务器应用程序提交作业运行
现在,您的EMR无服务器应用程序已准备好运行作业。
- 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
用你想称之为作业运行的名字。将所有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"
}
}'
-
请注意输出中返回的任务运行 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您在中创建的运行时角色替换创建作业运行时角色。将所有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"
}
}
}'
-
请注意输出中返回的任务运行 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 运行时日志会上传到按工作器类型适当命名的文件夹,例如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
。
对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 职位