用管道链接hadoop mapreduce(c++)

6ioyuze2  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(512)

有人知道如何用管道api链接两个mapreduce吗?在以前的一个java项目中,我已经链接了两个mapreduce,但是今天我需要使用c++。不幸的是,我没有看到任何c++的例子。
已经有人做了吗?不可能吗?

c9x0cxw0

c9x0cxw01#

我终于设法使hadoop管道工作。下面是使works的wordcount示例在src/examples/pipes/impl/中可用的一些步骤。
我有一个工作的hadoop1.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−可以在src/examples/pipes/impl/目录中找到的简单的。
但是,要运行更复杂的示例wordcount−不,我还得说点别的。由于实现了记录读写器,我们直接从本地文件系统读写。这就是为什么我们必须用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));
}
zrfyljdw

zrfyljdw2#

使用oozie工作流。它允许您将管道与常规mapreduce作业一起使用。

相关问题