

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Aggiungi una fase Spark
<a name="emr-spark-submit-step"></a>

Puoi utilizzare le fasi di Amazon EMR per inviare lavoro al framework Spark installato su un cluster EMR. Per ulteriori informazioni, consulta l'argomento [Fasi](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-overview.html#emr-overview-data-processing) della Guida alla gestione di Amazon EMR. Nella console e nella CLI, puoi eseguire questa operazione utilizzando una fase dell'applicazione Spark, che esegue automaticamente lo script `spark-submit` come fase. Con l'API, utilizzi una fase per invocare `spark-submit` utilizzando `command-runner.jar`.

Per ulteriori informazioni su come inviare applicazioni a Spark, consulta l'argomento [Submitting applications (Invio di applicazioni)](https://spark.apache.org/docs/latest/submitting-applications.html) nella documentazione di Apache Spark.

**Per inviare una fase Spark mediante la console**

1. [Apri la console Amazon EMR in /emr. https://console.aws.amazon.com](https://console.aws.amazon.com/emr/)

1. In **Cluster List (Elenco cluster)**, scegliere il nome del cluster.

1. Scorrere fino alla sezione **Steps (Fasi)** ed espanderla, quindi scegliere **Add step (Aggiungi fase)**.

1. Nella finestra di dialogo **Add Step (Aggiungi fase)**:
   + Per **Tipo di fase**, scegli **Applicazione Spark**.
   + Per **Name (Nome)**, accettare il nome predefinito (applicazione Spark) o digitare un nuovo nome.
   + Per **Deploy mode (Modalità di distribuzione)**, scegliere la modalità **Client** o **Cluster**. La modalità Client avvia il programma driver nell'istanza primaria del cluster, mentre la modalità Cluster avvia il programma driver nel cluster. Per la modalità client, l'output del log del driver viene visualizzato nei log delle fasi, mentre per la modalità cluster, l'output del log del driver viene visualizzato nei log per il primo container YARN. Per ulteriori informazioni, consulta [Cluster mode overview (Panoramica della modalità cluster)](https://spark.apache.org/docs/latest/cluster-overview.html) nella documentazione di Apache Spark.
   + Specificare le **Spark-submit options (Opzioni Spark-submit)** desiderate. Per ulteriori informazioni sulle opzioni `spark-submit`, consulta [Avvio di applicazioni con spark-submit](https://spark.apache.org/docs/latest/submitting-applications.html#launching-applications-with-spark-submit).
   + Per **Application location (Posizione applicazione)**, specificare il percorso locale o URI di S3 dell'applicazione.
   + Lasciare vuoto il campo **Arguments (Argomenti)**.
   + Per **Action on failure (Operazione in caso di errore)**, accettare l'opzione predefinita, ovvero **Continue (Continua)**.

1. Scegliere **Add (Aggiungi)**. La fase viene visualizzata nella console con lo stato Pending (In attesa). 

1. Durante l'esecuzione della fase, lo stato passa da **Pending (In attesa)** a **Running (In esecuzione)** a **Completed (Completata)**. Per aggiornare lo stato, scegliere l'icona **Refresh (Aggiorna)** sopra la colonna **Actions (Operazioni)**. 

1. I risultati della fase sono visualizzati nella pagina Cluster Details (Dettagli cluster) della console di Amazon EMR accanto alla fase in **Log Files (File di log)** se la caratteristica di registrazione dei log è stata configurata. È eventualmente possibile trovare informazioni sulla fase nel bucket di log configurato all'avvio del cluster. 

**Per inviare lavori a Spark utilizzando il AWS CLI**

Inviare una fase quando si crea il cluster o si utilizza il sottocomando `aws emr add-steps` in un cluster esistente. 

1. Utilizzare `create-cluster` come mostrato nell'esempio seguente.
**Nota**  
I caratteri di continuazione della riga Linux (\$1) sono inclusi per la leggibilità. Possono essere rimossi o utilizzati nei comandi Linux. Per Windows, rimuoverli o sostituirli con un accento circonflesso (^).

   ```
   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
   ```

   È anche possibile utilizzare `command-runner.jar` come mostrato nell'esempio seguente.

   ```
   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**  
I caratteri di continuazione della riga Linux (\$1) sono inclusi per la leggibilità. Possono essere rimossi o utilizzati nei comandi Linux. Per Windows, rimuoverli o sostituirli con un accento circonflesso (^).

1. In alternativa, aggiungere fasi a un cluster in esecuzione. Utilizza `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]
   ```

   È anche possibile utilizzare `command-runner.jar` come mostrato nell'esempio seguente.

   ```
   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]
   ```

**Invio di lavoro a Spark mediante il kit SDK per Java**

1. L'esempio seguente mostra come aggiungere una fase a un cluster con Spark utilizzando 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. Visualizzare i risultati della fase esaminando i log relativi alla stessa. Puoi farlo Console di gestione AWS se hai abilitato la registrazione scegliendo **Steps**, selezionando il tuo passaggio e poi, per **i file di registro**, scegliendo o`stdout`. `stderr` Per visualizzare i log disponibili, scegliere **View Logs (Visualizza log)**.

## Sostituzione delle impostazioni di configurazione predefinite di Spark
<a name="dynamic-configuration"></a>

I valori di configurazione predefiniti di Spark possono essere sostituiti per ogni applicazione. Puoi eseguire questa operazione quando invii applicazioni utilizzando una fase, che in pratica passa opzioni a `spark-submit`. Ad esempio, puoi cambiare la memoria assegnata a un processo esecutore modificando `spark.executor.memory`. In tal caso, devi fornire il parametro `--executor-memory` con un argomento come il seguente:

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

Nello stesso modo, puoi regolare `--executor-cores` e `--driver-memory`. In una fase, forniresti i seguenti argomenti alla fase:

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

Puoi anche regolare impostazioni che possono non avere un parametro integrato utilizzando l'opzione `--conf`. Per ulteriori informazioni su altre impostazioni regolabili, consulta l'argomento [Dynamically loading Spark properties (Caricamento dinamico delle proprietà Spark)](https://spark.apache.org/docs/latest/configuration.html#dynamically-loading-spark-properties) nella documentazione di Apache Spark.