Wordcount C++Hadoop管道不工作

Wordcount C++ Hadoop pipes does not work

本文关键字:工作 管道 C++Hadoop Wordcount      更新时间:2023-10-16

我正试图在C++中运行wordcount的示例,如下链接所述:在C++中运行WordCount程序。编译工作正常,但当我尝试运行程序时,出现了一个错误:

bin/hadoop管道-conf/dev/word.xml-输入testtile.txt-输出wordcount out
2006年6月11日14:23:40 WARN地图。JobClient:没有作业jar文件集。可能找不到
用户类。请参见JobConf(类)或JobConf#setJar(字符串)
2006年6月11日14:23:40信息映射。FileInputFormat:要处理的总输入路径:1
2006年6月11日14:23:40信息映射。JobClient:正在运行作业:job_201106061207_007
2006年6月11日14:23:41映射信息。JobClient:映射0%减少0%
2006年6月11日14:23:53信息映射。JobClient:任务Id:attempt_201106061207_0007_m_0000000_0,状态:失败
java.io.IOException
网址:org.apache.hadop.mapred.pipes.OutputHandler.waitForAuthentication(OutputHandler.java:188)网址:org.apache.hadop.mapred.pipes.Application.waitForAuthentication(Application.java:194)网址:org.apache.hadop.mapred.pipes.Application.(Application.java:149)网址:org.apache.hadop.mapred.pipes.PipesMapRunner.run(PipesMapRuner.java:68)网址:org.apache.hadop.mapred.MapTask.runOldMapper(MapTask.java:435)网址:org.apache.hadop.mapred.MapTask.run(MapTask.java:371)网址:org.apache.hadop.mapred.Child$4.run(Child.java:259)位于java.security.AccessController.doPrivileged(本机方法)位于javax.security.auth.Subject.doAs(Subject.java:416)网址:org.apache.hadop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059)网址:org.apache.hadop.mapred.Child.main(Child.java:253)
attempt_201106061207_0007_m_0000000_0:服务器无法进行身份验证。退出

我在Fedora上的两个节点上运行Hadoop,并遵循了该链接中的配置说明:在多节点集群上运行Hadoop。我用这个命令尝试了Hadoop的wordcount示例:

bin/hoop-jar hadoop-examples-0.20.03.0.jar wordcount testtile.txt wordcount out

这个命令运行良好。这就是为什么我不明白为什么我的程序不起作用。所以我希望有人知道我做错了什么,或者是否有人已经解决了这个错误。

我不知道是否必须以这种方式回答我的问题,或者编辑我的问题。不管怎样,我找到了解决方案,我只想告诉所有会遇到同样错误的人。

经过几天的研究和尝试,我明白Fedora和C++在Hadoop的64位上并不匹配。我试着编译Hadoop的wordcount C++,并在wiki中进行了类似蚂蚁的解释。但是ant给我带来了一些错误:libssl和stdint。

首先,如果你在Fedora上,你必须将-lcrypto添加到.configure中的LIBS变量中。这就是为什么现在链接到libssl时,必须在这些平台上明确说明对libcrypto的依赖性。(参见Fedora上的bug)。

第二个问题:ant在C++文件中产生了很多错误:要解决这个问题,只需在文件顶部添加一个include:stdint.h

然后构建成功。然后我试着在Hadoop集群上运行wordcount示例,它有效,而我的没有。我预计这个问题来自我刚刚纠正的库,我是对的:我试图用Hadoop安装目录中的库运行Hadoop示例,但它不起作用,我得到了同样的错误。

这可以解释为ant重新编译Hadoop所需的C++库(我做了更正)并使用它,而不是在Hadoop安装目录中提供库。