Membuat dan mengelola EMR klaster Amazon dengan Step Functions - AWS Step Functions

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Membuat dan mengelola EMR klaster Amazon dengan Step Functions

Pelajari cara mengintegrasikan AWS Step Functions dengan Amazon EMR menggunakan integrasi EMR layanan Amazon yang disediakanAPIs. Integrasi layanan APIs mirip dengan Amazon yang sesuai EMRAPIs, dengan beberapa perbedaan di bidang yang diteruskan dan dalam tanggapan yang dikembalikan.

Untuk belajar tentang berintegrasi dengan AWS servicesin Step Functions, lihat Integrasi layanan dan. Meneruskan parameter ke layanan API di Step Functions

Fitur utama EMR integrasi Amazon yang Dioptimalkan
  • Integrasi EMR layanan Amazon yang Dioptimalkan memiliki set khusus APIs yang membungkus Amazon yang mendasarinya EMRAPIs, yang dijelaskan di bawah ini. Karena itu, ini berbeda secara signifikan dari Amazon EMR AWS SDKintegrasi layanan.

  • Pola Jalankan Tugas (.sync) integrasi didukung.

Step Functions tidak menghentikan EMR klaster Amazon secara otomatis jika eksekusi dihentikan. Jika mesin status Anda berhenti sebelum EMR klaster Amazon dihentikan, klaster Anda dapat terus berjalan tanpa batas waktu, dan dapat dikenakan biaya tambahan. Untuk menghindari hal ini, pastikan bahwa setiap EMR cluster Amazon yang Anda buat dihentikan dengan benar. Untuk informasi selengkapnya, lihat:

catatan

Untuk emr-5.28.0, Anda dapat menentukan parameter StepConcurrencyLevel saat membuat sebuah klaster untuk mengizinkan beberapa langkah untuk menjalankan secara paralel pada satu klaster. Anda dapat menggunakan status Map dan Parallel Step Functions untuk mengirimkan pekerjaan secara paralel ke klaster.

Ketersediaan integrasi EMR layanan Amazon tergantung pada ketersediaan Amazon EMRAPIs. Lihat EMR dokumentasi Amazon untuk batasan di wilayah khusus.

catatan

Untuk integrasi dengan AmazonEMR, Step Functions memiliki frekuensi polling pekerjaan 60 detik hard-code selama 10 menit pertama dan 300 detik setelah itu.

Amazon yang didukung EMR APIs

Tabel berikut menjelaskan perbedaan antara setiap integrasi EMR layanan Amazon API dan Amazon yang sesuai EMRAPIs.

Integrasi EMR Layanan Amazon API Sesuai EMR API Perbedaan
createCluster

Membuat dan memulai menjalankan klaster (alur kerja).

Amazon EMR terhubung langsung ke jenis peran unik yang dikenal sebagai IAM peran terkait layanan. Agar createCluster dan createCluster.sync bekerja, Anda harus mengonfigurasi izin yang diperlukan untuk membuat AWSServiceRoleForEMRCleanup peran yang tertaut layanan. Untuk informasi selengkapnya tentang hal ini, termasuk pernyataan yang dapat Anda tambahkan ke kebijakan IAM izin, lihat Menggunakan Peran Tertaut Layanan untuk Amazon. EMR

runJobFlow createClustermenggunakan sintaks permintaan yang sama seperti runJobFlow, kecuali untuk yang berikut:
  • Bidang Instances.KeepJobFlowAliveWhenNoSteps wajib, dan harus memiliki nilai Boolean TRUE.

  • Bidang Steps tidak diperbolehkan.

  • Bidang Instances.InstanceFleets[index].Name harus disediakan dan harus unik jika modifyInstanceFleetByName konektor opsional API digunakan.

  • Bidang Instances.InstanceGroups[index].Name harus disediakan dan harus unik jika opsional modifyInstanceGroupByName API digunakan.

Responsnya adalah ini:
{ "ClusterId": "string" }
Amazon EMR menggunakan ini:
{ "JobFlowId": "string" }
createCluster.sinkronisasi

Membuat dan memulai menjalankan klaster (alur kerja).

runJobFlow Sama seperti createCluster, tapi tunggu klaster untuk mencapai status WAITING.
setClusterTerminationPerlindungan

Mengunci klaster (alur pekerjaan) sehingga EC2 instance di klaster tidak dapat dihentikan oleh intervensi pengguna, API panggilan, atau kesalahan alur kerja.

setTerminationProtection Permintaan menggunakan ini:
{ "ClusterId": "string" }
Amazon EMR menggunakan ini:
{ "JobFlowIds": ["string"] }
terminateCluster

Menutup sebuah klaster (alur kerja).

terminateJobFlows Permintaan menggunakan ini:
{ "ClusterId": "string" }
Amazon EMR menggunakan ini:
{ "JobFlowIds": ["string"] }
terminateCluster.sinkronisasi

Menutup sebuah klaster (alur kerja).

terminateJobFlows Sama seperti terminateCluster, tapi tunggu klaster berakhir.
addStep

Menambahkan langkah baru untuk menjalankan klaster.

Secara opsional, Anda juga dapat menentukan ExecutionRoleArn parameter saat menggunakan iniAPI.

addJobFlowLangkah-langkahnya

Permintaan menggunakan kunci "ClusterId". Amazon EMR menggunakan"JobFlowId". Permintaan menggunakan satu langkah.
{ "Step": <"StepConfig object"> }
Amazon EMR menggunakan ini:
{ "Steps": [<StepConfig objects>] }
Responsnya adalah ini:
{ "StepId": "string" }
Amazon EMR mengembalikan ini:
{ "StepIds": [<strings>] }
addStep.sinkronisasi

Menambahkan langkah baru untuk menjalankan klaster.

Secara opsional, Anda juga dapat menentukan ExecutionRoleArn parameter saat menggunakan iniAPI.

addJobFlowLangkah-langkahnya

Sama seperti addStep, tapi menunggu langkahnya selesai.
cancelStep

Membatalkan langkah yang tertunda dalam sebuah klaster yang berjalan.

cancelSteps Permintaan menggunakan ini:
{ "StepId": "string" }
Amazon EMR menggunakan ini:
{ "StepIds": [<strings>] }
Responsnya adalah ini:
{ "CancelStepsInfo": <CancelStepsInfo object> }
Amazon EMR menggunakan ini:
{ "CancelStepsInfoList": [<CancelStepsInfo objects>] }
modifyInstanceFleetByName

Memodifikasi target Sesuai Permintaan dan kapasitas Spot target untuk armada instans dengan InstanceFleetName yang ditentukan.

modifyInstanceFleet Permintaan adalah sama seperti untuk modifyInstanceFleet, kecuali yang berikut ini:
  • Bidang Instance.InstanceFleetId tidak diperbolehkan.

  • Saat waktu aktif InstanceFleetId ditentukan secara otomatis oleh integrasi layanan dengan memanggil ListInstanceFleets dan mengurai hasilnya.

modifyInstanceGroupByName

Memodifikasi jumlah simpul dan pengaturan konfigurasi dari grup instans.

modifyInstanceGroups Permintaan adalah ini:
{ "ClusterId": "string", "InstanceGroup": <InstanceGroupModifyConfig object> }
Amazon EMR menggunakan daftar:
{ "ClusterId": ["string"], "InstanceGroups": [<InstanceGroupModifyConfig objects>] }

Dalam objek InstanceGroupModifyConfig, bidang InstanceGroupId tidak diizinkan.

Sebuah bidang baru, InstanceGroupName, telah ditambahkan. Saat waktu aktif InstanceGroupId ditentukan secara otomatis oleh integrasi layanan dengan memanggil ListInstanceGroups dan mengurai hasilnya.

Contoh alur kerja

Berikut ini mencakup status Task yang membuat sebuah klaster.

"Create_Cluster": { "Type": "Task", "Resource": "arn:aws:states:::elasticmapreduce:createCluster.sync", "Parameters": { "Name": "MyWorkflowCluster", "VisibleToAllUsers": true, "ReleaseLabel": "emr-5.28.0", "Applications": [ { "Name": "Hive" } ], "ServiceRole": "EMR_DefaultRole", "JobFlowRole": "EMR_EC2_DefaultRole", "LogUri": "s3n://aws-logs-123456789012-us-east-1/elasticmapreduce/", "Instances": { "KeepJobFlowAliveWhenNoSteps": true, "InstanceFleets": [ { "InstanceFleetType": "MASTER", "Name": "MASTER", "TargetOnDemandCapacity": 1, "InstanceTypeConfigs": [ { "InstanceType": "m4.xlarge" } ] }, { "InstanceFleetType": "CORE", "Name": "CORE", "TargetOnDemandCapacity": 1, "InstanceTypeConfigs": [ { "InstanceType": "m4.xlarge" } ] } ] } }, "End": true }

Berikut ini mencakup status Task yang mengaktifkan perlindungan pengakhiran.

"Enable_Termination_Protection": { "Type": "Task", "Resource": "arn:aws:states:::elasticmapreduce:setClusterTerminationProtection", "Parameters": { "ClusterId.$": "$.ClusterId", "TerminationProtected": true }, "End": true }

Berikut ini mencakup status Task yang mengirimkan langkah untuk sebuah klaster.

"Step_One": { "Type": "Task", "Resource": "arn:aws:states:::elasticmapreduce:addStep.sync", "Parameters": { "ClusterId.$": "$.ClusterId", "ExecutionRoleArn": "arn:aws:iam::123456789012:role/myEMR-execution-role", "Step": { "Name": "The first step", "ActionOnFailure": "CONTINUE", "HadoopJarStep": { "Jar": "command-runner.jar", "Args": [ "hive-script", "--run-hive-script", "--args", "-f", "s3://<region>.elasticmapreduce.samples/cloudfront/code/Hive_CloudFront.q", "-d", "INPUT=s3://<region>.elasticmapreduce.samples", "-d", "OUTPUT=s3://<amzn-s3-demo-bucket>/MyHiveQueryResults/" ] } } }, "End": true }

Berikut ini mencakup status Task yang membatalkan langkah.

"Cancel_Step_One": { "Type": "Task", "Resource": "arn:aws:states:::elasticmapreduce:cancelStep", "Parameters": { "ClusterId.$": "$.ClusterId", "StepId.$": "$.AddStepsResult.StepId" }, "End": true }

Berikut ini mencakup status Task yang mengakhiri klaster.

"Terminate_Cluster": { "Type": "Task", "Resource": "arn:aws:states:::elasticmapreduce:terminateCluster.sync", "Parameters": { "ClusterId.$": "$.ClusterId" }, "End": true }

Berikut ini mencakup status Task yang menaikkan dan menurunkan penskalaan klaster untuk grup instans.

"ModifyInstanceGroupByName": { "Type": "Task", "Resource": "arn:aws:states:::elasticmapreduce:modifyInstanceGroupByName", "Parameters": { "ClusterId": "j-1234567890123", "InstanceGroupName": "MyCoreGroup", "InstanceGroup": { "InstanceCount": 8 } }, "End": true }

Berikut ini mencakup status Task yang menaikkan dan menurunkan penskalaan klaster untuk armada instans.

"ModifyInstanceFleetByName": { "Type": "Task", "Resource": "arn:aws:states:::elasticmapreduce:modifyInstanceFleetByName", "Parameters": { "ClusterId": "j-1234567890123", "InstanceFleetName": "MyCoreFleet", "InstanceFleet": { "TargetOnDemandCapacity": 8, "TargetSpotCapacity": 0 } }, "End": true }

IAMkebijakan untuk menelepon Amazon EMR

Contoh template berikut menunjukkan bagaimana AWS Step Functions menghasilkan IAM kebijakan berdasarkan sumber daya dalam definisi mesin negara Anda. Untuk informasi selengkapnya, silakan lihat Bagaimana Step Functions menghasilkan IAM kebijakan untuk layanan terintegrasi dan Temukan pola integrasi layanan di Step Functions.

addStep

Sumber daya statis

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:AddJobFlowSteps", "elasticmapreduce:DescribeStep", "elasticmapreduce:CancelSteps" ], "Resource": [ "arn:aws:elasticmapreduce:[[region]]:[[accountId]]:cluster/[[clusterId]]" ] } ] }

Sumber daya dinamis

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:AddJobFlowSteps", "elasticmapreduce:DescribeStep", "elasticmapreduce:CancelSteps" ], "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*" } ] }

cancelStep

Sumber daya statis

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "elasticmapreduce:CancelSteps", "Resource": [ "arn:aws:elasticmapreduce:[[region]]:[[accountId]]:cluster/[[clusterId]]" ] } ] }

Sumber daya dinamis

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "elasticmapreduce:CancelSteps", "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*" } ] }

createCluster

Sumber daya statis

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:RunJobFlow", "elasticmapreduce:DescribeCluster", "elasticmapreduce:TerminateJobFlows" ], "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::{{account}}:role/[[roleName]]" ] } ] }

setClusterTerminationProtection

Sumber daya statis

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "elasticmapreduce:SetTerminationProtection", "Resource": [ "arn:aws:elasticmapreduce:[[region]]:[[accountId]]:cluster/[[clusterId]]" ] } ] }

Sumber daya dinamis

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "elasticmapreduce:SetTerminationProtection", "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*" } ] }

modifyInstanceFleetByName

Sumber daya statis

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:ModifyInstanceFleet", "elasticmapreduce:ListInstanceFleets" ], "Resource": [ "arn:aws:elasticmapreduce:[[region]]:[[accountId]]:cluster/[[clusterId]]" ] } ] }

Sumber daya dinamis

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:ModifyInstanceFleet", "elasticmapreduce:ListInstanceFleets" ], "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*" } ] }

modifyInstanceGroupByName

Sumber daya statis

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:ModifyInstanceGroups", "elasticmapreduce:ListInstanceGroups" ], "Resource": [ "arn:aws:elasticmapreduce:[[region]]:[[accountId]]:cluster/[[clusterId]]" ] } ] }

Sumber daya dinamis

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:ModifyInstanceGroups", "elasticmapreduce:ListInstanceGroups" ], "Resource": "*" } ] }

terminateCluster

Sumber daya statis

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:TerminateJobFlows", "elasticmapreduce:DescribeCluster" ], "Resource": [ "arn:aws:elasticmapreduce:[[region]]:[[accountId]]:cluster/[[clusterId]]" ] } ] }

Sumber daya dinamis

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:TerminateJobFlows", "elasticmapreduce:DescribeCluster" ], "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*" } ] }