本篇文章给大家分享的是有关Hadoop管道编程中c++如何实现WordCount,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
Hadoop虽然用java实现,但是同样可以支持其他语言的Map和Reduce。由于需要学习c++方面的Hadoop实现,所以最近一直在研究Hadoop流媒体编程,其中Hadoop管道允许c++程序员编写mapreduce程序,它允许用户混用c++和java的RecordReader,映射器,分割者,Rducer和RecordWriter等五个组件,下面是我的搭建以及遇到的问题。
一般这种搭建的流程都是从官网看比较好,参考http://wiki.apache.org/hadoop/C + + WordCount,里面的流程简单易懂。进入Hadoop的安装目录,执行:
ant -Dcompile.c + +=yes 示例
根据错误提示,安装ant:
<>之前,sudo apt-get install 蚂蚁下面是源源不断的错误以及源源不断的解决办法…
Error1:/build . xml: 634:执行失败:. io .IOException:不能运行程序“autoreconf"(在目录“/home/hadoop/hadoop-1.2.1/src/native"):错误=2,没有这样的文件或目录
Solution1:根据报错是由于没有安装automake工具,所以执行:
<>之前,sudo apt-get install automakeError2:构建。xml: 634: exec返回:1
Solution2: http://stackoverflow.com/questions/23112074/building-hadoop-1-2-1-core-jar-using-ant-failed,执行:
sudo apt-get install libtool
Error3: build . xml: 2164: exec返回:255
环境:forum.hadoop.tw/viewtopic.php ? f=7, t=37970,参考里面的实现步骤。
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)生成可执行文件
g++, wordcount.o -o wordcount - l/home/hadoop/hadoop-1.2.1/c++/Linux-i386-32/lib -lnsl -lpthread -lhadooppipes -lhadooputils
Error4:函数的HadoopPipes:: BinaryProtocol:: createDigest (std:: string& std:: string&) & # 39;:
Solution4: http://blog.sina.com.cn/s/blog_605f5b4f010195w6.html
步骤1:
sudo apt-get install libssl-dev
步骤2:
g++, wordcount.o -o wordcount - l/home/hadoop/hadoop-1.2.1/c++/Linux-i386-32/lib -lnsl -lpthread -lhadooppipes -lhadooputils -lcrypto
经历了上面的重重问题,现在终于生成了可执行程序WordCount了,然后需要上传到HDFS,利用可执行文件执行。下面是命令:
& lt;/pre> hadoop fs  -mkdir wordcount/bin hadoop fs  -mkdir wordcount/输入 hadoop fs  -put wordcount.cpp /user/hadoop/wordcount/输入/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/输入/,-output /user/hadoop/wordcount/输出
其中我以wordcount.cpp为输入文件,将可执行文件上传到本目录,输出目录是输出。
执行的过程中又遇到问题:
Error5: . io .在org.apache.hadoop.mapred.pipes.OutputHandler.waitForAuthentication IOException
(OutputHandler.java: 188)
Solution5: http://blog.csdn.net/sigxxl/article/details/12293435,终于找到同仁了…主要的解决方法就是重新编译生成libhadooppipes.a和libhadooputils.a这两个静态库,然后覆盖原先的静态库。
1),进入hadoop/src/c++/管道目录,执行。/configure .
Error6:。/配置:413行:测试:请:整数表达式将
。美元/配置:416行:4:坏的文件描述符
配置:错误:检查
。/配置:302行:返回:请:数值参数要求
。/配置:312行:出口:请:数值参数要求
Solution6:找到配置文件的这一行,一般报错会指定这一行的,将as_fn_exit注释掉,如下:
& lt;/pre> 解决方案:as_fn_error () { as_status=1美元;,test as_status 美元;-eq 0,,, as_status=1 if test “4美元,然后 as_lineno=$ {as_lineno产生绯闻;3美元,},as_lineno_stack=as_lineno_stack=as_lineno_stack美元 as_echo 美元;“美元as_me: $ {as_lineno - $ LINENO}:,错误:,“2美元,祝辞,4美元 fi as_echo 美元;“美元as_me:错误:,“2美元,祝辞,2 # as_fn_exit as_status美元 },#,as_fn_error
2),,。/配置