从 AWS CLI 开始使用
使用命令从 AWS CLI 开始使用 EMR Serverless,以创建应用程序、运行作业、检查作业运行输出和删除资源。
步骤 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
。
在继续学习 CREATED
之前,请确保您的应用程序已使用 get-application
API 达到 步骤 2:将作业运行提交到 EMR Serverless 应用程序 状态。
aws emr-serverless get-application \
--application-id application-id
EMR Serverless 会创建工作线程来容纳您请求的作业。默认情况下,这些是按需创建的,但您也可以在创建应用程序时通过设置 initialCapacity
参数来指定预初始化容量。您还可以使用 maximumCapacity
参数来限制应用程序可以使用的最大总容量。要了解有关这些选项的更多信息,请参阅使用 EMR Serverless 时配置应用程序。
步骤 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
替换为您要调用的作业运行名称。将所有 amzn-s3-demo-bucket
字符串替换为您创建的 Amazon S3 存储桶,然后将 /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。将所有 amzn-s3-demo-bucket
字符串替换为您创建的 Amazon S3 存储桶,然后将 /output
和 /logs
添加到路径中。这将在您的存储桶中创建的新文件夹,EMR Serverless 可以在其中复制应用程序的输出和日志文件。
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 应用程序,EMR 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
下方找到特定作业的日志。
对于 Hive 应用程序,EMR Serverless 会持续将 Hive 驱动程序上传到 S3 日志目标的 HIVE_DRIVER
文件夹,并将 Tez 任务日志上传到 TEZ_TASK
文件夹。作业运行达到 SUCCEEDED
状态后,Hive 查询的输出将出现在您在 configurationOverrides
的 monitoringConfiguration
字段中指定的 Amazon S3 位置。
步骤 4:清除
本教程学习结束后,请考虑删除创建的资源。建议您释放不打算再次使用的资源。
删除应用程序
要删除应用程序,请使用以下命令。
aws emr-serverless delete-application \
--application-id application-id
删除 S3 日志存储桶
要删除 S3 日志记录和输出存储桶,请使用以下命令。将 amzn-s3-demo-bucket
替换为您在 准备 EMR Serverless 存储 中创建的 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 作业的更多示例,请参阅 运行 EMR Serverless 作业时使用 Spark 配置 和 运行 EMR Serverless 作业时使用 Hive 配置。