Endlich gelingt es mir, Hadoop Pipes funktionieren zu lassen. Hier einige Schritte, um die Wordcount-Beispiele in src/examples/pipes/impl/verfügbar zu machen.
Ich habe einen funktionierenden Hadoop 1.0.4-Cluster, der gemäß den in der Dokumentation beschriebenen Schritten konfiguriert wurde.
Um einen Pipes-Job zu schreiben, musste ich die Pipes-Bibliothek einschließen, die bereits im ursprünglichen Paket kompiliert wurde. Dies kann in C++ - Ordner für 32-Bit- und 64-Bit-Architektur gefunden werden. Allerdings hatte ich es neu zu kompilieren, die im Anschluss an diese Schritte getan werden kann:
# cd /src/c++/utils
# ./configure
# make install
# cd /src/c++/pipes
# ./configure
# make install
Diese beiden Befehle die Bibliothek für unsere Architektur kompiliert und ein ‚install‘ Verzeichnis in/src/C++ enthält die kompilierten Dateien erstellen.
Darüber hinaus musste ich −lssl
und −lcrypto
Link Flags hinzufügen, um mein Programm zu kompilieren. Ohne sie habe ich zur Laufzeit eine Authentifizierungsausnahme festgestellt. Dank dieser Schritte konnte ich Wordcount-Simple ausführen, das in src/examples/pipes/impl/directory gefunden werden kann.
Um jedoch das komplexere Beispiel Wordcount-Nopipe auszuführen, musste ich einige andere Punkte machen. Aufgrund der Implementierung des Datensatzlesers und Datensatzschreibers lesen oder schreiben wir direkt aus dem lokalen Dateisystem. Deshalb müssen wir unseren Eingabe- und Ausgabepfad mit file: // angeben. Außerdem müssen wir eine dedizierte InputFormat-Komponente verwenden. So um diesen Job zu starten ich den folgenden Befehl verwenden musste:
# 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
Außerdem, wenn wir bei org.apache.hadoop.mapred.pipes.Submitter.java von 1.0.4 Version sehen, die aktuellen Die Implementierung deaktiviert die Möglichkeit, einen Nicht-Java-Datensatzleser anzugeben, wenn Sie die InputFormat-Option verwenden. Daher müssen Sie die Zeile setIsJavaRecordReader(job,true);
kommentieren, um die Kernquellen zu ermöglichen und neu zu kompilieren, um diese Änderung zu berücksichtigen (http://web.archiveorange.com/archive/v/RNVYmvP08OiqufSh0cjR).
if(results.hasOption("−inputformat")) {
setIsJavaRecordReader(job, true);
job.setInputFormat(getClass(results, "−inputformat", job,InputFormat.class));
}
Hadoop Pipes ist die C++ - Schnittstelle, um Ihren Code in C++ zu schreiben. In der Tat rede ich nicht über Unix-Rohre. – Ericswed
Obwohl ich das vor langer Zeit versucht habe ... das ist ein Link von meinen Lesezeichen, die beim letzten Mal geholfen haben - http://www.manning-sandbox.com/message.jspa?messageID=99443, wenn ich mich richtig erinnere, habe ich die Option benutzt 2 in der Antwort. – NiladriBose