我已经在OS X 10.8上从源代码编译并安装了hadoop 2.5.2。我认为一切顺利,即使编译本地库有点痛苦。
为了验证我的安装,我尝试了像hadoop一样附带的示例:
$ hadoop jar /Users/per/source/hadoop-2.5.2-src/hadoop-dist/target/hadoop-2.5.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.2.jar pi 2 5
让我回来了
Job Finished in 1.774 seconds
Estimated value of Pi is 3.60000000000000000000
所以这似乎表明hadoop至少在工作,我想。
由于我的最终目标是使用管道从C ++程序中使用文件I / O,我还尝试以下作为中间步骤:
$ hdfs dfs -put etc/hadoop input
$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.2.jar grep input output 'dfs[a-z.]+'
这似乎也有效(如产生正确的输出)。
然后,最后,我尝试了wordcount.cpp示例,但这不起作用,虽然我无法理解如何修复它。错误信息非常清楚。
2015-10-21 13:38:33,539 WARN org.apache.hadoop.security.UserGroupInformation: No groups available for user per
2015-10-21 13:38:33,678 INFO org.apache.hadoop.security.JniBasedUnixGroupsMapping: Error getting groups for per: getgrouplist: error looking up group. 5 (Input/output error)
很明显,我不知道文件权限,但是什么?我的hdfs-site.xml文件看起来像这样,我试图完全关闭权限检查。
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.web.ugi</name>
<value>per</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
但我很困惑,因为我至少似乎能够在hdfs中的文件上使用grep(根据上面的内置示例)。
非常感谢任何反馈。我正在以自己的身份运行所有这些,所以我还没有为hadoop创建一个新用户,因为我现在只在笔记本电脑上本地运行它。
编辑:根据以下讨论,使用终端窗口的一些额外输出进行更新:
<snip>
15/10/21 14:47:41 INFO mapred.MapTask: bufstart = 0; bufvoid = 104857600
15/10/21 14:47:41 INFO mapred.MapTask: kvstart = 26214396; length = 6553600
15/10/21 14:47:41 INFO mapred.LocalJobRunner: map task executor complete.
15/10/21 14:47:41 WARN mapred.LocalJobRunner: job_local676909674_0001
java.lang.Exception: java.lang.NullPointerException
at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:462)
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:522)
Caused by: java.lang.NullPointerException
at org.apache.hadoop.mapred.pipes.Application.<init>(Application.java:104)
at org.apache.hadoop.mapred.pipes.PipesMapRunner.run(PipesMapRunner.java:69)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:430)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:342)
<snip>
如果相关,我可以添加更多