我有一个运行 1.0.4 的小型 10 节点 hadoop 集群,我正在尝试对其进行设置,以便能够从网络上不是 NameNode 的机器提交作业。我有一个简单的示例设置,我在其中使用 执行作业、手动ToolRunner
构建并使用. 当我从 NameNode 运行它时,一切都按预期工作。JobConf
JobClient.submitJob()
当我从网络中的任何其他节点运行时,作业已提交并且所有映射任务都成功完成,但所有 reduce 任务都失败,但出现以下异常:
org.apache.hadoop.util.DiskChecker$DiskErrorException: Could not find output/map_0.out in any of the configured local directories
at org.apache.hadoop.fs.LocalDirAllocator$AllocatorPerContext.getLocalPathToRead(LocalDirAllocator.java:429)
at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathToRead(LocalDirAllocator.java:160)
at org.apache.hadoop.mapred.MapOutputFile.getInputFile(MapOutputFile.java:161)
at org.apache.hadoop.mapred.ReduceTask.getMapFiles(ReduceTask.java:220)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:398)
at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121)
at org.apache.hadoop.mapred.Child.main(Child.java:249)
我认为这意味着减少任务无法找到映射器的输出。我相当确定我只是在某个地方丢失了一个配置值,但我不知道是哪些(我已经尝试过mapred.local.dir
但hadoop.tmp.dir
没有成功)。有谁知道上述消息的确切含义以及如何修复它,或者知道从 NameNode 以外的机器执行作业的简单方法?
编辑:我认为这也可能与权限有关。用户几乎拥有 hdfs 上的hadoop
所有文件,但是当我在另一台机器上登录时,它是不同的用户名。我已经尝试更新mapred-site.xml
集群中与此类似的所有节点,并包裹JobClient.submitJob()
在 a 中,UserGroupInformation.doAs()
但我仍然收到类似于以下内容的错误:
SEVERE: PriviledgedActionException as:hadoop via oren cause:org.apache.hadoop.ipc.RemoteException: User: oren is not allowed to impersonate hadoop