入門 - Amazon EMR

入門

本主題透過在虛擬叢集上部署 Spark 應用程式,協助您開始使用 Amazon EMR on EKS。開始之前,請確定您已完成設定 Amazon EMR on EKS 所述的步驟。如需可協助您開始的其他範本,請參閱 GitHub 上的 EMR 容器最佳實務指南

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

  • 已向 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 日誌中列出的步驟。

執行 Spark 應用程式

採取以下步驟,在 Amazon EMR on EKS 上執行簡單的 Spark 應用程式。Spark Python 應用程式的應用程式 entryPoint 檔案位於 s3://REGION.elasticmapreduce/emr-containers/samples/wordcount/scripts/wordcount.pyREGION 是 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_stream_prefix 的日誌串流下的名為 my_log_group_name 的 Amazon CloudWatch 日誌群組。

  2. 要執行 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://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 命令。如需更多詳細資訊,請參閱 使用 StartJobRun 提交作業執行。如需有關設定作業執行參數的詳細資訊,請參閱 用於設定作業執行的選項

  3. 要執行 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://DOC-EXAMPLE-BUCKET-LOGGING" } } }'

    範例 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

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

    若要監控作業進度或對故障進行偵錯,可以檢查上傳到 Amazon S3、CloudWatch Logs 或兩者的日誌。請參閱 Amazon S3 中設定作業執行以使用 S3 日誌的日誌路徑和設定作業執行以使用 CloudWatch Logs 的 Cloudwatch 日誌。若要查看 CloudWatch Logs 中的日誌,請依以下指示操作。

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

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

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

    
            使用 CloudWatch 日誌進行監控
重要

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