EmrCluster
Representa a configuração de um cluster do Amazon EMR. Esse objeto é usado por EmrActivity e HadoopActivity para iniciar um cluster.
Conteúdos
Programadores
Os programadores fornecem uma maneira de especificar a alocação de recursos e a priorização de trabalhos dentro de um cluster Hadoop. Administradores ou usuários podem escolher um programador para várias classes de usuários e aplicativos. Um programador pode usar filas para alocar recursos para usuários e aplicativos. Você configura essas filas ao criar o cluster. Em seguida, você pode configurar a prioridade de certos tipos de trabalhos e usuários. Com isso, é possível usar recursos de cluster de maneira eficiente enquanto mais de um usuário envia trabalhos ao cluster. Existem três tipos de programadores disponíveis:
-
FairScheduler
– Tenta programar recursos de forma uniforme durante um período significativo. -
CapacityScheduler
– Usa filas para permitir que os administradores de cluster atribuam usuários a filas de diferentes prioridades e alocações de recursos. -
Default – Usado pelo cluster e pode ser configurado pelo seu site.
Versão de lançamento do Amazon EMR
Uma versão do Amazon EMR corresponde a um conjunto de aplicações de código aberto do ecossistema de big data. Cada versão contém diferentes aplicações de big data, componentes e recursos que você seleciona para que o Amazon EMR instale e configure quando você criar um cluster. Especificar a versão usando o rótulo da versão. Os rótulos de versão estão no formato emr-
. Por exemplo, x.x.x
emr-5.30.0
. Os clusters do Amazon EMR baseados no rótulo de versão emr-4.0.0
e posterior usam a propriedade releaseLabel
para especificar o rótulo de versão de um objeto EmrCluster
. Versões anteriores usam a propriedade amiVersion
.
Importante
Todos os clusters do Amazon EMR criados usando a versão 5.22.0 ou posterior usam o Signature versão 4 para autenticar solicitações ao Amazon S3. Algumas versões anteriores usam o Signature versão 2. O suporte ao Signature versão 2 está sendo descontinuado. Para obter mais informações, consulte Atualização do Amazon S3 – Período de defasagem do SigV2 estendido e modificado
Condições e limitações
Use a versão mais recente do Task Runner
Se você estiver usando um objeto EmrCluster
autogerenciado com um rótulo de release, use o Task Runner mais atual. Para mais informações sobre o Task Runner, consulte Trabalhar com o Task Runner. Você pode configurar valores de propriedade para todas as classificações de configuração do Amazon EMR. Para obter mais informações, consulte Configurar aplicativos no Guia de apresentação do Amazon EMR e nas referências de objeto EmrConfiguration e Propriedade.
Suporte para IMDSv2
Anteriormente, o AWS Data Pipeline suportava apenas IMDSv1. Agora, o AWS Data Pipeline oferece suporte ao IMDSv2 no Amazon EMR 5.23.1, 5.27.1, 5.32 ou versões posteriores e Amazon EMR 6.2 ou versões posteriores. O IMDSv2 usa um método orientado por sessão para lidar melhor com a autenticação ao recuperar informações de metadados das instâncias. Você deve configurar suas instâncias para fazer chamadas do IMDSv2 criando recursos gerenciados pelo usuário usando o TaskRunner-2.0.
Amazon EMR 5.32 ou posterior e Amazon EMR 6.x
As séries de lançamento do Amazon EMR 5.32 ou posterior e Amazon EMR 6.x usam o Hadoop versão 3.x, que introduziu mudanças significativas na forma como o classpath do Hadoop é avaliado em comparação com a versão 2.x do Hadoop. Bibliotecas comuns como Joda-Time foram removidas do classpath.
Se EmrActivity ou HadoopActivity executa um arquivo Jar que tem dependências em uma biblioteca que foi removida no Hadoop 3.x, a etapa falhará com o erro java.lang.NoClassDefFoundError
ou java.lang.ClassNotFoundException
. Isso pode acontecer para os arquivos Jar executados sem problemas usando as versões de lançamento 5.x do Amazon EMR.
Para corrigir o problema, você deve copiar as dependências do arquivo Jar para o classpath do Hadoop em um objeto EmrCluster
antes de iniciar o EmrActivity
ou o HadoopActivity
. Fornecemos um script bash para isso. O script bash está disponível no seguinte local, onde myRegion
é a Região AWS onde seu objeto EmrCluster
é executado, por exemplo, em us-west-2
.
s3://datapipeline-
MyRegion
/MyRegion
/bootstrap-actions/latest/TaskRunner/copy-jars-to-hadoop-classpath.sh
A forma de executar o script depende se EmrActivity
ou HadoopActivity
é executado em um recurso gerenciado por AWS Data Pipeline ou se é executado em um recurso autogerenciado.
Se você usa um recurso gerenciado por AWS Data Pipeline, adicione um bootstrapAction
ao objeto EmrCluster
. O bootstrapAction
especifica o script e os arquivos Jar a serem copiados como argumentos. Você pode adicionar até 255 campos bootstrapAction
por objeto EmrCluster
e adicionar um campo bootstrapAction
a um objeto EmrCluster
que já tenha ações de bootstrap.
Para especificar esse script como uma ação de bootstrap, use a seguinte sintaxe, onde JarFileRegion
é a Região em que o arquivo Jar é salvo e cada myJarFile n
é o caminho absoluto no Amazon S3 de um arquivo Jar a ser copiado para o classpath do Hadoop. Não especifique arquivos Jar que estão no classpath do Hadoop por padrão.
s3://datapipeline-
MyRegion
/MyRegion
/bootstrap-actions/latest/TaskRunner/copy-jars-to-hadoop-classpath.sh,JarFileRegion
,MyJarFile1
,MyJarFile2
[, ...]
O exemplo a seguir especifica uma ação de bootstrap que copia dois arquivos Jar no Amazon S3: my-jar-file.jar
e o emr-dynamodb-tool-4.14.0-jar-with-dependencies.jar
. A Região usada no exemplo é us-west-2.
{ "id" : "
MyEmrCluster
", "type" : "EmrCluster", "keyPair" : "my-key-pair
", "masterInstanceType" : "m5.xlarge
", "coreInstanceType" : "m5.xlarge
", "coreInstanceCount" : "2
", "taskInstanceType" : "m5.xlarge
", "taskInstanceCount": "2
", "bootstrapAction" : ["s3://datapipeline-us-west-2
/us-west-2
/bootstrap-actions/latest/TaskRunner/copy-jars-to-hadoop-classpath.sh,us-west-2
,s3://path/to/my-jar-file.jar,s3://dynamodb-dpl-us-west-2
/emr-ddb-storage-handler/4.14.0/emr-dynamodb-tools-4.14.0-jar-with-dependencies.jar"] }
Você precisa salvar e ativar o pipeline para que a alteração no novo bootstrapAction
seja habilitada.
Se você usa um recurso autogerenciado, pode baixar o script para a instância do cluster e executá-lo na linha de comando usando SSH. O script cria um diretório chamado /etc/hadoop/conf/shellprofile.d
e um arquivo chamado datapipeline-jars.sh
nesse diretório. Os arquivos jar fornecidos como argumentos de linha de comando são copiados para um diretório que o script cria chamado /home/hadoop/datapipeline_jars
. Se seu cluster estiver configurado de forma diferente, modifique o script adequadamente após baixá-lo.
A sintaxe para executar o script na linha de comando é um pouco diferente de usar a bootstrapAction
exibida no exemplo anterior. Use espaços ao invés de vírgulas entre os argumentos, conforme mostrado no exemplo a seguir.
./copy-jars-to-hadoop-classpath.sh
us-west-2
s3://path/to/my-jar-file.jar s3://dynamodb-dpl-us-west-2
/emr-ddb-storage-handler/4.14.0/emr-dynamodb-tools-4.14.0-jar-with-dependencies.jar
Permissões do Amazon EMR
Ao criar um perfil do IAM personalizado, considere cuidadosamente as permissões mínimas necessárias para que seu cluster realize os trabalhos. Certifique-se de conceder acesso aos recursos necessários, como arquivos no Amazon S3 ou dados no Amazon RDS, Amazon Redshift ou DynamoDB. Se você quiser definir visibleToAllUsers
como "False", sua função precisará das permissões adequadas. DataPipelineDefaultRole
não tem essas permissões. Você precisa fornecer uma união das funções DefaultDataPipelineResourceRole
e DataPipelineDefaultRole
como a função de objeto EmrCluster
ou criar sua própria função para essa finalidade.
Sintaxe
Campos de invocação de objetos | Descrição | Tipo de slot |
---|---|---|
schedule | Esse objeto é invocado durante a execução de um intervalo de programação. Especifique uma referência de programação para outro objeto para definir a ordem de execução de dependência desse objeto. É possível satisfazer esse requisito definindo explicitamente uma programação no objeto, por exemplo, ao especificar "schedule": {"ref":
"DefaultSchedule"} . Na maioria dos casos, é melhor colocar a referência de programação no objeto de pipeline padrão para que todos os objetos herdem essa programação. Como alternativa, se o pipeline tiver uma árvore de programações (outras programações dentro de uma programação principal), você poderá criar um objeto principal que tenha uma referência de programação. Para obter mais informações sobre o exemplo de configurações opcionais de programação, consulte https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-object-schedule.html. |
Objeto de referência. Por exemplo: "schedule":{"ref":"myScheduleId"} |
Campos opcionais | Descrição | Tipo de slot |
---|---|---|
actionOnResourceFailure | A ação executada após uma falha de recurso para este recurso. Os valores válidos são "retryall ", que tentará executar todas as tarefas para o cluster pela duração especificada e "retrynone ". |
String |
actionOnTaskFailure | A ação executada após uma falha de tarefa para este recurso. Os valores válidos são "continuar", que significa que não encerrar o cluster, e "encerrar". | String |
additionalMasterSecurityGroupIds | O identificador de security groups mestres adicionais do cluster do EMR, que segue o formulário sg-01XXXX6a. Para obter mais informações, consulte Grupos de segurança adicionais do Amazon EMR no Guia de gerenciamento do Amazon EMR. | String |
additionalSlaveSecurityGroupIds | O identificador de security groups subordinados adicionais do cluster do EMR, que segue o formulário sg-01XXXX6a . |
String |
amiVersion | A versão da imagem de máquina da Amazon (AMI) que o Amazon EMR usa para instalar nós do cluster. Para obter mais informações, consulte o Guia de gerenciamento do Amazon EMR. | String |
applications | Aplicativos a serem instalados no cluster com argumentos separados por vírgula. Por padrão, o Hive e o Pig estão instalados. Esse parâmetro é aplicável apenas para a versão 4.0 do Amazon EMR e versões posteriores. | String |
attemptStatus | O status mais recente da atividade remota. | String |
attemptTimeout | Tempo limite para conclusão do trabalho remoto. Se definida, uma atividade remota não concluída dentro do prazo definido poderá ser executada novamente. | Período |
availabilityZone | A zona de disponibilidade na qual o cluster será executado. | String |
bootstrapAction | Uma ação para ser executada quando o cluster é iniciado. Você pode especificar argumentos separados por vírgula. Para especificar várias ações, até 255, adicione vários campos bootstrapAction . O comportamento padrão é iniciar o cluster sem quaisquer ações de bootstrap. |
String |
configuration | Configuração de cluster do Amazon EMR. Esse parâmetro é aplicável apenas para a versão 4.0 do Amazon EMR e versões posteriores. | Objeto de referência. Por exemplo: "configuration":{"ref":"myEmrConfigurationId"} |
coreInstanceBidPrice | O preço máximo de instância spot que você está disposto a pagar por instâncias do Amazon EC2. Se uma sugestão de preço for especificada, o Amazon EMR usará instâncias spot para o grupo de instâncias. Especificado em dólares americanos (USD). | String |
coreInstanceCount | O número de nós core a serem usados no cluster. | Inteiro |
coreInstanceType | O tipo de instância do Amazon EC2 a ser usado nos nós centrais. Consulte Instâncias do Amazon EC2 compatíveis com clusters do Amazon EMR . | String |
coreGroupConfiguration | A configuração para o cluster de grupo de instâncias core do Amazon EMR. Esse parâmetro é aplicável apenas para a versão 4.0 do Amazon EMR e versões posteriores. | Objeto de referência. Por exemplo “configuration”: {“ref”:
“myEmrConfigurationId”} |
coreEbsConfiguration | A configuração para volumes do Amazon EBS que serão anexadas a cada um dos nós centrais no grupo central do cluster do Amazon EMR. Para obter mais informações, consulte Tipos de instâncias que suportam a otimização de EBS no Guia do usuário do Amazon EC2 para instâncias do Linux. | Objeto de referência. Por exemplo “coreEbsConfiguration”: {“ref”:
“myEbsConfiguration”} |
customAmiId | Aplica-se apenas às versões 5.7.0 e posterior do Amazon EMR. Especifica a ID de AMI de uma AMI personalizada a ser usada quando o Amazon EMR disponibiliza instâncias do Amazon EC2. Ele também pode ser usado em vez de ações de bootstrap para personalizar as configurações dos nós do cluster. Para obter mais informações, consulte o tópico referente no Guia de Gerenciamento do Amazon EMR. Usar uma AMI personalizada | String |
EbsBlockDeviceConfig |
A configuração de um dispositivo de blocos do Amazon EBS solicitado que está associado ao grupo de instâncias. Inclui um número especificado dos volumes que serão associados a cada instância no grupo de instâncias. Inclui
|
Objeto de referência. Por exemplo “EbsBlockDeviceConfig”: {“ref”:
“myEbsBlockDeviceConfig”} |
emrManagedMasterSecurityGroupId | O identificador do grupo de segurança principal do cluster do Amazon EMR, que segue a forma sg-01XXXX6a . Para obter mais informações, consulte Configurar grupos de segurança no Guia de gerenciamento do Amazon EMR. |
String |
emrManagedSlaveSecurityGroupId | O identificador do grupo de segurança subordinado do cluster do Amazon EMR, que segue a forma sg-01XXXX6a . |
String |
enableDebugging | Ativa a depuração no cluster do Amazon EMR. | String |
failureAndRerunMode | Descreve o comportamento do nó do consumidor quando as dependências apresentam falhas ou são executadas novamente. | Enumeração |
hadoopSchedulerType | O tipo de programador do cluster. Os tipos válidos são:
PARALLEL_FAIR_SCHEDULING ,
PARALLEL_CAPACITY_SCHEDULING e
DEFAULT_SCHEDULER . |
Enumeração |
httpProxy | O host do proxy que os clientes utilizarão na conexão com serviços da AWS. | Objeto de referência, como “httpProxy”:{"ref":"myHttpProxyId"} |
initTimeout | A quantidade de tempo de espera antes da inicialização do recurso. | Período |
keyPair | O par de chaves do Amazon EC2 usado para fazer logon no nó principal do cluster do Amazon EMR. | String |
lateAfterTimeout | O tempo decorrido após o início do pipeline no qual o objeto deve ser concluído. Ele é acionado somente quando o tipo de programação não está definido como ondemand . |
Período |
masterInstanceBidPrice | O preço máximo de instância spot que você está disposto a pagar por instâncias do Amazon EC2. É um valor decimal entre 0 e 20,00, exclusivos. Especificado em dólares americanos (USD). A definição deste valor permite instâncias spot para o nó principal do cluster do Amazon EMR. Se uma sugestão de preço for especificada, o Amazon EMR usará instâncias spot para o grupo de instâncias. | String |
masterInstanceType | O tipo de instância do Amazon EC2 a ser usado no nó principal. Consulte Instâncias do Amazon EC2 compatíveis com clusters do Amazon EMR . | String |
masterGroupConfiguration | A configuração para o cluster de grupo de instâncias principal do Amazon EMR. Esse parâmetro é aplicável apenas para a versão 4.0 do Amazon EMR e versões posteriores. | Objeto de referência. Por exemplo “configuration”: {“ref”:
“myEmrConfigurationId”} |
masterEbsConfiguration | A configuração para volumes do Amazon EBS que serão anexadas a cada um dos nós principais no grupo principal do cluster do Amazon EMR. Para obter mais informações, consulte Tipos de instâncias que suportam a otimização de EBS no Guia do usuário do Amazon EC2 para instâncias do Linux. | Objeto de referência. Por exemplo “masterEbsConfiguration”: {“ref”:
“myEbsConfiguration”} |
maxActiveInstances | O número máximo de instâncias ativas simultâneas de um componente. Novas execuções não contam para o número de instâncias ativas. | Inteiro |
maximumRetries | Quantidade máxima de novas tentativas com falha. | Inteiro |
onFail | Uma ação a ser executada quando há falha no objeto atual. | Objeto de referência. Por exemplo: "onFail":{"ref":"myActionId"} |
onLateAction | Ações que devem ser acionadas se um objeto ainda não foi agendado ou não foi concluído. | Objeto de referência. Por exemplo: "onLateAction":{"ref":"myActionId"} |
onSuccess | Uma ação a ser executada quando o objeto atual é executado com êxito. | Objeto de referência, como "onSuccess":{"ref":"myActionId"} |
parent | Pai do objeto atual a partir do qual os slots são herdados. | Objeto de referência. Por exemplo: "parent":{"ref":"myBaseObjectId"} |
pipelineLogUri | O URI do Amazon S3 (por exemplo, "s3://BucketName/Key/") para fazer upload de logs para o pipeline. | String |
região | O código da região na qual a instância do cluster do Amazon EMR deve ser executada. Por padrão, o cluster é executado na mesma região que o pipeline. Você pode executar um cluster na mesma região como um conjunto de dados dependente. | Enumeração |
releaseLabel | Rótulo de liberação para o cluster do EMR. | String |
reportProgressTimeout | Tempo limite para as chamadas sucessivas de trabalho remoto para reportProgress . Se definidas, as atividades remotas sem progresso para o período especificado podem ser consideradas como interrompidas e executadas novamente. |
Período |
resourceRole | O perfil do IAM que o AWS Data Pipeline utiliza para criar o cluster do Amazon EMR. A função padrão é DataPipelineDefaultRole . |
String |
retryDelay | A duração do tempo limite entre duas novas tentativas. | Período |
role (perfil) | O perfil do IAM passado para o Amazon EMR para criar nós de EC2. | String |
runsOn | Esse campo não é permitido neste objeto. | Objeto de referência. Por exemplo: "runsOn":{"ref":"myResourceId"} |
securityConfiguration | O identificador da configuração de segurança do EMR que será aplicado ao cluster. Esse parâmetro é aplicável apenas para a versão 4.8.0 do Amazon EMR e versões posteriores. | String |
serviceAccessSecurityGroupId | O identificador do grupo de segurança de acesso ao serviço do cluster do Amazon EMR. | String. Segue a forma sg-01XXXX6a . Por exemplo: sg-1234abcd . |
scheduleType | O tipo de programação permite que você especifique se os objetos na sua definição de pipeline devem ser programados no início ou final do intervalo. Os valores são: cron , ondemand e timeseries . A programação timeseries significa que as instâncias são programadas no final de cada intervalo. A programação cron significa que as instâncias são programadas no início de cada intervalo. Uma programação ondemand permite que você execute um pipeline uma vez por ativação. Você não precisa clonar nem recriar o pipeline para executá-lo novamente. Se você usar uma programação ondemand , ela precisará ser especificada no objeto padrão, além de ser a única scheduleType especificada para objetos no pipeline. Para usar pipelines ondemand , chame a operação ActivatePipeline para cada execução subsequente. |
Enumeração |
subnetId | O identificador da subrede em que o cluster do Amazon EMR será executado. | String |
supportedProducts | Um parâmetro que instala software de terceiros em um cluster do Amazon EMR, por exemplo, uma distribuição de terceiros do Hadoop. | String |
taskInstanceBidPrice | O preço máximo de instância spot que você está disposto a pagar por instâncias do EC2. Um valor decimal entre 0 e 20,00, exclusive. Especificado em dólares americanos (USD). Se uma sugestão de preço for especificada, o Amazon EMR usará instâncias spot para o grupo de instâncias. | String |
taskInstanceCount | O número de nós de tarefa a serem usados no cluster do Amazon EMR. | Inteiro |
taskInstanceType | O tipo de instância do Amazon EC2 a ser usado nos nós de tarefa. | String |
taskGroupConfiguration | A configuração para o cluster de grupo de instâncias de tarefa do Amazon EMR. Esse parâmetro é aplicável apenas para a versão 4.0 do Amazon EMR e versões posteriores. | Objeto de referência. Por exemplo “configuration”: {“ref”:
“myEmrConfigurationId”} |
taskEbsConfiguration | A configuração para volumes do Amazon EBS que serão anexadas a cada um dos nós de tarefa no grupo de tarefa do cluster do Amazon EMR. Para obter mais informações, consulte Tipos de instâncias que suportam a otimização de EBS no Guia do usuário do Amazon EC2 para instâncias do Linux. | Objeto de referência. Por exemplo “taskEbsConfiguration”: {“ref”:
“myEbsConfiguration”} |
terminateAfter | Encerrar o recurso após tantas horas. | Inteiro |
VolumeSpecification |
As especificações de volume do Amazon EBS, como tipo de volume, IOPS e tamanho em Gigibytes (GiB), que serão solicitadas para o volume do Amazon EBS anexado a uma instância do Amazon EC2 no cluster do Amazon EMR. O nó pode ser um nó core, principal ou de tarefa.
|
Objeto de referência. Por exemplo “VolumeSpecification”: {“ref”:
“myVolumeSpecification”} |
useOnDemandOnLastAttempt | Na última tentativa de solicitar um recurso, faça um pedido para instâncias sob demanda em vez de instâncias spot. Isso garante que, se todas as tentativas anteriores falharam, a última tentativa não será interrompida. | Booleano |
workerGroup | Campo não é permitido neste objeto. | String |
Campos de tempo de execução | Descrição | Tipo de slot |
---|---|---|
@activeInstances | Lista dos objetos da instância ativa agendados no momento. | Objeto de referência, como “activeInstances”:{"ref":"myRunnableObjectId"} |
@actualEndTime | Hora em que a execução deste objeto foi concluída. | DateTime |
@actualStartTime | Hora em que a execução deste objeto foi iniciada. | DateTime |
cancellationReason | O motivo do cancelamento, se esse objeto foi cancelado. | String |
@cascadeFailedOn | Descrição da cadeia de dependências na qual o objeto apresentou falha. | Objeto de referência, como “cascadeFailedOn”:{"ref":"myRunnableObjectId"} |
emrStepLog | Logs da etapa do disponíveis somente nas tentativas de atividade do Amazon EMR. | String |
errorId | O ID do erro se esse objeto apresentou falha. | String |
errorMessage | A mensagem de erro se esse objeto apresentou falha. | String |
errorStackTrace | O rastreamento de pilha com erro se esse objeto apresentou falha. | String |
@failureReason | O motivo da falha de recurso. | String |
@finishedTime | A hora em que esse objeto terminou a execução. | DateTime |
hadoopJobLog | Registos de trabalho do Hadoop disponíveis nas tentativas de atividades do Amazon EMR. | String |
@healthStatus | O status de integridade do objeto que indica se houve sucesso ou falha na última instância concluída do objeto. | String |
@healthStatusFromInstanceId | ID do último objeto da instância concluído. | String |
@healthStatusUpdatedTime | Hora em que o status de integridade foi atualizado pela última vez. | DateTime |
hostname | O nome do host do cliente que capturou a tentativa da tarefa. | String |
@lastDeactivatedTime | A hora em que esse objeto foi desativado pela última vez. | DateTime |
@latestCompletedRunTime | Hora da última execução concluída. | DateTime |
@latestRunTime | Hora da última execução programada. | DateTime |
@nextRunTime | Hora da próxima execução a ser programada. | DateTime |
reportProgressTime | A última vez que a atividade remota relatou progresso. | DateTime |
@scheduledEndTime | Horário de término da programação para o objeto. | DateTime |
@scheduledStartTime | Horário de início da programação para o objeto. | DateTime |
@status | O status deste objeto. | String |
@version | A versão do pipeline com que o objeto foi criado. | String |
@waitingOn | Descrição da lista de dependências em que este objeto está aguardando. | Objeto de referência, como “waitingOn”:{"ref":"myRunnableObjectId"} |
Campos do sistema | Descrição | Tipo de slot |
---|---|---|
@error | Erro ao descrever o objeto malformado. | String |
@pipelineId | ID do pipeline ao qual este objeto pertence. | String |
@sphere | O local de um objeto no ciclo de vida. Objetos de componentes dão origem a objetos de instância, que executam objetos de tentativa. | String |