用管道链接Hadoop MapReduce(C ++)

时间:2013-03-16 20:21:01

标签: c++ hadoop mapreduce chain

有谁知道如何使用Pipes API链接两个MapReduce? 我已经使用JAVA在之前的项目中链接了两个MapReduce,但今天我需要使用C ++。不幸的是,我还没有在C ++中看到任何例子。

有人已经完成了吗?这不可能吗?

2 个答案:

答案 0 :(得分:1)

使用Oozie工作流程。它允许您use Pipes以及通常的MapReduce作业。

答案 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));
}