

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon EMR on EKS 入門
<a name="getting-started"></a>

本主題透過在虛擬叢集上部署 Spark 應用程式，協助您開始使用 Amazon EMR on EKS。它包含設定正確許可和啟動任務的步驟。開始之前，請確定您已完成[設定 Amazon EMR on EKS](setting-up.md) 所述的步驟。這可協助您在建立虛擬叢集之前取得 AWS CLI 等工具。如需可協助您開始的其他範本，請參閱 GitHub 上的 [EMR 容器最佳實務指南](https://aws.github.io/aws-emr-containers-best-practices/)。

您需要設定步驟中的下列資訊：
+ 已向 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 政策沒有所需許可，則在執行此範例作業之前，必須遵循 [更新作業執行角色的信任政策](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}} 是 Amazon EMR on EKS 虛擬叢集所在的區域，例如 {{us-east-1}}。

1. 如下列政策陳述式所示，使用所需許可更新作業執行角色的 IAM 政策。

------
#### [ 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 Logs 的許可。
   + 第四個聲明 `WriteToCloudwatchLogs` 授予的許可能夠將日誌寫入名為 {{`my_log_stream_prefix`}} 的日誌串流下的名為 {{`my_log_group_name`}} 的 Amazon CloudWatch 日誌群組。

1. 要執行 Spark Python 應用程式，請使用以下命令。將所有可取代的{{紅色斜體}}值取代為適當的值。{{REGION}} 是 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://{{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 應用程式，請使用以下命令。將所有{{紅色斜體}}值取代為適當的值。{{REGION}} 是 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.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 或 CloudWatch 中的驅動程式的 stdout 日誌中提供此作業的輸出，具體取決於所設定的 `monitoringConfiguration`。

1. 也可以使用指定參數為作業執行建立 JSON 檔案。然後使用 JSON 檔案的路徑執行 start-job-run 命令。如需詳細資訊，請參閱「提交作業執行」。如需有關設定作業執行參數的詳細資訊，請參閱「用於設定作業執行的選項」。

   若要監控作業進度或對故障進行偵錯，可以檢查上傳到 Amazon S3、CloudWatch Logs 或兩者的日誌。請參閱 Amazon S3 中[設定作業執行以使用 S3 日誌](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/emr-eks-jobs-CLI.html#emr-eks-jobs-s3)的日誌路徑和[設定作業執行以使用 CloudWatch Logs](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/emr-eks-jobs-CLI.html#emr-eks-jobs-cloudwatch) 的 Cloudwatch 日誌。若要查看 CloudWatch Logs 中的日誌，請依以下指示操作。
   + 在 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。
   + 在**導覽**窗格中，選擇**日誌**。然後選擇**日誌群組**。
   + 選擇 Amazon EMR on EKS 的日誌群組，然後檢視上傳的日誌事件。  
![使用 CloudWatch 日誌進行監控](http://docs.aws.amazon.com/zh_tw/emr/latest/EMR-on-EKS-DevelopmentGuide/images/emr-on-eks-monitoring.png)

**重要**  
作業具有[預設設定的重試政策](jobruns-using-retry-policies.md#retry-config)。如需有關如何修改或停用組態的資訊，請參閱[使用作業重試政策](jobruns-using-retry-policies.md)。