1

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

bin/hadoop 管道 -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 信息 mapred.JobClient:映射 0% 减少 0%
11/06/06 14:23:53 信息 mapred.JobClient:任务 ID:尝试_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) 在 java.security.AccessController.doPrivileged( Native Method) at javax.security.auth.Subject.doAs(Subject.java:416) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059) at org.apache.hadoop.mapred.Child。主要(儿童.java:253)
尝试_201106061207_0007_m_000000_0:服务器无法进行身份验证。退出

我在两个节点上的 Fedora 上运行 Hadoop,我按照该链接的配置说明进行操作:在多节点集群上运行 Hadoop。我使用该命令尝试了 Hadoop 的 wordcount 示例:

bin/hadoop jar hadoop-examples-0.20.203.0.jar wordcount testtile.txt wordcount-out

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

4

1 回答 1

1

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

经过几天的研究和尝试,我明白 Fedora 和 C++ on 64bits for Hadoop 不是一个很好的匹配。我尝试用 ant 编译 Hadoop wordcount C++,就像 wiki 中解释的那样。但是 ant 给我一些关于:libssl 和 stdint 的错误。

首先,如果您使用 Fedora,则必须将 -lcrypto 添加.configure中的LIBS变量中。这是因为当链接到 libssl 时,现在必须在这些平台上明确说明对 libcrypto 的依赖。(参见Fedora 上的错误)。

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

然后构建成功。然后我尝试在我的 Hadoop 集群上运行 wordcount 示例,它可以工作,而我的没有。我预计该问题来自我刚刚更正的库,我是对的:我尝试使用 hadoop 安装目录中的库运行 Hadoop 示例,但它不起作用,我得到了同样的错误。

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

于 2011-06-09T09:44:09.983 回答