链接Hadoop MapReduce与管道(c++)

Chaining Hadoop MapReduce with Pipes (C++)

本文关键字:c++ 管道 Hadoop MapReduce 链接      更新时间:2023-10-16

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

已经有人做过了吗?不可能吗?

使用Oozie Workflow。它允许您将pipe与通常的MapReduce作业一起使用

我终于让Hadoop Pipes工作了。这里有一些步骤,使作品的wordcount示例可以在src/examples/pipes/impl/.

我有一个工作的Hadoop 1.0.4集群,按照文档中描述的步骤进行配置。

要编写Pipes作业,我必须在初始包中包含已经编译的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. submit .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));
}