HadoopPipes編程中C++如何實(shí)現(xiàn)WordCount

本篇文章給大家分享的是有關(guān)Hadoop Pipes編程中C++如何實(shí)現(xiàn)WordCount,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

成都創(chuàng)新互聯(lián)專注于望城網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供望城營銷型網(wǎng)站建設(shè),望城網(wǎng)站制作、望城網(wǎng)頁設(shè)計(jì)、望城網(wǎng)站官網(wǎng)定制、微信小程序定制開發(fā)服務(wù),打造望城網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供望城網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

Hadoop雖然用java實(shí)現(xiàn),但是同樣可以支持其他語言的Map和Reduce。由于需要學(xué)習(xí)C++方面的Hadoop實(shí)現(xiàn),所以最近一直在研究Hadoop Streaming編程,其中Hadoop pipes允許C++程序員編寫mapreduce程序,它允許用戶混用C++和Java的RecordReader, Mapper, Partitioner,Rducer和RecordWriter等五個(gè)組件,下面是我的搭建以及遇到的問題。

一般這種搭建的流程都是從官網(wǎng)看比較好,參考http://wiki.apache.org/hadoop/C++WordCount,里面的流程簡(jiǎn)單易懂。進(jìn)入hadoop的安裝目錄,執(zhí)行:

ant -Dcompile.c++=yes examples

根據(jù)錯(cuò)誤提示,安裝ant:

 sudo apt-get install ant

下面是源源不斷的錯(cuò)誤以及源源不斷的解決辦法。。。

Error1:/build.xml:634: Execute failed: java.io.IOException: Cannot run program "autoreconf" (in directory "/home/hadoop/hadoop-1.2.1/src/native"): error=2, No such file or directory

Solution1:根據(jù)報(bào)錯(cuò)是由于沒有安裝automake工具,所以執(zhí)行:

 sudo apt-get install automake

Error2:build.xml:634: exec returned: 1

Solution2:http://stackoverflow.com/questions/23112074/building-hadoop-1-2-1-core-jar-using-ant-failed,執(zhí)行:

sudo apt-get install libtool

Error3:build.xml:2164: exec returned: 255

Solution3:forum.hadoop.tw/viewtopic.php?f=7&t=37970,參考里面的實(shí)現(xiàn)步驟。

1)安裝g++

sudo apt-get install g++

2)編譯wordcount.cpp

g++ -I/home/hadoop/hadoop-1.2.1/c++/Linux-i386-32/include -c wordcount.cpp

3)生成可執(zhí)行文件

g++ wordcount.o -o wordcount -L/home/hadoop/hadoop-1.2.1/c++/Linux-i386-32/lib -lnsl -lpthread -lhadooppipes –lhadooputils

Error4:In function `HadoopPipes::BinaryProtocol::createDigest(std::string&, std::string&)':

Solution4:http://blog.sina.com.cn/s/blog_605f5b4f010195w6.html,

Step1:

sudo apt-get install libssl-dev

Step2:

g++ wordcount.o -o wordcount -L/home/hadoop/hadoop-1.2.1/c++/Linux-i386-32/lib -lnsl -lpthread -lhadooppipes -lhadooputils –lcrypto

經(jīng)歷了上面的重重問題,現(xiàn)在終于生成了可執(zhí)行程序WordCount了,然后需要上傳到HDFS,利用可執(zhí)行文件執(zhí)行。下面是命令:

</pre>
hadoop fs -mkdir wordcount/bin

hadoop fs -mkdir wordcount/input

hadoop fs -put wordcount.cpp /user/hadoop/wordcount/input/

hadoop fs -put wordcount /user/hadoop/wordcount/bin/

hadoop pipes -D hadoop.pipes.java.recordreader=true -D hadoop.pipes.java.recordwriter=true -program /user/hadoop/wordcount/bin/wordcount -input /user/hadoop/wordcount/input/ -output /user/hadoop/wordcount/output

其中我以wordcount.cpp為輸入文件,將可執(zhí)行文件上傳到bin目錄,輸出目錄是output。

執(zhí)行的過程中又遇到問題:

Error5:java.io.IOException

at org.apache.hadoop.mapred.pipes.OutputHandler.waitForAuthentication(OutputHandler.java:188)

Solution5:http://blog.csdn.net/sigxxl/article/details/12293435,終于找到同仁了。。。主要的解決方法就是重新編譯生成libhadooppipes.a和libhadooputils.a這兩個(gè)靜態(tài)庫,然后覆蓋原先的靜態(tài)庫。

1)  進(jìn)入hadoop/src/c++/pipes目錄,執(zhí)行./ configure。

Error6:./configure: line 413: test: please: integer expression expected

./configure: line 416: $4: Bad file descriptor

configure: error: check

./configure: line 302: return: please: numeric argument required

./configure: line 312: exit: please: numeric argument required

Solution6:找到configure文件的這一行,一般報(bào)錯(cuò)會(huì)指定這一行的,將as_fn_exit注釋掉,如下:

</pre>
solution:as_fn_error ()

{

as_status=$1; test $as_status -eq 0 && as_status=1

if test "$4"; then

as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack

$as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4

fi

$as_echo "$as_me: error: $2" >&2

#as_fn_exit

$as_status

} # as_fn_error

2)   ./configure

make install(遇到同樣的報(bào)錯(cuò)再次修改configure文件如上)

3)  進(jìn)入hadoop/src/c++/utils,執(zhí)行同樣的步驟

./configure

make install

生成好新的libhadooppipes.a和libhadooputils.a這兩個(gè)靜態(tài)庫和相關(guān)的頭文件之后,將這些文件覆蓋到~/hadoop/c++/Linux-i386-32/ 文件夾中的include目錄和lib目錄中去。重啟hadoop,然后重新運(yùn)行C++程序。

補(bǔ)充:之后我再次編譯的時(shí)候,某次又拋出了error:g++ :error: -lcrypto: No such file or directory

這可急壞我了,多次查證,,原因是沒有找到 libcrypto.so

解決辦法:http://blog.csdn.net/yasi_xi/article/details/8658191

以我自身為例,進(jìn)入到/lib/i386-linux-gnu目錄,ll libcrypto*,查看一下當(dāng)前鏈接情況,結(jié)果是沒有l(wèi)ibcrypto.so,沒有指向libcrypto.so.1.0.0,也就是說,無法在ld中找到,所以添加軟連接:

ln -s /lib/i386-linux-gnu/libssl.so.1.0.0 /lib/libssl.so.1.0.0/libssl.so

ln -s /usr/i386-linux-gnu/libcrypto.so.1.0.0 /lib/libssl.so.1.0.0/libcrypto.so

當(dāng)然,這些libssl.so.1.0.0文件你得自己去找,找不到就去下一個(gè),理論上安裝了openssl就應(yīng)該有的,ok,補(bǔ)充一下,終于不報(bào)錯(cuò)了

再次運(yùn)行,OK。

以上就是Hadoop Pipes編程中C++如何實(shí)現(xiàn)WordCount,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

分享文章:HadoopPipes編程中C++如何實(shí)現(xiàn)WordCount
網(wǎng)址分享:http://muchs.cn/article26/ispejg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、營銷型網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、微信公眾號(hào)、Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)