

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

# 开始使用 Amazon EMR on EKS
<a name="getting-started"></a>

本主题通过在虚拟集群上部署 Spark 应用程序，帮助您开始使用 Amazon EMR on EKS。其中包括设置正确权限和启动作业的步骤。开始之前，请确保您已完成[设置 Amazon EMR on EKS](setting-up.md)中的步骤。这可以帮助您在创建虚拟集群之前获得诸如 AWS CLI 设置之类的工具。有关其他可以帮助您入门的模板，请参阅我们的 [EMR 容器最佳实践指南](https://aws.github.io/aws-emr-containers-best-practices/)。 GitHub

您将需要安装步骤中的以下信息：
+ 使用 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 位置

**重要**  
EKS 任务上的 Amazon EMR 使用亚马逊 CloudWatch 和亚马逊 S3 作为监控和记录的目标目标。您可以通过查看发送到这些地址的任务日志来监控任务进度并排查故障。要想启用日志记录，与执行任务的 IAM 角色关联的 IAM policy 必须具有访问目标资源所需的权限。如果 IAM 策略没有所需的权限，则在运行此示例任务之前[更新任务执行角色的信任策略](setting-up-trust-policy.md)，您必须按照[配置任务运行以使用 Amazon S3 日志](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/emr-eks-jobs-CLI.html#emr-eks-jobs-s3)和将[任务运行配置为使用 CloudWatch 日志](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/emr-eks-jobs-CLI.html#emr-eks-jobs-cloudwatch)中概述的步骤操作。

## 运行 Spark 应用程序
<a name="getting-started-run-spark-app"></a>

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

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

------
#### [ JSON ]

****  

   ```
   {
     "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:::amzn-s3-demo-bucket",
           "arn:aws:s3:::amzn-s3-demo-bucket/*",
           "arn:aws:s3:::amzn-s3-demo-bucket-b",
           "arn:aws:s3:::amzn-s3-demo-bucket-b/*"
         ]
       },
       {
         "Sid": "WriteToLoggingAndOutputDataBuckets",
         "Effect": "Allow",
         "Action": [
           "s3:PutObject",
           "s3:DeleteObject"
         ],
         "Resource": [
           "arn:aws:s3:::amzn-s3-demo-bucket/*",
           "arn:aws:s3:::amzn-s3-demo-bucket-b/*"
         ]
       },
       {
         "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`授予`ListBucket`和`GetObjects`访问以下 Amazon S3 存储桶：
     + `REGION.elasticmapreduce`‐应用程序文件所在的存储桶`entryPoint`。
     + *amzn-s3-demo-destination-bucket*-您为输出数据定义的存储桶。
     + *amzn-s3-demo-logging-bucket*-您为日志数据定义的存储桶。
   + 本策略的第二个语句 `WriteToLoggingAndOutputDataBuckets` 授予任务将数据分别写入输出和日志记录存储桶的权限。
   + 第三条语句`DescribeAndCreateCloudwatchLogStream`授予任务描述和创建 Amazon CloudWatch 日志的权限。
   + 第四条语句`WriteToCloudwatchLogs`授予将日志写入名为的 CloudWatch 日志流*`my_log_group_name`*下名为 Amazon 日志组的权限*`my_log_stream_prefix`*。

1. 要运行 Spark Python 应用程序，请使用以下命令。将所有可替换的*red italicized*值替换为适当的值。*REGION*是您在 EKS 虚拟集群上的 Amazon EMR 所在的区域，例如。*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://amzn-s3-demo-destination-bucket/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://amzn-s3-demo-logging-bucket"
       }
     }
   }'
   ```

   此任务的输出数据将出现在`s3://amzn-s3-demo-destination-bucket/wordcount_output`。

   您还可以为任务运行创建具有指定参数的 JSON 文件。然后运行指向 JSON 文件路径的 `start-job-run` 命令。有关更多信息，请参阅 [使用 `StartJobRun` 提交任务运行](emr-eks-jobs-submit.md)。有关配置任务运行参数的更多详细信息，请参阅[配置任务运行的选项](emr-eks-jobs-CLI.md#emr-eks-jobs-parameters)。

1. 要运行 Spark SQL 应用程序，请使用以下命令。将所有*red italicized*值替换为适当的值。*REGION*是您在 EKS 虚拟集群上的 Amazon EMR 所在的区域，例如。*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.7.0-latest \
   --job-driver '{
     "sparkSqlJobDriver": {
       "entryPoint": "s3://query-file.sql",
       "sparkSqlParameters": "--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://amzn-s3-demo-logging-bucket"
       }
     }
   }'
   ```

   下面显示了一个示例 SQL 查询文件。您必须有一个外部文件存储，例如 S3，其中存储表的数据。

   ```
   CREATE DATABASE demo;
   CREATE EXTERNAL TABLE IF NOT EXISTS demo.amazonreview( marketplace string, customer_id string, review_id  string, product_id  string, product_parent  string, product_title  string, star_rating  integer, helpful_votes  integer, total_votes  integer, vine  string, verified_purchase  string, review_headline  string, review_body  string, review_date  date, year  integer) STORED AS PARQUET LOCATION 's3://URI to parquet files';
   SELECT count(*) FROM demo.amazonreview;
   SELECT count(*) FROM demo.amazonreview WHERE star_rating = 3;
   ```

   此任务的输出将在 S3 或驱动程序的 stdout 日志中可用 CloudWatch，具体取决于所配置`monitoringConfiguration`的。

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

   要监控任务进度或调试故障，您可以检查上传到 Amazon S3 的 CloudWatch 日志、日志或两者。请参阅 Amazon S3 中的日志路径[配置任务运行以使用 S3 日志](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/emr-eks-jobs-CLI.html#emr-eks-jobs-s3)，有关[配置任务运行以使用日志的 Cloudwatch CloudWatch 日志](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/emr-eks-jobs-CLI.html#emr-eks-jobs-cloudwatch)。要在日志中查看 CloudWatch 日志，请按照以下说明进行操作。
   + 打开 CloudWatch 控制台，网址为[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)。
   + 在**导航**窗格中，选择 **Logs (日志)**。然后选择 **Log groups (日志组)**。
   + 选择 Amazon EMR on EKS 日志组，然后查看已上载的录入事件。  
![\[使用 CloudWatch 日志进行监控\]](http://docs.aws.amazon.com/zh_cn/emr/latest/EMR-on-EKS-DevelopmentGuide/images/emr-on-eks-monitoring.png)

**重要**  
作业[配置了默认的重试策略](jobruns-using-retry-policies.md#retry-config)。有关如何修改或禁用配置的信息，请参阅[使用作业重试策略](jobruns-using-retry-policies.md)。