Hadoop管道编程中c++如何实现WordCount

  介绍

本篇文章给大家分享的是有关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  automake

Error2:构建。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),,。/配置

Hadoop管道编程中c++如何实现WordCount