有谁知道如何使用Pipes API链接两个MapReduce? 我已经使用JAVA在之前的项目中链接了两个MapReduce,但今天我需要使用C ++。不幸的是,我还没有在C ++中看到任何例子。
有人已经完成了吗?这不可能吗?
答案 0 :(得分:1)
答案 1 :(得分:0)
我终于设法让Hadoop Pipes工作了。这里有一些步骤可以在src / examples / pipes / impl /.
中使用wordcount示例我有一个有效的Hadoop 1.0.4群集,按照文档中描述的步骤进行配置。
要编写Pipes作业,我必须包含已在初始包中编译的管道库。这可以在32位和64位架构的C ++文件夹中找到。但是,我必须重新编译它,可以按照这些步骤完成:
# cd /src/c++/utils
# ./configure
# make install
# cd /src/c++/pipes
# ./configure
# make install
这两个命令将为我们的体系结构编译库,并在/ src / c ++中创建一个包含已编译文件的'install'目录。
此外,我必须添加−lssl
和−lcrypto
链接标志来编译我的程序。没有它们,我在运行时遇到了一些身份验证异常。
感谢这些步骤,我能够运行wordcount-simple,可以在src / examples / pipes / impl /目录中找到。
然而,要运行更复杂的示例wordcount-nopipe,我必须做一些其他的观点。由于记录阅读器和记录编写器的实现,我们直接从本地文件系统读取或写入。这就是我们必须使用file://指定输入和输出路径的原因。而且,我们必须使用专用的InputFormat组件。因此,要启动此作业,我必须使用以下命令:
# 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
此外,如果我们查看1.0.4版本的org.apache.hadoop.mapred.pipes.Submitter.java,如果使用InputFormat选项,当前实现将禁用指定非Java记录阅读器的功能。
因此,您必须对第setIsJavaRecordReader(job,true);
行进行评论才能实现,并重新编译核心资源以考虑此更改(http://web.archiveorange.com/archive/v/RNVYmvP08OiqufSh0cjR)。
if(results.hasOption("−inputformat")) {
setIsJavaRecordReader(job, true);
job.setInputFormat(getClass(results, "−inputformat", job,InputFormat.class));
}