

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á.

# Adicionar uma etapa do Spark
<a name="emr-spark-submit-step"></a>

Você pode usar etapas do Amazon EMR para enviar trabalhos à estrutura do Spark instalada em um cluster do EMR. Para obter mais informações, consulte [Etapas](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-overview.html#emr-overview-data-processing) no Guia de gerenciamento do Amazon EMR. No console e na CLI, você faz isso usando uma etapa de aplicativo Spark, que executa o script `spark-submit` como um etapa em seu nome. Com a API, você pode usar uma etapa para invocar `spark-submit` usando `command-runner.jar`.

Para obter mais informações sobre como enviar aplicações ao Spark, consulte o tópico [Submitting applications](https://spark.apache.org/docs/latest/submitting-applications.html) na documentação do Apache Spark.

**Para enviar uma etapa do Spark usando o console**

1. [Abra o console do Amazon EMR em https://console.aws.amazon.com /emr.](https://console.aws.amazon.com/emr/)

1. Em **Cluster List (Lista de clusters)**, escolha o nome do cluster.

1. Role até a seção **Steps (Etapas)** e expanda-a. Em seguida, escolha **Add step (Adicionar etapa)**.

1. Na caixa de diálogo **Add Step (Adicionar etapa)**:
   + Para **Step type (Tipo de etapa)**, escolha **Spark application (Aplicativo Spark)**.
   + Para **Name (Nome)**, aceite o nome padrão (aplicativo Spark) ou digite um novo nome.
   + Em **Deploy mode (Modo de implantação)**, escolha o modo de **Client (Cliente)** ou de **Cluster**. O modo de cliente inicia o programa de driver na instância primária do cluster, enquanto o modo de cluster inicia o programa de driver no cluster. Para o modo de cliente, a saída do log do driver aparece nos logs de etapa, enquanto para o modo de cluster, a saída do log do driver aparece nos logs do primeiro recipiente YARN. Para obter mais informações, consulte [Cluster mode overview](https://spark.apache.org/docs/latest/cluster-overview.html) na documentação do Apache Spark.
   + Especifique as **Spark-submit options (opções de Spark-submit)** desejadas. Para obter mais informações sobre as opções de `spark-submit`, consulte [Launching applications with spark-submit](https://spark.apache.org/docs/latest/submitting-applications.html#launching-applications-with-spark-submit).
   + Para **Application location (Local do aplicativo)**, especifique o local ou o caminho do URI do S3 do aplicativo.
   + Para **Arguments (Argumentos)**, deixe o campo em branco.
   + Para **Action on failure (Ação na falha)**, aceite a opção padrão **Continue (Continuar)**.

1. Escolha **Adicionar**. A etapa é exibida no console com o status Pendente. 

1. O status da etapa muda de **Pending (Pendente)** para **Running (Em execução)** e depois para **Completed (Concluído)** conforme ela é executada. Para atualizar o status, escolha o ícone **Refresh (Atualizar)** acima da coluna **Actions (Ações)**. 

1. Os resultados da etapa estão localizados na página Detalhes do cluster do console do Amazon EMR ao lado da etapa em **Arquivos de log** se você tem o registro em log configurado. Opcionalmente, você pode encontrar informações de etapas no bucket de logs configurado ao executar o cluster. 

**Para enviar trabalhos para o Spark usando o AWS CLI**

Envie uma etapa ao criar o cluster ou use o subcomando `aws emr add-steps` em um cluster existente. 

1. Use `create-cluster`, conforme mostrado no exemplo a seguir.
**nota**  
Os caracteres de continuação de linha do Linux (\$1) são incluídos para facilitar a leitura. Eles podem ser removidos ou usados ​​em comandos do Linux. No Windows, remova-os ou substitua-os por um sinal de interpolação (^).

   ```
   aws emr create-cluster --name "Add Spark Step Cluster" --release-label emr-7.12.0 --applications Name=Spark \
   --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 \
   --steps Type=Spark,Name="Spark Program",ActionOnFailure=CONTINUE,Args=[--class,org.apache.spark.examples.SparkPi,/usr/lib/spark/examples/jars/spark-examples.jar,10] --use-default-roles
   ```

   Como opção, você pode usar `command-runner.jar` conforme mostrado no exemplo a seguir.

   ```
   aws emr create-cluster --name "Add Spark Step Cluster" --release-label emr-7.12.0 \
   --applications Name=Spark --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 \
   --steps Type=CUSTOM_JAR,Name="Spark Program",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[spark-example,SparkPi,10] --use-default-roles
   ```
**nota**  
Os caracteres de continuação de linha do Linux (\$1) são incluídos para facilitar a leitura. Eles podem ser removidos ou usados ​​em comandos do Linux. No Windows, remova-os ou substitua-os por um sinal de interpolação (^).

1. Como alternativa, adicione etapas a um cluster já em execução. Use `add-steps`.

   ```
   aws emr add-steps --cluster-id j-2AXXXXXXGAPLF --steps Type=Spark,Name="Spark Program",ActionOnFailure=CONTINUE,Args=[--class,org.apache.spark.examples.SparkPi,/usr/lib/spark/examples/jars/spark-examples.jar,10]
   ```

   Como opção, você pode usar `command-runner.jar` conforme mostrado no exemplo a seguir.

   ```
   aws emr add-steps --cluster-id j-2AXXXXXXGAPLF --steps Type=CUSTOM_JAR,Name="Spark Program",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[spark-example,SparkPi,10]
   ```

**Enviar trabalhos ao Spark usando o SDK para Java**

1. O exemplo a seguir mostra como adicionar uma etapa a um cluster com o Spark usando Java.

   ```
   AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
   AmazonElasticMapReduce emr = new AmazonElasticMapReduceClient(credentials);
    
   StepFactory stepFactory = new StepFactory();
   AmazonElasticMapReduceClient emr = new AmazonElasticMapReduceClient(credentials);
   AddJobFlowStepsRequest req = new AddJobFlowStepsRequest();
   req.withJobFlowId("j-1K48XXXXXXHCB");
   
   List<StepConfig> stepConfigs = new ArrayList<StepConfig>();
   		
   HadoopJarStepConfig sparkStepConf = new HadoopJarStepConfig()
   			.withJar("command-runner.jar")
   			.withArgs("spark-submit","--executor-memory","1g","--class","org.apache.spark.examples.SparkPi","/usr/lib/spark/examples/jars/spark-examples.jar","10");			
   		
   StepConfig sparkStep = new StepConfig()
   			.withName("Spark Step")
   			.withActionOnFailure("CONTINUE")
   			.withHadoopJarStep(sparkStepConf);
   
   stepConfigs.add(sparkStep);
   req.withSteps(stepConfigs);
   AddJobFlowStepsResult result = emr.addJobFlowSteps(req);
   ```

1. Visualize os resultados da etapa examinando os logs da etapa. Você pode fazer isso no Console de gerenciamento da AWS caso de ter ativado o registro, escolhendo **Etapas**, selecionando sua etapa e, em **Arquivos de log**, escolhendo `stdout` ou`stderr`. Para ver os logs disponíveis, escolha **View Logs (Exibir logs)**.

## Substituir as definições de configuração padrão do Spark
<a name="dynamic-configuration"></a>

Você pode querer substituir valores de configuração padrão do Spark para cada aplicativo. Você pode fazer isso ao enviar aplicativos usando uma etapa, que transmite essencialmente opções para `spark-submit`. Por exemplo, você pode querer alterar a memória alocada para um processo de executor modificando `spark.executor.memory`. Você poderia fornecer à opção `--executor-memory` um argumento semelhante ao seguinte:

```
spark-submit --executor-memory 1g --class org.apache.spark.examples.SparkPi /usr/lib/spark/examples/jars/spark-examples.jar 10
```

Da mesma forma, você pode ajustar `--executor-cores` e `--driver-memory`. Em uma etapa, você forneceria os seguintes argumentos para a etapa:

```
--executor-memory 1g --class org.apache.spark.examples.SparkPi /usr/lib/spark/examples/jars/spark-examples.jar 10
```

Você também pode ajustar as configurações que não possam não ter uma opção interna usando `--conf`. Para obter mais informações sobre outras configurações que são ajustáveis, consulte o tópico [Dynamically loading Spark properties](https://spark.apache.org/docs/latest/configuration.html#dynamically-loading-spark-properties) na documentação do Apache Spark.