开始使用 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

开始使用

本主题通过在虚拟集群上部署 Spark Python 应用程序,帮助您开始使用 Amazon EMR on EKS。

开始之前,请确保您已完成设置中的步骤。

您将需要安装步骤中的以下信息:

  • 使用 Amazon EMR 注册的 Amazon EKS 集群 和 Kubernetes 命名空间的虚拟集群 ID

    重要

    创建 EKS 集群时,请使用 m5.xlarge 作为实例类型,或使用具有较高 CPU 和内存的任何其他实例类型。与 m5.xlarge 相比,使用具有较低 CPU 或内存的实例类型可能会由于集群中可用资源不足而导致任务失败。

  • 用于执行任务的 IAM 角色名称

  • Amazon EMR 发行版的发行版标签(例如:emr-6.4.0-latest

  • 用于日志记录和监控的地址目标:

    • Amazon CloudWatch 日志组名称和日志流前缀

    • 用于存储事件和容器日志的 Amazon S3 位置

重要

Amazon EMR on EKS 任务将 Amazon CloudWatch 和 Amazon S3 用作监控和日志记录的地址目标。您可以通过查看发送到这些地址的任务日志来监控任务进度并排查故障。要想启用日志记录,与执行任务的 IAM 角色关联的 IAM 策略必须具有访问目标资源所需的权限。如果 IAM 策略不具备所需的权限,则必须遵循更新任务执行角色的信任策略中所述的步骤,配置任务运行至使用 Amazon S3 日志,并且在运行此类示例任务之前,配置任务运行至使用 CloudWatch Logs

运行 Spark Python 应用程序

执行以下步骤,即可在 Amazon EMR on EKS 运行简单的wordcount.py Spark Python 应用程序。应用程序entryPoint文件位于s3://REGION.elasticmapreduce/emr-containers/samples/wordcount/scripts/wordcount.py。此类区域是 Amazon EMR on EKS 虚拟集群所在区域,例如 us-east-1

  1. 使用所需的权限更新任务执行角色的 IAM 策略,如以下策略语句所示:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadFromLoggingAndInputScriptBuckets", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::*.elasticmapreduce", "arn:aws:s3:::*.elasticmapreduce/*", "arn:aws:s3:::DOC-EXAMPLE-BUCKET-OUTPUT", "arn:aws:s3:::DOC-EXAMPLE-BUCKET-OUTPUT/*", "arn:aws:s3:::DOC-EXAMPLE-BUCKET-LOGGING", "arn:aws:s3:::DOC-EXAMPLE-BUCKET-LOGGING/*" ] }, { "Sid": "WriteToLoggingAndOutputDataBuckets", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET-OUTPUT/*", "arn:aws:s3:::DOC-EXAMPLE-BUCKET-LOGGING/*" ] }, { "Sid": "DescribeAndCreateCloudwatchLogStream", "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:DescribeLogGroups", "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:*:*:*" ] }, { "Sid": "WriteToCloudwatchLogs", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:*:*:log-group:my_log_group_name:log-stream:my_log_stream_prefix/*" ] } ] }
    • 本策略的第一个语句ReadFromLoggingAndInputScriptBuckets授予ListBucketGetObjects访问以下 Amazon S3 存储桶:

      • REGION.elasticmapreduce‐应用程序文件所在的存储桶entryPoint

      • DOC-EXAMPLE-BUCKET-OUTPUT‐您为输出数据定义的存储桶。

      • DOC-EXAMPLE-BUCKET-LOGGING‐您为日志数据定义的存储桶。

    • 本策略的第二个语句WriteToLoggingAndOutputDataBuckets授予任务将数据分别写入输出和日志记录存储桶的权限。

    • 第三个语句DescribeAndCreateCloudwatchLogStream授予任务描述和创建 Amazon CloudWatch Logs 的权限。

    • 第四个语句WriteToCloudwatchLogs授予将日志写入my_log_group_name日志流中my_log_stream_prefix称为 Amazon CloudWatch 日志组的权限。

  2. 使用以下命令启动示例应用程序。以恰当值替换所有可替换的红色斜体值。此类区域是 Amazon EMR on EKS 虚拟集群所在区域,例如 us-east-1

    aws emr-containers start-job-run \ --virtual-cluster-id cluster_id \ --name sample-job-name \ --execution-role-arn execution-role-arn \ --release-label emr-6.4.0-latest \ --job-driver '{ "sparkSubmitJobDriver": { "entryPoint": "s3://REGION.elasticmapreduce/emr-containers/samples/wordcount/scripts/wordcount.py", "entryPointArguments": ["s3://DOC-EXAMPLE-BUCKET-OUTPUT/wordcount_output"], "sparkSubmitParameters": "--conf spark.executor.instances=2 --conf spark.executor.memory=2G --conf spark.executor.cores=2 --conf spark.driver.cores=1" } }' \ --configuration-overrides '{ "monitoringConfiguration": { "cloudWatchMonitoringConfiguration": { "logGroupName": "my_log_group_name", "logStreamNamePrefix": "my_log_stream_prefix" }, "s3MonitoringConfiguration": { "logUri": "s3://DOC-EXAMPLE-BUCKET-LOGGING" } } }'

    此任务的输出数据将出现在s3://DOC-EXAMPLE-BUCKET-OUTPUT/wordcount_output

    您还可以为任务运行创建具有指定参数的 JSON 文件。然后运行指向 JSON 文件路径的 start-job-run 命令。有关更多信息,请参阅 提交任务运行。有关配置任务运行参数的更多详细信息,请参阅配置任务运行的选项

  3. 要监控任务的进度或调试故障,您可以检查上传到 Amazon S3、CloudWatch Logs 或两者的日志。请参阅 Amazon S3 日志路径关于配置任务运行至使用 S3 日志,以及 Cloudwatch 日志关于配置任务运行至使用 CloudWatch Logs。要在 CloudWatch Logs 中查阅日志,请按照以下说明操作。

    • 通过以下网址打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch/

    • 导航窗格中,选择 Logs(日志)。然后选择 Log groups(日志组)

    • 选择 Amazon EMR on EKS 日志组,然后查看已上载的录入事件。

    
            使用 CloudWatch Logs 监控