EMR 上的 Amazon 入門 EKS - Amazon EMR

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

EMR 上的 Amazon 入門 EKS

本主題可協助您EMREKS在虛擬叢集上部署 Spark 應用程式,以開始使用 上的 Amazon。它包含設定正確許可和啟動任務的步驟。開始之前,請確定您已完成在 EMR上設定 Amazon EKS 所述的步驟。這可協助您在建立虛擬叢集之前取得 AWS CLI 等工具。如需可協助您開始使用的其他範本,請參閱 上的EMR容器最佳實務指南 GitHub。

您需要設定步驟中的下列資訊:

  • 向 Amazon 註冊的 Amazon 叢集和 Kubernetes 命名空間的虛擬EKS叢集 ID EMR

    重要

    建立EKS叢集時,請務必使用 m5.xlarge 作為執行個體類型,或任何其他具有更高 CPU和 記憶體的執行個體類型。使用記憶體低於 m5.xlarge CPU的執行個體類型,可能會導致任務失敗,因為叢集中可用的資源不足。

  • 用於任務執行IAM的角色名稱

  • Amazon 版本的版本標籤 EMR(例如 emr-6.4.0-latest

  • 用於記錄和監控的目的地目標:

    • Amazon CloudWatch 日誌群組名稱和日誌串流字首

    • 用於儲存事件和容器日誌的 Amazon S3 位置

重要

Amazon EMR on EKS Job 使用 Amazon CloudWatch 和 Amazon S3 作為監控和記錄的目的地目標。透過檢視傳送至這些目的地的作業日誌,可監控作業進度並對故障進行疑難排解。若要啟用記錄,與任務執行IAM角色相關聯的IAM政策必須具有存取目標資源所需的許可。如果IAM政策沒有必要的許可,則您必須先遵循 中概述的步驟更新作業執行角色的信任政策設定任務執行以使用 Amazon S3 日誌,以及設定任務執行以使用 CloudWatch 日誌,然後再執行此範例任務。

執行 Spark 應用程式

執行下列步驟,在 Amazon 上執行簡單的 Spark 應用程式EMREKS。Spark Python 應用程式的應用程式 entryPoint 檔案位於 s3://REGION.elasticmapreduce/emr-containers/samples/wordcount/scripts/wordcount.py。所以此 REGION 是EKS虛擬叢集EMR上 Amazon 所在的區域,例如 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:::amzn-s3-demo-destination-bucket", "arn:aws:s3:::amzn-s3-demo-destination-bucket/*", "arn:aws:s3:::amzn-s3-demo-logging-bucket", "arn:aws:s3:::amzn-s3-demo-logging-bucket/*" ] }, { "Sid": "WriteToLoggingAndOutputDataBuckets", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-destination-bucket/*", "arn:aws:s3:::amzn-s3-demo-logging-bucket/*" ] }, { "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 檔案所在的儲存貯體。

      • amzn-s3-demo-destination-bucket - 您為輸出資料定義的儲存貯體。

      • amzn-s3-demo-logging-bucket - 您為記錄資料定義的儲存貯體。

    • 此政策中的第二個聲明 WriteToLoggingAndOutputDataBuckets 會分別授予將資料寫入到輸出和日誌儲存貯體的作業許可。

    • 第三個陳述式DescribeAndCreateCloudwatchLogStream會授予任務描述和建立 Amazon CloudWatch Logs 的許可。

    • 第四個陳述式WriteToCloudwatchLogs會授予許可,將日誌寫入名為 的 Amazon CloudWatch 日誌群組 my_log_group_name 在名為 的日誌串流下 my_log_stream_prefix.

  2. 要執行 Spark Python 應用程式,請使用以下命令。取代所有可替換的 red italicized 具有適當值的值。所以此 REGION 是EKS虛擬叢集EMR上 Amazon 所在的區域,例如 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 提交作業執行。如需有關設定作業執行參數的詳細資訊,請參閱 用於設定作業執行的選項

  3. 若要執行 Spark SQL 應用程式,請使用下列命令。取代所有 red italicized 具有適當值的值。所以此 REGION 是EKS虛擬叢集EMR上 Amazon 所在的區域,例如 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設定的 。

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

    若要監控任務進度或偵錯失敗,您可以檢查上傳至 Amazon S3、 CloudWatch Logs 或兩者的日誌。請參閱 Amazon S3 中的日誌路徑:設定任務執行以使用 S3 日誌,以及設定任務執行以使用 CloudWatch 日誌 中的 Cloudwatch 日誌。若要在日誌中查看 CloudWatch 日誌,請遵循下列指示。

    • 在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/

    • 導覽窗格中,選擇日誌。然後選擇日誌群組

    • 選擇 Amazon EMR on 的日誌群組,EKS然後檢視上傳的日誌事件。

    使用 CloudWatch 日誌監控
重要

作業具有預設設定的重試政策。如需有關如何修改或停用組態的資訊,請參閱使用作業重試政策