Finalmente riesco a far funzionare Hadoop Pipes. Ecco alcuni passaggi per rendere funzionanti gli esempi di wordcount disponibili in src/examples/pipes/impl /.
Ho un cluster Hadoop 1.0.4 funzionante, configurato seguendo i passaggi descritti nella documentazione.
Per scrivere un lavoro Pipes ho dovuto includere la libreria di pipe che è già stata compilata nel pacchetto iniziale. Questo può essere trovato nella cartella C++ per l'architettura a 32 e 64 bit. Tuttavia, ho dovuto ricompilare esso, che può essere fatto seguendo questi passaggi:
# cd /src/c++/utils
# ./configure
# make install
# cd /src/c++/pipes
# ./configure
# make install
Questi due comandi compilare la libreria per la nostra architettura e creare una directory ‘install’ in/src/C++ che contiene i file compilati.
Inoltre, ho dovuto aggiungere −lssl
e −lcrypto
flag di collegamento per compilare il mio programma. Senza di loro ho incontrato alcune eccezioni di autenticazione al momento dell'esecuzione. Grazie a questi passaggi sono stato in grado di eseguire wordcount-simple che può essere trovato nella directory src/examples/pipes/impl /.
Tuttavia, per eseguire l'esempio più complesso di wordcount-nopipe, ho dovuto fare altri punti. A causa dell'implementazione del lettore di record e dello scrittore di record, stiamo direttamente leggendo o scrivendo dal file system locale. Ecco perché dobbiamo specificare il nostro percorso di input e output con file: //. Inoltre, dobbiamo utilizzare un componente InputFormat dedicato. Così, per lanciare questo lavoro ho dovuto utilizzare il seguente comando:
# bin/hadoop pipes −D hadoop.pipes.java.recordreader=false −D hadoop.pipes.java.recordwriter=false −libjars hadoop−1.0.4/build/hadoop−test−1.0.4.jar −inputformat org.apache.hadoop.mapred.pipes.WordCountInputFormat −input file:///input/file −output file:///tmp/output −program wordcount−nopipe
Inoltre, se guardiamo org.apache.hadoop.mapred.pipes.Submitter.java di 1.0.4 versione, la corrente l'implementazione disabilita la possibilità di specificare un lettore di record non java se si utilizza l'opzione InputFormat. Pertanto, è necessario commentare la riga setIsJavaRecordReader(job,true);
per rendere possibile e ricompilare le origini principali per tenere conto di questa modifica (http://web.archiveorange.com/archive/v/RNVYmvP08OiqufSh0cjR).
if(results.hasOption("−inputformat")) {
setIsJavaRecordReader(job, true);
job.setInputFormat(getClass(results, "−inputformat", job,InputFormat.class));
}
Hadoop Pipes è l'interfaccia C++ per scrivere il codice in C++. In effetti, non sto parlando di pipe Unix. – Ericswed
Anche se ci ho provato tanto tempo fa ... questo è un link dai miei preferiti che ha aiutato la volta scorsa - http://www.manning-sandbox.com/message.jspa?messageID=99443, se ricordo bene ho usato l'opzione 2 nella risposta. – NiladriBose