

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

# 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)