远程执行Hadoop作业时在减少阶段的异常

时间:2013-04-26 20:30:43

标签: hadoop

我有一个运行1.0.4的小型10节点hadoop集群,我正在设置它,所以我能够从网络上不是NameNode的机器上提交作业。我有一个简单的示例设置,我使用ToolRunner执行作业,手动构建JobConf,并使用JobClient.submitJob()提交。当我从NameNode运行它时,一切都按预期工作。

当我从网络中的任何其他节点运行时,提交作业并成功完成所有映射任务,但所有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)

我认为这意味着reduce任务无法从映射器中找到输出。我很确定我在某个地方错过了一个配置值,但我无法弄清楚哪些(我已经尝试mapred.local.dirhadoop.tmp.dir没有成功)。有没有人确切知道上述消息的含义以及如何修复它,或者知道从NameNode以外的机器执行作业的简单方法?

修改:我认为这也可能与权限有关。 hadoop用户几乎拥有hdfs上的所有文件,但是当我在另一台计算机上登录时,它就是一个不同的用户名。我尝试在群集中的所有节点上更新mapred-site.xml,类似于this,并将JobClient.submitJob()包裹在UserGroupInformation.doAs()内,但我仍然遇到类似于以下内容的错误:< / p>

SEVERE: PriviledgedActionException as:hadoop via oren cause:org.apache.hadoop.ipc.RemoteException: User: oren is not allowed to impersonate hadoop

3 个答案:

答案 0 :(得分:0)

您是否检查过托管本地目录的磁盘空间不足?

答案 1 :(得分:0)

将此属性添加到core-site.xml并重新启动群集:

<name>hadoop.proxyuser.myhttpfsuser.groups</name>
<value>oren</value>

另外请确保您已经为“其他人”打开了dir权限。

答案 2 :(得分:0)

是的,我想我知道发生了什么......

在尝试从reduce作业中读取地图输出时,应使用FQDN-ish样式来构建路径。

类似于hdfs://master:534110/user/hduser/map_0.out,也许你只是使用/map_0.out而且例外没有帮助。

HTH,