

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

# Membuat dan mengelola klaster EMR Amazon dengan Step Functions
<a name="connect-emr"></a>

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

Untuk mempelajari tentang mengintegrasikan dengan AWS layanan di Step Functions, lihat [Integrasi layanan ](integrate-services.md) dan[Meneruskan parameter ke API layanan di Step Functions](connect-parameters.md).

**Fitur utama integrasi EMR Amazon yang Dioptimalkan**  
Integrasi layanan EMR Amazon yang Dioptimalkan memiliki set khusus yang membungkus EMR APIs Amazon APIs yang mendasarinya, yang dijelaskan di bawah ini. Karena itu, ini berbeda secara signifikan dari integrasi layanan Amazon EMR AWS SDK.
Pola [Jalankan Tugas (.sync)](connect-to-resource.md#connect-sync) 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](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-termination.html) dalam Panduan Pengguna Amazon EMR.
+ Bagian [Jalankan Tugas (.sync)](connect-to-resource.md#connect-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 Amazon EMR. APIs Lihat dokumentasi [Amazon EMR](https://docs.aws.amazon.com//govcloud-us/latest/UserGuide/govcloud-emr.html) untuk mengetahui batasan di wilayah khusus.

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

## Amazon EMR yang dioptimalkan APIs
<a name="connect-emr-api"></a>

Tabel berikut menjelaskan perbedaan antara masing-masing API integrasi layanan EMR Amazon dan EMR Amazon yang sesuai. APIs


| API Integrasi Layanan Amazon EMR | API EMR yang sesuai | Perbedaan | 
| --- | --- | --- | 
| CreateCluster Membuat dan memulai menjalankan klaster (alur kerja).  Amazon EMR tertaut langsung dengan tipe IAM role unik yang dikenal sebagai peran tertaut 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 izin IAM, lihat [Menggunakan Peran Tertaut Layanan untuk Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/using-service-linked-roles.html).  | [runJobFlow](https://docs.aws.amazon.com/emr/latest/APIReference/API_RunJobFlow.html) | createClustermenggunakan sintaks permintaan yang sama seperti [runJobFlow](https://docs.aws.amazon.com/emr/latest/APIReference/API_RunJobFlow.html), kecuali untuk yang berikut: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/step-functions/latest/dg/connect-emr.html)Responsnya adalah ini: <pre>{<br />  "ClusterId": "string"<br />}</pre> Amazon EMR menggunakan ini: <pre>{<br />  "JobFlowId": "string"<br />}</pre>  | 
| createCluster.sync Buat dan mulai jalankan klaster (alur kerja).  | [runJobFlow](https://docs.aws.amazon.com/emr/latest/APIReference/API_RunJobFlow.html) | 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, panggilan API, atau kesalahan alur kerja. | [setTerminationProtection](https://docs.aws.amazon.com/emr/latest/APIReference/API_SetTerminationProtection.html) | Permintaan menggunakan ini:<pre>{<br />  "ClusterId": "string"<br />}</pre> Amazon EMR menggunakan ini:<pre>{<br />  "JobFlowIds": ["string"]<br />}</pre>  | 
| TerminateCluster Menutup sebuah klaster (alur kerja).  | [terminateJobFlows](https://docs.aws.amazon.com/emr/latest/APIReference/API_TerminateJobFlows.html) | Permintaan menggunakan ini:<pre>{<br />  "ClusterId": "string"<br />}</pre> Amazon EMR menggunakan ini:<pre>{<br />  "JobFlowIds": ["string"]<br />}</pre> | 
| TerminateCluster.syncMenutup sebuah klaster (alur kerja). | [terminateJobFlows](https://docs.aws.amazon.com/emr/latest/APIReference/API_TerminateJobFlows.html) | Sama seperti terminateCluster, tapi tunggu klaster berakhir. | 
| AddStep Menambahkan langkah baru untuk menjalankan klaster. Secara opsional, Anda juga dapat menentukan `[ExecutionRoleArn](https://docs.aws.amazon.com/emr/latest/APIReference/API_AddJobFlowSteps.html#EMR-AddJobFlowSteps-request-ExecutionRoleArn)` parameter saat menggunakan API ini. | [addJobFlowLangkah-Langkah](https://docs.aws.amazon.com/emr/latest/APIReference/API_AddJobFlowSteps.html) | Permintaan menggunakan kunci "ClusterId". Amazon EMR menggunakan "JobFlowId". Permintaan menggunakan satu langkah.<pre>{<br />  "Step": <"StepConfig object"><br />}</pre> Amazon EMR menggunakan ini:<pre>{<br />  "Steps": [<StepConfig objects>]<br />}</pre> Respons adalah ini:<pre>{<br />  "StepId": "string"<br />}</pre> Amazon EMR mengembalikan ini:<pre>{<br />  "StepIds": [<strings>]<br />}</pre>  | 
| AddStep.sync Menambahkan langkah baru ke klaster yang berjalan. Secara opsional, Anda juga dapat menentukan `[ExecutionRoleArn](https://docs.aws.amazon.com/emr/latest/APIReference/API_AddJobFlowSteps.html#EMR-AddJobFlowSteps-request-ExecutionRoleArn)` parameter saat menggunakan API ini. | [addJobFlowLangkah-Langkah](https://docs.aws.amazon.com/emr/latest/APIReference/API_AddJobFlowSteps.html) | Sama seperti addStep, tapi menunggu langkahnya selesai. | 
| CancelStep Membatalkan langkah yang tertunda dalam sebuah klaster yang berjalan. | [CancelSteps](https://docs.aws.amazon.com/emr/latest/APIReference/API_CancelSteps.html) |  Permintaan menggunakan ini:<pre>{<br />  "StepId": "string"<br />}</pre> Amazon EMR menggunakan ini:<pre>{<br />  "StepIds": [<strings>]<br />}</pre> Respons adalah ini:<pre>{<br />  "CancelStepsInfo": <CancelStepsInfo object><br />}</pre> Amazon EMR menggunakan ini:<pre>{<br />  "CancelStepsInfoList": [<CancelStepsInfo objects>]<br />}</pre>  | 
| modifyInstanceFleetByName Memodifikasi target Sesuai Permintaan dan kapasitas Spot target untuk armada instans dengan `InstanceFleetName` yang ditentukan. | [modifyInstanceFleet](https://docs.aws.amazon.com/emr/latest/APIReference/API_ModifyInstanceFleet.html) | Permintaan adalah sama seperti untuk modifyInstanceFleet, kecuali yang berikut ini: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/step-functions/latest/dg/connect-emr.html)  | 
| modifyInstanceGroupByName Memodifikasi jumlah simpul dan pengaturan konfigurasi dari grup instans. | [modifyInstanceGroups](https://docs.aws.amazon.com/emr/latest/APIReference/API_ModifyInstanceGroups.html) | Permintaan adalah ini:<pre>{<br />  "ClusterId": "string",<br />  "InstanceGroup": <InstanceGroupModifyConfig object><br />}</pre> Amazon EMR menggunakan daftar: <pre>{<br />  "ClusterId": ["string"],<br />  "InstanceGroups": [<InstanceGroupModifyConfig objects>]<br />}</pre> 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
<a name="connect-emr-api-examples"></a>

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
<a name="emr-iam"></a>

Contoh templat 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](service-integration-iam-templates.md) dan [Temukan pola integrasi layanan di Step Functions](connect-to-resource.md).

### `addStep`
<a name="emr-iam-addstep"></a>

*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`
<a name="emr-iam-cancelstep"></a>

*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`
<a name="emr-iam-createcluster"></a>

*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"
      ]
    }
  ]
}
```

### `setClusterTerminationProtection`
<a name="emr-iam-clusterterminationprotection"></a>

*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/*"
        }
    ]
}
```

### `modifyInstanceFleetByName`
<a name="emr-iam-modifyinstancefleetbyname"></a>

*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/*"
        }
    ]
}
```

### `modifyInstanceGroupByName`
<a name="emr-iam-modifyinstancegroupbyname"></a>

*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`
<a name="emr-iam-terminatecluster"></a>

*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/*"
    }
  ]
}
```