As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Criar e gerenciar clusters do Amazon EMR com o Step Functions
Saiba como se integrar AWS Step Functions ao Amazon EMR usando as APIs de integração de serviços do Amazon EMR fornecidas. As APIs de integração de serviço são semelhantes às APIs correspondentes do Amazon EMR, com algumas diferenças nos campos que são passados e nas respostas retornadas.
Para saber mais sobre a integração com AWS os serviços do Step Functions, consulte Integração de produtos da e. Transmitir parâmetros a uma API de serviço no Step Functions
Principais recursos da integração otimizada ao Amazon EMR
A integração otimizada do serviço Amazon EMR tem um conjunto personalizado de APIs que engloba as APIs subjacentes do Amazon EMR, descritas abaixo. Por isso, ele difere significativamente da integração de serviços do Amazon EMR AWS SDK.
-
O padrão de integração Executar um trabalho (.sync) é compatível.
O Step Functions não encerra automaticamente um cluster do Amazon EMR se a execução for interrompida. Se sua máquina de estado parar antes do encerramento do cluster do Amazon EMR, seu cluster poderá continuar funcionando indefinidamente e poderá acumular cobranças adicionais. Para evitar isso, certifique-se de que qualquer cluster do Amazon EMR criado por você seja encerrado corretamente. Para obter mais informações, consulte:
-
Controle o encerramento do cluster no Guia do Usuário do Amazon EMR.
-
A seção Executar um trabalho (.sync) de padrões de integração de serviços.
nota
A partir de emr-5.28.0, você pode especificar o parâmetro StepConcurrencyLevel ao criar um cluster para permitir que várias etapas sejam executadas em paralelo em um único cluster. Você pode usar os estados de Map e Parallel do Step Functions para enviar trabalho em paralelo ao cluster.
A disponibilidade da integração do serviço do Amazon EMR está sujeita à disponibilidade de APIs do Amazon EMR. Consulte a documentação do Amazon EMR quanto a limitações em regiões especiais.
nota
Para integração com o Amazon EMR, o Step Functions tem uma frequência de pesquisa de trabalhos de codificação rígida de 60 segundos para os primeiros 10 minutos e 300 segundos depois disso.
APIs otimizadas do Amazon EMR
A tabela a seguir descreve as diferenças entre cada API de integração de serviço e as APIs correspondentes do Amazon EMR.
| API de integração de serviços do Amazon EMR | API do EMR correspondente | Diferenças |
|---|---|---|
| createCluster Cria e inicia a execução de um cluster (fluxo de trabalho). O Amazon EMR está vinculado diretamente a um tipo exclusivo de perfil do IAM conhecido como função vinculada ao serviço. Para que |
runJobFlow | createClusterusa a mesma sintaxe de solicitação de run JobFlow, exceto pelo seguinte:
O Amazon EMR usa o seguinte:
|
| createCluster.sync Cria e inicia a execução de um cluster (fluxo de trabalho). |
runJobFlow | O mesmo que createCluster, mas espera que o cluster atinja o estado WAITING. |
| conjunto ClusterTerminationProtection Bloqueia um cluster (fluxo de trabalho) para que as instâncias do EC2 no cluster não possam ser encerradas por intervenção do usuário, uma chamada de API ou erro de fluxo de trabalho. |
conjunto TerminationProtection | A solicitação usa o seguinte: O Amazon EMR usa o seguinte:
|
| terminateCluster Desliga um cluster (fluxo de trabalho). |
encerrar JobFlows | A solicitação usa o seguinte: O Amazon EMR usa o seguinte: |
| encerrar Cluster.sync Desliga um cluster (fluxo de trabalho). |
encerrar JobFlows | O mesmo que terminateCluster, mas aguarda o encerramento do cluster. |
| addStep Adiciona uma nova etapa a um cluster em execução. Se preferir, você também poderá especificar o parâmetro |
A solicitação usa a chave "ClusterId". O Amazon EMR usa o "JobFlowId". A solicitação usa uma única etapa. O Amazon EMR usa o seguinte: A resposta é a seguinte: O Amazon EMR retorna o seguinte:
|
|
| adicionar Step.sync Adiciona uma nova etapa a um cluster em execução. Se preferir, você também poderá especificar o parâmetro |
O mesmo que addStep, mas aguarda a etapa ser concluída. |
|
| cancelStep Cancela uma etapa pendente em um cluster em execução. |
cancelSteps | A solicitação usa o seguinte: O Amazon EMR usa o seguinte: A resposta é a seguinte: O Amazon EMR usa o seguinte:
|
| modificar InstanceFleetByName Modifica as capacidades spot de destino On-Demand e de destino para a frota de instâncias com o especificado. |
modificar InstanceFleet | O pedido é o mesmo que para modifyInstanceFleet, exceto pelo seguinte:
|
| modificar InstanceGroupByName Modifica o número de nós e as configurações de um grupo de instâncias. |
modificar InstanceGroups | O pedido é o seguinte: O Amazon EMR usa uma lista:
Dentro do objeto Um novo campo, |
Exemplo de fluxo de trabalho
Veja a seguir um estado Task que cria um cluster.
"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
}
Veja a seguir um estado Task que habilita a proteção contra encerramento.
"Enable_Termination_Protection": {
"Type": "Task",
"Resource": "arn:aws:states:::elasticmapreduce:setClusterTerminationProtection",
"Arguments": {
"ClusterId": "{% $ClusterId %}",
"TerminationProtected": true
},
"End": true
}
Veja a seguir um estado Task que envia uma etapa para um cluster.
"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
}
Veja a seguir um estado Task que cancela uma etapa.
"Cancel_Step_One": {
"Type": "Task",
"Resource": "arn:aws:states:::elasticmapreduce:cancelStep",
"Arguments": {
"ClusterId": "{% $ClusterId %}",
"StepId": "{% $AddStepsResult.StepId %}"
},
"End": true
}
Veja a seguir um estado Task que encerra um cluster.
"Terminate_Cluster": {
"Type": "Task",
"Resource": "arn:aws:states:::elasticmapreduce:terminateCluster.sync",
"Arguments": {
"ClusterId": "{% $ClusterId %}",
},
"End": true
}
Veja a seguir um estado Task que expande ou reduz um cluster para um grupo de instâncias.
"ModifyInstanceGroupByName": {
"Type": "Task",
"Resource": "arn:aws:states:::elasticmapreduce:modifyInstanceGroupByName",
"Arguments": {
"ClusterId": "j-account-id3",
"InstanceGroupName": "MyCoreGroup",
"InstanceGroup": {
"InstanceCount": 8
}
},
"End": true
}
Veja a seguir um estado Task que expande ou reduz um cluster para uma frota de instâncias.
"ModifyInstanceFleetByName": {
"Type": "Task",
"Resource": "arn:aws:states:::elasticmapreduce:modifyInstanceFleetByName",
"Arguments": {
"ClusterId": "j-account-id3",
"InstanceFleetName": "MyCoreFleet",
"InstanceFleet": {
"TargetOnDemandCapacity": 8,
"TargetSpotCapacity": 0
}
},
"End": true
}
Políticas do IAM para chamar o Amazon EMR
Os modelos de exemplo a seguir mostram como AWS Step Functions gera políticas do IAM com base nos recursos na definição da sua máquina de estado. Para obter mais informações, consulte Como o Step Functions gera políticas do IAM para serviços integrados e Descobrir padrões de integração de serviços no Step Functions.
addStep
Recursos estáticos
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:AddJobFlowSteps", "elasticmapreduce:DescribeStep", "elasticmapreduce:CancelSteps" ], "Resource": [ "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/clusterId" ] } ] }
Recursos dinâmicos
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:AddJobFlowSteps", "elasticmapreduce:DescribeStep", "elasticmapreduce:CancelSteps" ], "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*" } ] }
cancelStep
Recursos estáticos
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "elasticmapreduce:CancelSteps", "Resource": [ "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/myCluster-id" ] } ] }
Recursos dinâmicos
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "elasticmapreduce:CancelSteps", "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*" } ] }
createCluster
Recursos estáticos
-
{ "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" ] } ] }
conjunto ClusterTerminationProtection
Recursos estáticos
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "elasticmapreduce:SetTerminationProtection", "Resource": [ "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/myCluster-id" ] } ] }
Recursos dinâmicos
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "elasticmapreduce:SetTerminationProtection", "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*" } ] }
modificar InstanceFleetByName
Recursos estáticos
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:ModifyInstanceFleet", "elasticmapreduce:ListInstanceFleets" ], "Resource": [ "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/myCluster-id" ] } ] }
Recursos dinâmicos
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:ModifyInstanceFleet", "elasticmapreduce:ListInstanceFleets" ], "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*" } ] }
modificar InstanceGroupByName
Recursos estáticos
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:ModifyInstanceGroups", "elasticmapreduce:ListInstanceGroups" ], "Resource": [ "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/myCluster-id" ] } ] }
Recursos dinâmicos
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:ModifyInstanceGroups", "elasticmapreduce:ListInstanceGroups" ], "Resource": "*" } ] }
terminateCluster
Recursos estáticos
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:TerminateJobFlows", "elasticmapreduce:DescribeCluster" ], "Resource": [ "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/myCluster-id" ] } ] }
Recursos dinâmicos
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:TerminateJobFlows", "elasticmapreduce:DescribeCluster" ], "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*" } ] }