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:
-
Kontrol Pengakhiran Cluster di Panduan EMR Pengguna Amazon.
-
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 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 |
runJobFlow | createCluster menggunakan sintaks permintaan yang sama seperti runJobFlow, kecuali untuk yang berikut:
Amazon EMR menggunakan ini:
|
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: Amazon EMR menggunakan ini:
|
terminateCluster
Menutup sebuah klaster (alur kerja). |
terminateJobFlows | Permintaan menggunakan ini: Amazon EMR menggunakan ini:
|
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 |
Permintaan menggunakan kunci "ClusterId" . Amazon EMR menggunakan"JobFlowId" . Permintaan menggunakan satu langkah. Amazon EMR menggunakan ini: Responsnya adalah ini: Amazon EMR mengembalikan ini:
|
|
addStep.sinkronisasi Menambahkan langkah baru untuk menjalankan klaster. Secara opsional, Anda juga dapat menentukan |
Sama seperti addStep , tapi menunggu langkahnya selesai. |
|
cancelStep
Membatalkan langkah yang tertunda dalam sebuah klaster yang berjalan. |
cancelSteps | Permintaan menggunakan ini: Amazon EMR menggunakan ini: Responsnya adalah ini: Amazon EMR menggunakan ini:
|
modifyInstanceFleetByName
Memodifikasi target Sesuai Permintaan dan kapasitas Spot target untuk armada instans dengan |
modifyInstanceFleet | Permintaan adalah sama seperti untuk modifyInstanceFleet , kecuali yang berikut ini:
|
modifyInstanceGroupByName
Memodifikasi jumlah simpul dan pengaturan konfigurasi dari grup instans. |
modifyInstanceGroups | 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",
"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/*"
}
]
}