W końcu udaje mi się sprawić, że Hadoop Pipes działa. Oto kilka kroków, które sprawiają, że przykłady wordcount są dostępne w src/examples/pipes/impl /.
Mam działający klaster Hadoop 1.0.4, skonfigurowany zgodnie z krokami opisanymi w dokumentacji.
Aby napisać pracę Pipes musiałem dołączyć bibliotekę przewodów, która jest już skompilowana w początkowym pakiecie. Można go znaleźć w folderze C++ dla architektury 32-bitowej i 64-bitowej. Jednak musiałem go skompilować, co można zrobić po tych krokach:
# cd /src/c++/utils
# ./configure
# make install
# cd /src/c++/pipes
# ./configure
# make install
Te dwie komendy będzie skompilować bibliotekę dla naszej architektury i stworzyć „zainstalować” katalog w/src/C++ zawierającym skompilowane pliki.
Co więcej, musiałem dodać flagi linków −lssl
i −lcrypto
, aby skompilować mój program. Bez nich napotkałem wyjątek uwierzytelniania w czasie działania. Dzięki tym krokom udało mi się uruchomić wordcount-simple, który można znaleźć w katalogu src/examples/pipes/impl /.
Jednak, aby uruchomić bardziej złożony przykład wordcount-nopipe, musiałem zrobić kilka innych punktów. Ze względu na implementację czytnika rekordów i programu zapisującego zapis, bezpośrednio odczytujemy lub zapisujemy z lokalnego systemu plików. Dlatego musimy określić naszą ścieżkę wejściową i wyjściową za pomocą pliku: //. Ponadto musimy użyć dedykowanego komponentu InputFormat. Dlatego, aby uruchomić to zadanie musiałem użyć następującego polecenia:
# 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
Ponadto, jeśli spojrzymy na org.apache.hadoop.mapred.pipes.Submitter.java od wersji 1.0.4, prąd implementacja wyłącza możliwość określenia czytnika rekordów innego niż java, jeśli użyto opcji InputFormat. Dlatego musisz skomentować linię setIsJavaRecordReader(job,true);
, aby była możliwa i przekompilować główne źródła, aby uwzględnić tę zmianę (http://web.archiveorange.com/archive/v/RNVYmvP08OiqufSh0cjR).
if(results.hasOption("−inputformat")) {
setIsJavaRecordReader(job, true);
job.setInputFormat(getClass(results, "−inputformat", job,InputFormat.class));
}
Hadoop Pipes to interfejs C++ do pisania kodu w C++. Rzeczywiście, nie mówię o rurach Unix. – Ericswed
Mimo że próbowałem to dawno temu ... to jest link z moich zakładek, które pomogły ostatnio - http://www.manning-sandbox.com/message.jspa?messageID=99443, jeśli dobrze pamiętam, skorzystałem z opcji 2 w odpowiedzi. – NiladriBose