2013-03-16 25 views
5

İki MapReduce'u Pipes API ile nasıl zincirleyeceğini bilen var mı? Zaten JAVA ile önceki bir projede iki MapReduce zinciri var, ancak bugün C++ kullanmam gerekiyor. Maalesef C++ 'da hiç örnek görmedim.Zincirleme ile Hadoop MapReduce (C++)

Birisi zaten yaptı mı? İmkansız mı?

+1

Hadoop Borular, C++ kodunuzu yazmak için C++ arabirimidir. Gerçekten de Unix borularından bahsetmiyorum. – Ericswed

+0

Uzun zaman önce denedim, ancak bu, son kez yardımcı olan yer imlerimden bir bağlantı - http://www.manning-sandbox.com/message.jspa?messageID=99443, eğer düzgün bir şekilde hatırlarsam seçeneği kullandım 2 cevapta. – NiladriBose

cevap

0

Sonunda Hadoop Pipes'ın çalışmasını sağlarım. İşte bazı adımları yapmak için wordcr örnekleri src/samples/pipes/impl /.

Dokümantasyonda açıklanan adımları izleyerek yapılandırılmış çalışan bir Hadoop 1.0.4 kümem var.

Bir Borular işi yazmak için, ilk pakette önceden derlenmiş olan boru kitaplığını eklemeliydim. Bu, hem 32 bit hem de 64 bit mimarisi için C++ klasöründe bulunabilir. Ancak, bu adımları izleyerek yapılabilir ki bunu yeniden derlemek zorunda:

# cd /src/c++/utils 
# ./configure 
# make install 

# cd /src/c++/pipes 
# ./configure 
# make install 

Bu iki komutları bizim mimarisi için kütüphane derlemek ve/src bir ‘install’ dizin oluşturacaktır/C++ derlenmiş dosyaları içeren.

Ayrıca, programımı derlemek için −lssl ve −lcrypto bağlantı bayraklarını eklemeliydim. Bunlar olmadan çalışma zamanında bir kimlik doğrulama istisnasıyla karşılaştım. Bu adımlar sayesinde src/samples/pipes/impl/dizininde bulunabilecek wordcount − basit çalıştı. Bununla birlikte, daha karmaşık bir örnek kelime sayısı − nopipe çalıştırmak için, başka bazı noktalar yapmak zorunda kaldım. Kayıt okuyucusunun ve kayıt yazmacının uygulanmasından dolayı, doğrudan yerel dosya sisteminden okuma veya yazma yapıyoruz. Bu yüzden giriş ve çıkış yolumuzu dosya: // ile belirtmeliyiz. Ayrıca, özel bir InputFormat bileşeni kullanmamız gerekiyor. Böylece, aşağıdaki komutu kullanmak zorunda bu işi başlatmak için: Biz 1.0.4 sürümünün org.apache.hadoop.mapred.pipes.Submitter.java bakarsak, Dahası

# 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

, akım Uygulama, InputFormat seçeneğini kullanırsanız java olmayan bir kayıt okuyucusu belirtme özelliğini devre dışı bırakır. Bu nedenle setIsJavaRecordReader(job,true); hattını yorumlamanız ve bu değişiklikleri hesaba katmak için çekirdek kaynaklarını yeniden derlemeniz gerekmektedir (http://web.archiveorange.com/archive/v/RNVYmvP08OiqufSh0cjR).

if(results.hasOption("−inputformat")) { 
    setIsJavaRecordReader(job, true); 
    job.setInputFormat(getClass(results, "−inputformat", job,InputFormat.class)); 
} 
1

Kullanım Oozie İş Akışı. Her zamanki MapReduce işleriyle birlikte use Pipes'a izin verir.