

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

# Creazione ed esecuzione di un'applicazione Hadoop
<a name="emr-hadoop-application"></a>

**Topics**
+ [Creazione di file binari con Amazon EMR](emr-build-binaries.md)
+ [Elaborazione di dati con lo streaming](UseCase_Streaming.md)
+ [Elaborazione di dati con un JAR personalizzato](UseCase_CustomJar.md)

# Creazione di file binari con Amazon EMR
<a name="emr-build-binaries"></a>

Puoi utilizzare Amazon EMR come ambiente di compilazione di programmi da utilizzare nel tuo cluster. I programmi utilizzati con Amazon EMR devono essere compilati su un sistema che esegue la stessa versione di Linux utilizzata da Amazon EMR. Per una versione a 32 bit, la compilazione deve avvenire su un computer a 32 bit o con le opzioni di compilazione incrociata a 32 bit attivate. Per una versione a 64 bit, la compilazione deve avvenire su un computer a 64 bit o con le opzioni di compilazione incrociata a 64 bit attivate. Per ulteriori informazioni sulle versioni di istanze EC2, consulta [Pianificazione e configurazione di istanze EC2](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-ec2-instances.html) nella *Guida alla gestione di Amazon EMR*. I linguaggi di programmazione supportati includono C\$1\$1, Python e C\$1. 

La seguente tabella illustra i passaggi necessari per sviluppare e testare la tua applicazione utilizzando Amazon EMR.


**Processo per la creazione di un modulo**  

|  |  | 
| --- |--- |
|  1 |  Connessione al nodo master del cluster. | 
|  2  |  Copia dei file di origine sul nodo master. | 
|  3  |  Creazione di file binari con le ottimizzazioni necessarie. | 
|  4 |  Copia i file binari dal nodo master su Amazon S3. | 

Ciascuna di queste fasi è trattata nel dettaglio nelle sezioni che seguono. 

**Per connettersi al nodo master del cluster**
+ Segui le istruzioni riportate nella sezione relativa alla [Connessione al nodo principale tramite SSH](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html) nella *Guida alla gestione di Amazon EMR*.

**Per copiare i file di origine sul nodo master**

1. Inserisci i file di origine in un bucket Amazon S3. Per ulteriori informazioni su come creare i bucket e spostare i dati in Amazon S3, consulta [Guida per l'utente di Amazon Simple Storage Service](https://docs.aws.amazon.com/AmazonS3/latest/userguide/).

1. Creare una cartella sul cluster Hadoop per i file di origine immettendo un comando simile al seguente:

   ```
   mkdir SourceFiles
   ```

1. Copia i file di origine da Amazon S3 sul nodo master digitando un comando simile al seguente:

   ```
   hadoop fs -get s3://amzn-s3-demo-bucket/SourceFiles SourceFiles
   ```

**Creazione di file binari con le ottimizzazioni necessarie**  
La modalità di creazione dei file binari dipende da molti fattori. Segui le istruzioni per i tuoi specifici strumenti di creazione per impostare e configurare il tuo ambiente. Puoi utilizzare i comandi di specifica del sistema di Hadoop per ottenere informazioni sul cluster e determinare come installare il tuo ambiente di compilazione.

**Per identificare le specifiche di sistema**
+ Utilizzare i seguenti comandi per verificare l'architettura utilizzata per creare il file binari.

  1. Per visualizzare la versione di Debian, immettere il comando seguente:

     ```
     master$ cat /etc/issue
     ```

     L'output è simile al seguente.

     ```
     Debian GNU/Linux 5.0
     ```

  1. Per visualizzare il nome DNS pubblico e la dimensione del processore, immettere il comando seguente:

     ```
     master$ uname -a
     ```

     L'output è simile al seguente.

     ```
     Linux domU-12-31-39-17-29-39.compute-1.internal 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:34:28 EST 2008 x86_64 GNU/Linux
     ```

  1. Per visualizzare la velocità del processore, immettere il comando seguente:

     ```
     master$ cat /proc/cpuinfo
     ```

     L'output è simile al seguente.

     ```
     processor : 0
     vendor_id : GenuineIntel
     model name : Intel(R) Xeon(R) CPU E5430 @ 2.66GHz
     flags : fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr cda lahf_lm
     ...
     ```

Una volta creati i file binari, è possibile copiare i file su Amazon S3.

**Copia dei file binari dal nodo master su Amazon S3**
+ Per copiare i file nel bucket Amazon S3, digita il comando seguente:

  ```
  hadoop fs -put BinaryFiles s3://amzn-s3-demo-bucket/BinaryDestination
  ```

# Elaborazione di dati con lo streaming
<a name="UseCase_Streaming"></a>

Hadoop streaming è un'utilità fornita con Hadoop che consente di sviluppare eseguibili in linguaggi diversi da Java. MapReduce Streaming viene implementato sotto forma di un file JAR, perciò è possibile eseguirlo dall'API o riga di comando di Amazon EMR in modo analogo a quanto avviene per un file JAR standard. 

Questa sezione descrive come utilizzare Streaming con Amazon EMR. 

**Nota**  
Apache Hadoop Streaming è uno strumento indipendente. Per questo motivo, tutte le funzioni e i parametri non sono descritti in questa pagina. [Per ulteriori informazioni sullo streaming Hadoop, visitate http://hadoop.apache. org/docs/stable/hadoop-streaming/HadoopStreaming.html.](http://hadoop.apache.org/docs/stable/hadoop-streaming/HadoopStreaming.html)

## Utilizzo dell'utility Hadoop Streaming
<a name="HadoopStreamCommands"></a>

Questa sezione descrive come utilizzare per la utility Hadoop Streaming.


**Processo di Hadoop**  

|  |  | 
| --- |--- |
| 1 |  Scrivere il mappatore e il riduttore eseguibili nel linguaggio di programmazione preferito. Seguire le istruzioni riportate nella documentazione Hadoop per scrivere i file eseguibili in streaming. I programmi devono leggere i loro dati di ingresso e uscita dai dati di input e uscita output attraverso l'output standard. Per impostazione predefinita, ogni riga di input/output rappresenta un record e la prima scheda di ogni riga viene utilizzata come separatore tra la chiave e il valore.  | 
| 2 |  Prova gli eseguibili localmente e caricali su Amazon S3.  | 
| 3 |  Utilizza l'interfaccia a riga di comando Amazon EMR o la console di Amazon EMR per eseguire l'applicazione.  | 

Ogni script di mappatura viene avviato come processo separato nel cluster. Ciascun eseguibile del riduttore trasforma l'output dell'eseguibile del mappatore nell'uscita dei dati in base al flusso di lavoro.

I parametri `input`, `output`, `mapper` e `reducer` sono necessari per la maggior parte delle applicazioni di streaming. La seguente tabella descrive questi ed altri parametri opzionali.


| Parametro | Description | Richiesto | 
| --- | --- | --- | 
| -input |  Percorso dei dati di input su Amazon S3. Tipo: String Impostazione predefinita: nessuna Vincolo: URI. Se non viene specificato alcun protocollo, utilizza il file system predefinito del cluster.   | Sì | 
| -output |  Percorso su Amazon S3 in cui Amazon EMR carica i dati elaborati. Tipo: String Impostazione predefinita: nessuna Vincolo: URI Impostazione predefinita: se il percorso non è specificato, Amazon EMR carica i dati nel percorso specificato da `input`.  | Sì | 
| -mapper |  Nome del mappatore eseguibile. Tipo: String Impostazione predefinita: nessuna  | Sì | 
| -reducer |  Nome del riduttore eseguibile. Tipo: String Impostazione predefinita: nessuna  | Sì | 
| -cacheFile |  Un percorso Amazon S3 contenente file da copiare nella directory di lavoro locale per Hadoop (principalmente per migliorare le prestazioni). Tipo: String Impostazione predefinita: nessuna Vincoli: [URI]\$1[nome symlink da creare nella directory di lavoro]   | No | 
| -cacheArchive |  File JAR da estrarre nella directory di lavoro Tipo: String Impostazione predefinita: nessuna Vincoli: [URI]\$1[nome directory symlink da creare nella directory di lavoro]   | No | 
| -combiner |  Combina risultati Tipo: String Impostazione predefinita: nessuna Vincoli: nome della classe Java  | No | 

Il seguente esempio di codice è un eseguibile di mappatura scritto in Python. Questo script fa parte dell'applicazione di WordCount esempio.

```
 1. #!/usr/bin/python
 2. import sys
 3. 
 4. def main(argv):
 5.   line = sys.stdin.readline()
 6.   try:
 7.     while line:
 8.       line = line.rstrip()
 9.       words = line.split()
10.       for word in words:
11.         print "LongValueSum:" + word + "\t" + "1"
12.       line = sys.stdin.readline()
13.   except "end of file":
14.     return None
15. if __name__ == "__main__":
16.   main(sys.argv)
```

# Invio di una fase di streaming
<a name="CLI_CreateStreaming"></a>

Questa sezione descrive le nozioni di base per l'invio di una fase di streaming a un cluster. Un'applicazione di streaming legge gli input da un ingresso standard e quindi esegue uno script o un eseguibile (chiamato mappatore) su ogni ingresso. Il risultato di ogni ingresso viene salvato localmente, tipicamente su una partizione Hadoop Distributed File System (HDFS). Dopo che tutti gli input sono stati elaborati dal mappatore, un secondo script o eseguibile (chiamato riduttore) elabora i risultati del mappatore. I risultati del riduttore vengono inviati all'output standard. È possibile concatenare una serie di fasi di Streaming, in cui l'output di una fase diventa l'input di un'altra fase. 

Il mappatore e il riduttore possono essere referenziati come file oppure si può fornire una classe Java. È possibile implementare il mappatore e il riduttore in qualsiasi lingua supportata, inclusi Ruby, Perl, Python, PHP o Bash.

## Invio di una fase di streaming utilizzando la console
<a name="emr-dev-create-stream-console"></a>

Questo esempio descrive come utilizzare la console di Amazon EMR per inviare una fase di Streaming personalizzata a un cluster in esecuzione.

**Invio di una fase di streaming**

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)**, selezionare 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 **Step type (Tipo di fase)**, scegliere **Streaming program (Programma Streaming)**.
   + Per **Name (Nome)**, accettare il nome di default, ovvero Streaming program (Programma Streaming), o digitare un nuovo nome.
   + Per **Mapper (Mappatore)**, digitare o aprire la posizione della classe del mapper in Hadoop, o un bucket S3 in cui risiede l'eseguibile del mappatore, come un programma Python. Il valore del percorso deve essere nel formato*BucketName*//. *path* *MapperExecutable*
   + Per **Reducer (Riduttore)**, digitare o aprire la posizione della classe del riduttore in Hadoop, o un bucket S3 in cui risiede l'eseguibile del riduttore, come un programma Python. Il valore del percorso deve essere nel formato*BucketName*/*path*/*MapperExecutable*. Amazon EMR supporta la parola chiave speciale *aggregata*. Per ulteriori informazioni, vedere la libreria di aggregazione fornita da Hadoop.
   + Per **Input S3 location (Percorso input S3)**, digitare o aprire il percorso dei dati di input. 
   + Per **Output S3 location (Percorso S3 output)**, digita il nome del bucket di output Amazon S3.
   + 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). 

## AWS CLI
<a name="emr-dev-create-stream-cli"></a>

Questi esempi mostrano come utilizzare per AWS CLI creare un cluster e inviare una fase di streaming. 

**Per creare un cluster e inviare una fase di streaming utilizzando il AWS CLI**
+ Per creare un cluster e inviare una fase di streaming utilizzando AWS CLI, digita il seguente comando e sostituiscilo *myKey* con il nome della tua coppia di key pair EC2. Nota che l'argomento per `--files` dovrebbe essere il percorso Amazon S3 della posizione dello script e gli argomenti per `-mapper` e `-reducer` dovrebbero essere i nomi dei rispettivi file di script.

  ```
  aws emr create-cluster --name "Test cluster" --release-label emr-7.12.0 --applications Name=Hue Name=Hive Name=Pig --use-default-roles \
  --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 \
  --steps Type=STREAMING,Name="Streaming Program",ActionOnFailure=CONTINUE,Args=[--files,pathtoscripts,-mapper,mapperscript,-reducer,reducerscript,aggregate,-input,pathtoinputdata,-output,pathtooutputbucket]
  ```
**Nota**  
I caratteri di continuazione della riga Linux (\$1) sono inclusi per questioni di leggibilità. Possono essere rimossi o utilizzati nei comandi Linux. Per Windows, rimuoverli o sostituirli con un accento circonflesso (^).

  Quando si specifica il numero di istanze senza utilizzare il parametro `--instance-groups`, viene avviato un singolo nodo master e le istanze rimanenti vengono avviate come nodi principali. Tutti i nodi utilizzano il tipo di istanza specificato nel comando.
**Nota**  
Se in precedenza non sono stati creati il ruolo del servizio Amazon EMR predefinito e il profilo dell'istanza EC2, digita aws `emr create-default-roles` per crearli prima di digitare il sottocomando `create-cluster`.

  Per ulteriori informazioni sull'utilizzo dei comandi Amazon EMR in AWS CLI, consulta. [https://docs.aws.amazon.com/cli/latest/reference/emr](https://docs.aws.amazon.com/cli/latest/reference/emr)

# Elaborazione di dati con un JAR personalizzato
<a name="UseCase_CustomJar"></a>

Un JAR personalizzato esegue un programma Java compilato che viene caricato su Amazon S3. Devi compilare il programma in base alla versione di Hadoop che desideri avviare e invia una fase `CUSTOM_JAR` al tuo cluster Amazon EMR. Per ulteriori informazioni sulla compilazione di un file JAR, consulta [Creazione di file binari con Amazon EMR](emr-build-binaries.md).

Per ulteriori informazioni sulla creazione di un' MapReduce applicazione Hadoop, consulta il [MapReduce Tutorial](http://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html) nella documentazione di Apache Hadoop.

**Topics**
+ [Invio di una fase JAR personalizzata](emr-launch-custom-jar-cli.md)

# Invio di una fase JAR personalizzata
<a name="emr-launch-custom-jar-cli"></a>

Un JAR personalizzato esegue un programma Java compilato che viene caricato su Amazon S3. Devi compilare il programma in base alla versione di Hadoop che desideri avviare e invia una fase `CUSTOM_JAR` al tuo cluster Amazon EMR. Per ulteriori informazioni sulla compilazione di un file JAR, consulta [Creazione di file binari con Amazon EMR](emr-build-binaries.md).

[Per ulteriori informazioni sulla creazione di un' MapReduce applicazione Hadoop, consultate il Tutorial nella documentazione di Apache Hadoop. MapReduce ](http://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html)

Questa sezione descrive le basi per l'invio di una fase JAR personalizzata in Amazon EMR. L'invio di una fase JAR personalizzata consente di scrivere uno script per elaborare i dati con il linguaggio di programmazione Java. 

## Invio di una fase JAR personalizzata utilizzando la console
<a name="ConsoleCreatingaCustomJARJob"></a>

Questo esempio descrive come utilizzare la console di Amazon EMR per inviare una fase JAR personalizzata a un cluster in esecuzione.

**Per inviare una fase JAR personalizzata utilizzando 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)**, selezionare 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 **Step Type (Tipo di fase)** selezionare **Custom JAR (JAR personalizzato)**.
   + Per **Name (Nome)**, accettare il nome di default, ovvero Custom JAR (JAR personalizzato), o digitare un nuovo nome.
   + Per **JAR S3 location (Posizione JAR S3)**, digitare o selezionare il percorso del file JAR. La posizione JAR può essere un percorso in S3 o una classe java completa nel classpath. 
   + Per **Arguments (Argomenti)**, digitare eventuali argomenti obbligatori come stringhe separate da spazi o lasciare il campo vuoto.
   + 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). 

## Avvio di un cluster e invio di un passaggio JAR personalizzato con AWS CLI
<a name="emr-dev-create-jar-cli"></a>

**Per avviare un cluster e inviare un passaggio JAR personalizzato con AWS CLI**

Per avviare un cluster e inviare un passaggio JAR personalizzato con AWS CLI, digitare il `create-cluster` sottocomando con il `--steps` parametro.
+ Per avviare un cluster e inviare un passaggio JAR personalizzato, digita il seguente comando, sostituiscilo *myKey* con il nome della tua coppia di key pair EC2 e sostituiscilo *amzn-s3-demo-bucket* con il nome del tuo bucket.

  ```
  aws emr create-cluster --name "Test cluster" --release-label emr-7.12.0 \
  --applications Name=Hue Name=Hive Name=Pig --use-default-roles \
  --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 \
  --steps Type=CUSTOM_JAR,Name="Custom JAR Step",ActionOnFailure=CONTINUE,Jar=pathtojarfile,Args=["pathtoinputdata","pathtooutputbucket","arg1","arg2"]
  ```
**Nota**  
I caratteri di continuazione della riga Linux (\$1) sono inclusi per questioni di leggibilità. Possono essere rimossi o utilizzati nei comandi Linux. Per Windows, rimuovili o sostituiscili con un accento circonflesso (^).

  Quando specifichi il numero di istanze senza il parametro `--instance-groups`, viene avviato un singolo nodo primario e le istanze rimanenti vengono avviate come nodi principali. Tutti i nodi utilizzano il tipo di istanza specificato nel comando.
**Nota**  
Se in precedenza non sono stati creati il ruolo del servizio Amazon EMR predefinito e il profilo dell'istanza EC2, digita `aws emr create-default-roles` per crearli prima di digitare il sottocomando `create-cluster`.

  Per ulteriori informazioni sull'utilizzo dei comandi Amazon EMR in AWS CLI, consulta. [https://docs.aws.amazon.com/cli/latest/reference/emr](https://docs.aws.amazon.com/cli/latest/reference/emr)

## Dipendenze da terze parti
<a name="emr-custom-jar-dependency"></a>

A volte può essere necessario MapReduce includerli nel classpath da utilizzare con JARs il programma. Ci sono due possibilità per farlo:
+ Includere l'`--libjars s3://URI_to_JAR` nelle opzioni di fase per la procedura in [Avvio di un cluster e invio di un passaggio JAR personalizzato con AWS CLI](#emr-dev-create-jar-cli).
+ Avvia il cluster con un'impostazione `mapreduce.application.classpath` modificata in `mapred-site.xml`. Utilizza la classificazione della configurazione `mapred-site`. Per creare il cluster con lo step using AWS CLI, questo dovrebbe essere il seguente:

  ```
  aws emr create-cluster --release-label emr-7.12.0 \
  --applications Name=Hue Name=Hive Name=Pig --use-default-roles \
  --instance-type m5.xlarge --instance-count 2  --ec2-attributes KeyName=myKey \
  --steps Type=CUSTOM_JAR,Name="Custom JAR Step",ActionOnFailure=CONTINUE,Jar=pathtojarfile,Args=["pathtoinputdata","pathtooutputbucket","arg1","arg2"] \
  --configurations https://s3.amazonaws.com/amzn-s3-demo-bucket/myfolder/myConfig.json
  ```

  `myConfig.json`:

  ```
  [
      {
        "Classification": "mapred-site",
        "Properties": {
          "mapreduce.application.classpath": "path1,path2"
        }
      }
    ]
  ```

  L'elenco dei percorsi separati da virgole dovrebbe essere aggiunto al percorso della classe JVM per ogni attività.