入門 - Amazon EMR

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

入門

本主題通過在虛擬羣集上部署 Spark Python 應用程序,幫助您開始在 EKS 上使用 Amazon EMR。

開始之前,請確定您已完成設定

您需要安裝步驟中的以下信息:

  • 在 Amazon EMR 中註冊的 Amazon EKS 羣集和 Kubernetes 命名空間的虛擬集羣 ID

    重要

    創建 EKS 集羣時,請確保使用 m5.xlarge 作為實例類型,或使用 CPU 和內存較高的任何其他實例類型。使用 CPU 或內存低於 m5.xlarge 的實例類型可能會導致由於羣集中可用資源不足而導致作業失敗。

  • 用於執行作業的 IAM 角色的名稱

  • 發佈亞馬遜 EMR 版本的標籤(例如,emr-6.4.0-latest)

  • 日誌記錄和監視的目標目標:

    • Amazon CloudWatch 日誌組名稱和日誌流前綴

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

重要

EKS 上的亞馬遜 EMR 作業使用 Amazon CloudWatch 和 Amazon S3 作為監控和日誌記錄的目標目標。您可以通過查看發送到這些目標的作業日誌來監視作業進度和故障排除故障。要啟用日誌記錄,與作業執行的 IAM 角色關聯的 IAM 策略必須具有訪問目標資源所需的權限。如果 IAM 策略沒有所需的權限,您必須按照更新任務執行角色的信任政策將作業運行設定為使用 Amazon S3 日誌,和配置作業運行以使用 CloudWatch Logs,然後再運行此示例作業。

執行 Spark Python 應用程式

請採取下列步驟來執行wordcount.pyEKS 上的 Amazon EMR 上引發 Python 應用程式。應用程序entryPoint檔案位於:s3://REGION.elasticmapreduce/emr-containers/samples/wordcount/scripts/wordcount.py。所以此區域是您在 EKS 上的 Amazon EMR 虛擬集羣所在的區域,例如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-EXAM-RUN-儲存器-輸出‐您為輸出數據定義的存儲桶。

      • DOC-例子儲存庫記錄‐您為日誌記錄數據定義的存儲桶。

    • 第二個陳述式WriteToLoggingAndOutputDataBuckets授予作業分別向輸出和日誌記錄存儲桶寫入數據的權限。

    • 第三個聲明DescribeAndCreateCloudwatchLogStream授予作業描述和創建 Amazon CloudWatch Logs 的權限。

    • 第四個聲明WriteToCloudwatchLogs授予將日誌寫入到名為my_log_group_name在名為my_log_stream_prefix

  2. 使用下列命令啟動示例應用程式。更換所有可替換紅色斜體值具有適當的值。所以此區域是您在 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://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 文件。然後執行start-job-run命令為 JSON 文件的路徑。如需詳細資訊,請參閱 提交任務執行。如需配置作業運行參數的詳細資訊,請參配置作業運行的選項

  3. 要監控作業的進度或調試失敗,您可以檢查上傳到 Amazon S3、CloudWatch Logs 或兩者的日誌。請參考 Amazon S3 中的日誌路徑,配置作業運行以使用 S3 日誌,對於雲監視日誌,請訪問配置作業運行以使用 CloudWatch Logs。要查看 CloudWatch 日誌中的日誌,請按照以下説明操作。

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

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

    • 為 EKS 上的 Amazon EMR 選擇日誌組,然後查看上傳的日誌事件。

    
            使用 CloudWatch 日誌監控