기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Step Functions를 사용하여 Amazon EMR 클러스터 생성 및 관리
제공된 Amazon EMR 서비스 통합을 EMR 사용하여 Amazon AWS Step Functions 과 통합하는 방법을 알아봅니다APIs. 서비스 통합은 해당 Amazon와 APIs 유사하며EMRAPIs, 전달된 필드와 반환된 응답에서 약간의 차이가 있습니다.
Step Functions의 AWS 서비스와 통합하는 방법에 대한 자세한 내용은 서비스 통합 및 단원을 참조하십시오Step FunctionsAPI의 서비스에 파라미터 전달.
최적화된 Amazon EMR 통합의 주요 기능
최적화된 Amazon EMR 서비스 통합에는 아래에 APIs설명된 기본 Amazon EMR를 래핑APIs하는 사용자 지정 세트가 있습니다. 따라서 Amazon EMR AWS SDK 서비스 통합과 크게 다릅니다.
-
작업 실행(.sync) 통합 패턴이 지원됩니다.
Step Functions는 실행이 중지된 경우 Amazon EMR 클러스터를 자동으로 종료하지 않습니다. Amazon EMR 클러스터가 종료되기 전에 상태 시스템이 중지되면 클러스터가 무기한 계속 실행될 수 있으며 추가 요금이 발생할 수 있습니다. 이를 방지하려면 생성한 모든 Amazon EMR 클러스터가 올바르게 종료되었는지 확인합니다. 자세한 내용은 다음을 참조하세요.
-
Amazon EMR 사용 설명서의 제어 클러스터 종료.
-
서비스 통합 패턴 작업 실행(.sync) 섹션
참고
emr-5.28.0
에 따라 클러스터를 만들 때 StepConcurrencyLevel
파라미터를 지정하여 단일 클러스터에서 여러 단계를 동시에 실행할 수 있습니다. Step Functions Map
및 Parallel
상태를 사용하여 동시에 작업을 클러스터에 제출할 수 있습니다.
Amazon EMR 서비스 통합의 가용성은 Amazon의 가용성에 따라 달라집니다EMRAPIs. 특수 리전의 제한 사항은 Amazon EMR 설명서를 참조하세요.
참고
Amazon 와의 통합을 위해 EMRStep Functions는 처음 10분 300초 동안 하드 코딩된 60초 작업 폴링 빈도를 갖습니다.
지원되는 Amazon EMR APIs
다음 표에서는 각 Amazon EMR 서비스 통합API과 해당 Amazon EMR 간의 차이점을 설명합니다APIs.
Amazon EMR Service 통합 API | 해당 EMR API | 차이 |
---|---|---|
createCluster
클러스터(작업 흐름)를 생성하고 실행을 시작합니다. AmazonEMR은 서비스 연결 IAM 역할이라고 하는 고유한 유형의 역할에 직접 연결됩니다. |
runJobFlow | createCluster 는 다음을 runJobFlow제외하고와 동일한 요청 구문을 사용합니다.
Amazon EMR는 다음을 사용합니다.
|
createCluster.sync 클러스터(작업 흐름)를 생성하고 실행을 시작합니다. |
runJobFlow | createCluster 와 동일하지만 클러스터가 WAITING 상태에 도달할 때까지 기다려야 합니다. |
setClusterTermination보호 사용자 개입, API 호출 또는 작업 흐름 오류로 클러스터의 EC2 인스턴스를 종료할 수 없도록 클러스터(작업 흐름)를 잠급니다. |
setTerminationProtection | 요청은 다음을 사용합니다. Amazon은 다음을 EMR 사용합니다.
|
terminateCluster
클러스터(작업 흐름)를 종료합니다. |
terminateJobFlows | 요청은 다음을 사용합니다. Amazon은 다음을 EMR 사용합니다.
|
terminateCluster.sync 클러스터(작업 흐름)를 종료합니다. |
terminateJobFlows | terminateCluster 와 동일하지만 클러스터가 종료될 때까지 기다려야 합니다. |
addStep
실행 중인 클러스터에 새 단계를 추가합니다. 선택적으로이를 사용하는 동안 |
요청에서 "ClusterId" 키를 사용합니다. Amazon은를 EMR 사용합니다"JobFlowId" . 요청은 단일 단계를 사용합니다. Amazon은 다음을 EMR 사용합니다. 응답은 다음과 같습니다. Amazon은 다음을 EMR 반환합니다.
|
|
addStep.sync 실행 중인 클러스터에 새 단계를 추가합니다. 선택적으로이를 사용하는 동안 |
addStep 과 동일하지만 단계가 완료될 때까지 기다려야 합니다. |
|
cancelStep
실행 중인 클러스터에서 보류 중인 단계를 취소합니다. |
cancelSteps | 요청은 다음을 사용합니다. Amazon은 다음을 EMR 사용합니다. 응답은 다음과 같습니다. Amazon은 다음을 EMR 사용합니다.
|
modifyInstanceFleetByName
지정된 |
modifyInstanceFleet | 요청은 다음을 제외하고 modifyInstanceFleet 과 동일합니다.
|
modifyInstanceGroupByName
인스턴스 그룹의 구성 설정 및 노드 수를 수정합니다. |
modifyInstanceGroups | 요청은 다음과 같습니다. Amazon은 목록을 EMR 사용합니다.
새 필드 |
워크플로 예시
다음은 클러스터를 생성하는 Task
상태를 포함합니다.
"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
}
다음은 종료 보호를 활성화하는 Task
상태를 포함합니다.
"Enable_Termination_Protection": {
"Type": "Task",
"Resource": "arn:aws:states:::elasticmapreduce:setClusterTerminationProtection",
"Parameters": {
"ClusterId.$": "$.ClusterId",
"TerminationProtected": true
},
"End": true
}
다음은 클러스터에 단계를 제출하는 Task
상태를 포함합니다.
"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
}
다음은 단계를 취소하는 Task
상태를 포함합니다.
"Cancel_Step_One": {
"Type": "Task",
"Resource": "arn:aws:states:::elasticmapreduce:cancelStep",
"Parameters": {
"ClusterId.$": "$.ClusterId",
"StepId.$": "$.AddStepsResult.StepId"
},
"End": true
}
다음은 클러스터를 종료하는 Task
상태를 포함합니다.
"Terminate_Cluster": {
"Type": "Task",
"Resource": "arn:aws:states:::elasticmapreduce:terminateCluster.sync",
"Parameters": {
"ClusterId.$": "$.ClusterId"
},
"End": true
}
다음은 인스턴스 그룹에 대해 클러스터를 확장 또는 축소하는 Task
상태를 포함합니다.
"ModifyInstanceGroupByName": {
"Type": "Task",
"Resource": "arn:aws:states:::elasticmapreduce:modifyInstanceGroupByName",
"Parameters": {
"ClusterId": "j-1234567890123",
"InstanceGroupName": "MyCoreGroup",
"InstanceGroup": {
"InstanceCount": 8
}
},
"End": true
}
다음은 인스턴스 플릿에 대해 클러스터를 확장 또는 축소하는 Task
상태를 포함합니다.
"ModifyInstanceFleetByName": {
"Type": "Task",
"Resource": "arn:aws:states:::elasticmapreduce:modifyInstanceFleetByName",
"Parameters": {
"ClusterId": "j-1234567890123",
"InstanceFleetName": "MyCoreFleet",
"InstanceFleet": {
"TargetOnDemandCapacity": 8,
"TargetSpotCapacity": 0
}
},
"End": true
}
IAM Amazon 호출 정책 EMR
다음 예제 템플릿은가 상태 시스템 정의의 리소스를 기반으로 IAM 정책을 AWS Step Functions 생성하는 방법을 보여줍니다. 자세한 내용은 Step Functions가 통합 서비스용 IAM 정책을 생성하는 방법 및 Step Functions에서 서비스 통합 패턴 검색 단원을 참조하세요.
addStep
정적 리소스
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"elasticmapreduce:AddJobFlowSteps",
"elasticmapreduce:DescribeStep",
"elasticmapreduce:CancelSteps"
],
"Resource": [
"arn:aws:elasticmapreduce:[[region]]:[[accountId]]:cluster/[[clusterId]]"
]
}
]
}
동적 리소스
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"elasticmapreduce:AddJobFlowSteps",
"elasticmapreduce:DescribeStep",
"elasticmapreduce:CancelSteps"
],
"Resource": "arn:aws:elasticmapreduce:*:*:cluster/*"
}
]
}
cancelStep
정적 리소스
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "elasticmapreduce:CancelSteps",
"Resource": [
"arn:aws:elasticmapreduce:[[region]]
:[[accountId]]
:cluster/[[clusterId]]
"
]
}
]
}
동적 리소스
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "elasticmapreduce:CancelSteps",
"Resource": "arn:aws:elasticmapreduce:*:*:cluster/*"
}
]
}
createCluster
정적 리소스
{
"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
정적 리소스
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "elasticmapreduce:SetTerminationProtection",
"Resource": [
"arn:aws:elasticmapreduce:[[region]]
:[[accountId]]
:cluster/[[clusterId]]
"
]
}
]
}
동적 리소스
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "elasticmapreduce:SetTerminationProtection",
"Resource": "arn:aws:elasticmapreduce:*:*:cluster/*"
}
]
}
modifyInstanceFleetByName
정적 리소스
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"elasticmapreduce:ModifyInstanceFleet",
"elasticmapreduce:ListInstanceFleets"
],
"Resource": [
"arn:aws:elasticmapreduce:[[region]]
:[[accountId]]
:cluster/[[clusterId]]
"
]
}
]
}
동적 리소스
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"elasticmapreduce:ModifyInstanceFleet",
"elasticmapreduce:ListInstanceFleets"
],
"Resource": "arn:aws:elasticmapreduce:*:*:cluster/*"
}
]
}
modifyInstanceGroupByName
정적 리소스
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"elasticmapreduce:ModifyInstanceGroups",
"elasticmapreduce:ListInstanceGroups"
],
"Resource": [
"arn:aws:elasticmapreduce:[[region]]
:[[accountId]]
:cluster/[[clusterId]]
"
]
}
]
}
동적 리소스
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"elasticmapreduce:ModifyInstanceGroups",
"elasticmapreduce:ListInstanceGroups"
],
"Resource": "*"
}
]
}
terminateCluster
정적 리소스
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"elasticmapreduce:TerminateJobFlows",
"elasticmapreduce:DescribeCluster"
],
"Resource": [
"arn:aws:elasticmapreduce:[[region]]
:[[accountId]]
:cluster/[[clusterId]]
"
]
}
]
}
동적 리소스
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"elasticmapreduce:TerminateJobFlows",
"elasticmapreduce:DescribeCluster"
],
"Resource": "arn:aws:elasticmapreduce:*:*:cluster/*"
}
]
}