5

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

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

4

2 回答 2

1

使用Oozie工作流。它允许您将Pipes与通常的 MapReduce 作业一起使用。

于 2013-09-23T19:21:27.583 回答
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++ 中创建一个包含已编译文件的“安装”目录。

此外,我必须添加−lssl−lcrypto链接标志来编译我的程序。没有它们,我在运行时遇到了一些身份验证异常。多亏了这些步骤,我才能运行 src/examples/pipes/impl/ 目录中的 wordcount-simple。

然而,为了运行更复杂的例子 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));
}
于 2014-02-18T13:31:07.350 回答