有人知道如何用管道api链接两个mapreduce吗?在以前的一个java项目中,我已经链接了两个mapreduce,但是今天我需要使用c++。不幸的是,我没有看到任何c++的例子。已经有人做了吗?不可能吗?
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).
−lssl
−lcrypto
# 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
setIsJavaRecordReader(job,true);
if(results.hasOption("−inputformat")) { setIsJavaRecordReader(job, true); job.setInputFormat(getClass(results, "−inputformat", job,InputFormat.class)); }
zrfyljdw2#
使用oozie工作流。它允许您将管道与常规mapreduce作业一起使用。
2条答案
按热度按时间c9x0cxw01#
我终于设法使hadoop管道工作。下面是使works的wordcount示例在src/examples/pipes/impl/中可用的一些步骤。
我有一个工作的hadoop1.0.4集群,按照文档中描述的步骤进行配置。
要编写pipes作业,我必须包含已在初始包中编译的pipes库。这可以在32位和64位体系结构的c++文件夹中找到。但是,我必须重新编译它,可以按照以下步骤进行:
这两个命令将为我们的体系结构编译库,并在/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).zrfyljdw2#
使用oozie工作流。它允许您将管道与常规mapreduce作业一起使用。