我试图在C ++中运行wordcount的例子,就像这个链接描述的方法: Running the WordCount program in C++。编译工作正常,但当我尝试运行我的程序时,出现了一个错误:
bin / hadoop pipes -conf ../dev/word.xml -input testtile.txt -output wordcount-out
11/06/06 14:23:40 WARN mapred.JobClient:没有工作jar文件集。用户类可能无法找到。请参阅JobConf(Class)或JobConf#setJar(String) 11/06/06 14:23:40 INFO mapred.FileInputFormat:要处理的总输入路径:1
11/06/06 14:23:40 INFO mapred.JobClient:正在运行的工作:job_201106061207_0007
11/06/06 14:23:41 INFO mapred.JobClient:地图0%减少0%
11/06/06 14:23:53 INFO mapred.JobClient:任务ID:attempt_201106061207_0007_m_000000_0,状态:未通过 java.io.IOException的
在org.apache.hadoop.mapred.pipes.OutputHandler.waitForAuthentication(OutputHandler.java:188) 在org.apache.hadoop.mapred.pipes.Application.waitForAuthentication(Application.java:194) 在org.apache.hadoop.mapred.pipes.Application。(Application.java:149) 在org.apache.hadoop.mapred.pipes.PipesMapRunner.run(PipesMapRunner.java:68) 在org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:435) 在org.apache.hadoop.mapred.MapTask.run(MapTask.java:371) 在org.apache.hadoop.mapred.Child $ 4.run(Child.java:259) at java.security.AccessController.doPrivileged(Native Method) 在javax.security.auth.Subject.doAs(Subject.java:416) 在org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059) 在org.apache.hadoop.mapred.Child.main(Child.java:253)
attempt_201106061207_0007_m_000000_0:服务器无法进行身份验证。离开
我在两个节点上运行Fedora上的Hadoop,我按照该链接的配置说明:Running Hadoop on multi-node cluster。我用该命令尝试了Hadoop的wordcount示例:
bin / hadoop jar hadoop-examples-0.20.203.0.jar wordcount testtile.txt wordcount-out
该命令工作正常。这就是为什么我不明白为什么我的程序不起作用的原因。所以我希望有人知道我做错了什么,或者有人已经解决了这个错误。
答案 0 :(得分:1)
我不知道我是否必须以这种方式回答我的问题,或者编辑我的问题。无论如何,我找到了解决方案,我只是想告诉每个人都会得到同样的错误。
经过几天的研究和尝试,我明白在64位上用于Hadoop的Fedora和C ++并不是一个很好的匹配。我尝试使用ant编译Hadoop wordcount C ++,如wiki中所述。但是ant给我一些错误:libssl和stdint。
首先,如果您使用的是Fedora,则必须将 -lcrypto 添加到 .configure 中的 LIBS 变量中。这是因为在链接到libssl时,必须在这些平台上明确声明对libcrypto的依赖。(参见bug on Fedora)。
第二个问题:ant会产生很多关于C ++文件的错误:要解决这个问题,你只需要在文件顶部添加一个include: stdint.h 。
然后构建成功。我尝试在我的Hadoop集群上运行wordcount示例,它可以工作,而我的没有。我预计这个问题来自我刚刚更正的库,我说得对:我试图用hadoop安装目录中的库运行Hadoop示例,但它没有用,我得到了同样的错误。
这可以解释为ant重新编译Hadoop所需的C ++库(我做了更正)并使用它,而不是库在Hadoop安装目录中提供。