

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.<br />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.<br />Tipo: String<br />Impostazione predefinita: nessuna<br />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.<br />Tipo: String<br />Impostazione predefinita: nessuna<br />Vincolo: URI<br />Impostazione predefinita: se il percorso non è specificato, Amazon EMR carica i dati nel percorso specificato da `input`. | Sì | 
| -mapper | Nome del mappatore eseguibile.<br />Tipo: String<br />Impostazione predefinita: nessuna | Sì | 
| -reducer | Nome del riduttore eseguibile.<br />Tipo: String<br />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).<br />Tipo: String<br />Impostazione predefinita: nessuna<br />Vincoli: [URI]\#[nome symlink da creare nella directory di lavoro]  | No | 
| -cacheArchive | File JAR da estrarre nella directory di lavoro<br />Tipo: String<br />Impostazione predefinita: nessuna<br />Vincoli: [URI]\#[nome directory symlink da creare nella directory di lavoro]  | No | 
| -combiner | Combina risultati<br />Tipo: String<br />Impostazione predefinita: nessuna<br />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)
```