我正在运行运行MRv1(CDH5)与LocalFileSystem配对的测试集群,并且我能够运行作业的唯一用户是mapred(因为mapred是启动jobtracker/tasktracker守护进程的用户).以任何其他用户身份提交作业时,作业会失败,因为jobtracker/tasktracker无法在.staging目录下找到job.jar.
当与LocalFileSystem配对时,我与YARN(MRv2)有完全相同的问题,即当由'yarn'以外的用户提交作业时,应用程序主机无法在.staging目录下找到job.jar.
在检查提交作业的用户的.staging目录时,我发现job.jar存在于.staging //目录下,但是和.staging目录的权限设置为700(drwx ------)和因此,应用程序master/tasktracker无法访问job.jar和支持文件.
我们使用LocalFileSystem运行测试集群,因为我们在生产设置中仅使用与OCFS配对的Hadoop项目的MapReduce部分.
在这方面的任何援助都将非常有帮助.
小智 1
您需要为集群中的每个用户设置一个暂存目录。这并不像听起来那么复杂。
检查以下属性:
<property>
<name>hadoop.tmp.dir</name>
<value>/tmp/hadoop-${user.name}</value>
<source>core-default.xml</source>
</property>
Run Code Online (Sandbox Code Playgroud)
这基本上为每个用户设置了一个 tmp 目录。
将其绑定到您的暂存目录:
<property>
<name>mapreduce.jobtracker.staging.root.dir</name>
<value>${hadoop.tmp.dir}/mapred/staging</value>
<source>mapred-default.xml</source>
</property>
Run Code Online (Sandbox Code Playgroud)
让我知道这是否有效或者是否已经以这种方式设置。
如果我没记错的话,这些属性应该在yarn-site.xml 中。