Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Buat dan kelola cluster Amazon EMR dengan Fungsi Langkah
Pelajari cara mengintegrasikan AWS Step Functions dengan Amazon EMR menggunakan API integrasi layanan Amazon EMR yang disediakan. API integrasi layanan mirip dengan API Amazon EMR yang sesuai, dengan beberapa perbedaan dalam bidang yang diteruskan dan respons yang dikembalikan.
Untuk mempelajari tentang mengintegrasikan dengan AWS layanan di Fungsi Langkah, lihat Integrasi layanan danMeneruskan parameter ke API layanan di Step Functions.
Fitur utama integrasi Amazon EMR yang Dioptimalkan
Integrasi layanan Amazon EMR yang Dioptimalkan memiliki serangkaian API khusus yang membungkus API Amazon EMR yang mendasarinya, dijelaskan di bawah ini. Karena itu, ini berbeda secara signifikan dari integrasi layanan Amazon EMR AWS SDK.
-
P Jalankan Tugas (.sync) ola integrasi didukung.
Step Functions tidak mengakhiri klaster Amazon EMR secara otomatis jika eksekusi dihentikan. Jika mesin status Anda berhenti sebelum klaster Amazon EMR Anda telah dihentikan, klaster Anda dapat terus berjalan tanpa batas, dan dapat memperoleh biaya tambahan. Untuk menghindari hal ini, pastikan bahwa setiap klaster Amazon EMR yang Anda buat dihentikan dengan benar. Untuk informasi selengkapnya, lihat:
-
Penghentian Klaster Kontrol dalam Panduan Pengguna Amazon EMR.
-
Bagian Jalankan Tugas (.sync) Pola Integrasi Layanan.
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 layanan Amazon EMR tergantung pada ketersediaan API Amazon EMR. Lihat dokumentasi Amazon EMR untuk keterbatasan di wilayah khusus.
catatan
Untuk integrasi dengan Amazon EMR, Step Functions memiliki frekuensi polling pekerjaan 60 detik yang di-hardcode selama 10 menit pertama dan 300 detik setelahnya.
API Amazon EMR yang dioptimalkan
Tabel berikut menjelaskan perbedaan antara setiap API integrasi layanan Amazon EMR dan API Amazon EMR yang sesuai.
| API Integrasi Layanan Amazon EMR | API EMR yang sesuai | Perbedaan |
|---|---|---|
| Buat Cluster Membuat dan memulai menjalankan klaster (alur kerja). Amazon EMR tertaut langsung dengan tipe IAM role unik yang dikenal sebagai peran tertaut layanan. Agar |
lari JobFlow | createClustermenggunakan sintaks permintaan yang sama seperti run JobFlow, kecuali untuk yang berikut:
Amazon EMR menggunakan ini:
|
| membuat Cluster.sync Membuat dan memulai menjalankan klaster (alur kerja). |
lari JobFlow | Sama seperti createCluster, tapi tunggu klaster untuk mencapai status WAITING. |
| set ClusterTerminationProtection Mengunci klaster (alur kerja) sehingga instans EC2 dalam klaster tidak dapat diakhiri oleh intervensi pengguna, panggilan API, atau kesalahan aliran pekerjaan. |
set TerminationProtection | Permintaan menggunakan ini: Amazon EMR menggunakan ini:
|
| TerminateCluster Menutup sebuah klaster (alur kerja). |
mengakhiri JobFlows | Permintaan menggunakan ini: Amazon EMR menggunakan ini: |
| mengakhiri Cluster.sync Menutup sebuah klaster (alur kerja). |
mengakhiri JobFlows | Sama seperti terminateCluster, tapi tunggu klaster berakhir. |
| TambahStep Menambahkan langkah baru untuk menjalankan klaster. Secara opsional, Anda juga dapat menentukan |
Permintaan menggunakan kunci "ClusterId". Amazon EMR menggunakan "JobFlowId". Permintaan menggunakan satu langkah. Amazon EMR menggunakan ini: Respons adalah ini: Amazon EMR mengembalikan ini:
|
|
| menambahkan Step.sync Menambahkan langkah baru untuk menjalankan klaster. Secara opsional, Anda juga dapat menentukan |
Sama seperti addStep, tapi menunggu langkahnya selesai. |
|
| Batalkan Langkah Membatalkan langkah yang tertunda dalam sebuah klaster yang berjalan. |
Batalkan Langkah | Permintaan menggunakan ini: Amazon EMR menggunakan ini: Respons adalah ini: Amazon EMR menggunakan ini:
|
| memodifikasi InstanceFleetByName Memodifikasi target On-Demand dan target kapasitas Spot untuk armada instans dengan yang ditentukan |
memodifikasi InstanceFleet | Permintaan adalah sama seperti untuk modifyInstanceFleet, kecuali yang berikut ini:
|
| memodifikasi InstanceGroupByName Memodifikasi jumlah simpul dan pengaturan konfigurasi dari grup instans. |
memodifikasi InstanceGroups | Permintaan adalah ini: Amazon EMR menggunakan daftar:
Dalam objek Sebuah bidang baru, |
Contoh alur kerja
Berikut ini mencakup status Task yang membuat sebuah klaster.
"Create_Cluster": {
"Type": "Task",
"Resource": "arn:aws:states:::elasticmapreduce:createCluster.sync",
"Arguments": {
"Name": "MyWorkflowCluster",
"VisibleToAllUsers": true,
"ReleaseLabel": "emr-5.28.0",
"Applications": [
{
"Name": "Hive"
}
],
"ServiceRole": "EMR_DefaultRole",
"JobFlowRole": "EMR_EC2_DefaultRole",
"LogUri": "s3n://aws-logs-account-id-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",
"Arguments": {
"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",
"Arguments": {
"ClusterId": "{% $ClusterId %}",
"ExecutionRoleArn": "arn:aws:iam::account-id:role/myEMR-execution-role",
"Step": {
"Name": "The first step",
"ActionOnFailure": "TERMINATE_CLUSTER",
"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",
"Arguments": {
"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",
"Arguments": {
"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",
"Arguments": {
"ClusterId": "j-account-id3",
"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",
"Arguments": {
"ClusterId": "j-account-id3",
"InstanceFleetName": "MyCoreFleet",
"InstanceFleet": {
"TargetOnDemandCapacity": 8,
"TargetSpotCapacity": 0
}
},
"End": true
}
Kebijakan IAM untuk memanggil Amazon EMR
Template contoh berikut menunjukkan cara AWS Step Functions menghasilkan kebijakan IAM berdasarkan sumber daya dalam definisi mesin status Anda. Untuk informasi selengkapnya, lihat Bagaimana Step Functions menghasilkan kebijakan IAM 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:us-east-1:123456789012: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:us-east-1:123456789012:cluster/myCluster-id" ] } ] }
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::123456789012:role/myRoleName" ] } ] }
set ClusterTerminationProtection
Sumber daya statis
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "elasticmapreduce:SetTerminationProtection", "Resource": [ "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/myCluster-id" ] } ] }
Sumber daya dinamis
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "elasticmapreduce:SetTerminationProtection", "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*" } ] }
memodifikasi InstanceFleetByName
Sumber daya statis
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:ModifyInstanceFleet", "elasticmapreduce:ListInstanceFleets" ], "Resource": [ "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/myCluster-id" ] } ] }
Sumber daya dinamis
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:ModifyInstanceFleet", "elasticmapreduce:ListInstanceFleets" ], "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*" } ] }
memodifikasi InstanceGroupByName
Sumber daya statis
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:ModifyInstanceGroups", "elasticmapreduce:ListInstanceGroups" ], "Resource": [ "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/myCluster-id" ] } ] }
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:us-east-1:123456789012:cluster/myCluster-id" ] } ] }
Sumber daya dinamis
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:TerminateJobFlows", "elasticmapreduce:DescribeCluster" ], "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*" } ] }