2013-03-16 13 views
5

Czy ktoś wie, jak powiązać dwie MapReduce z Pipes API? Już łańcuch dwóch MapReduce w poprzednim projekcie z JAVA, ale dziś muszę użyć C++. Niestety, nie widziałem żadnych przykładów w C++.Łańcuchowanie Hadoop MapReduce z potokami (C++)

Czy ktoś już to zrobił? Czy to niemożliwe?

+1

Hadoop Pipes to interfejs C++ do pisania kodu w C++. Rzeczywiście, nie mówię o rurach Unix. – Ericswed

+0

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

Odpowiedz

0

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)); 
} 
1

Użyj Oozie Przepływ pracy. To pozwala na use Pipes wraz ze zwykłymi zadaniami MapReduce.

Powiązane problemy