本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
EMR 上的 Amazon 入門 EKS
本主題可協助您EMREKS在虛擬叢集上部署 Spark 應用程式,以開始使用 上的 Amazon。它包含設定正確許可和啟動任務的步驟。開始之前,請確定您已完成在 EMR上設定 Amazon EKS 所述的步驟。這可協助您在建立虛擬叢集之前取得 AWS CLI 等工具。如需可協助您開始使用的其他範本,請參閱 上的EMR容器最佳實務指南
您需要設定步驟中的下列資訊:
-
向 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.pyREGION
是EKS虛擬叢集EMR上 Amazon 所在的區域,例如 us-east-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
授予ListBucket
和GetObjects
對以下 Amazon S3 儲存貯體的存取權:-
‐應用程式REGION
.elasticmapreduceentryPoint
檔案所在的儲存貯體。 -
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
-
-
要執行 Spark Python 應用程式,請使用以下命令。取代所有可替換的
red italicized
具有適當值的值。所以此REGION
是EKS虛擬叢集EMR上 Amazon 所在的區域,例如us-east-1
.aws emr-containers start-job-run \ --virtual-cluster-id
cluster_id
\ --namesample-job-name
\ --execution-role-arnexecution-role-arn
\ --release-labelemr-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 提交作業執行。如需有關設定作業執行參數的詳細資訊,請參閱 用於設定作業執行的選項。 -
若要執行 Spark SQL 應用程式,請使用下列命令。取代所有
red italicized
具有適當值的值。所以此REGION
是EKS虛擬叢集EMR上 Amazon 所在的區域,例如us-east-1
.aws emr-containers start-job-run \ --virtual-cluster-id
cluster_id
\ --namesample-job-name
\ --execution-role-arnexecution-role-arn
\ --release-labelemr-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
設定的 。 -
您也可以為任務執行建立具有指定參數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然後檢視上傳的日誌事件。
-