【问题标题】:Hadoop jobs fail when submitted by users other than yarn (MRv2) or mapred (MRv1)Hadoop 作业在由 yarn (MRv2) 或 mapred (MRv1) 以外的用户提交时失败
【发布时间】:2014-06-24 15:10:12
【问题描述】:

我正在运行一个运行 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----- -),因此应用程序主/tasktracker 无法访问 job.jar 和支持文件。

我们正在使用 LocalFileSystem 运行测试集群,因为我们在生产设置中仅使用 Hadoop 项目的 MapReduce 部分与 OCFS 配对。

这方面的任何帮助都会非常有帮助。

【问题讨论】:

  • 你能在同一个集群上启动 PIG 或 hive 作业吗?

标签: hadoop hadoop2


【解决方案1】:

您需要为集群中的每个用户设置一个暂存目录。这并不像听起来那么复杂。

检查以下属性:

<property>
<name>hadoop.tmp.dir</name>
<value>/tmp/hadoop-${user.name}</value>
<source>core-default.xml</source>
</property>

这基本上为每个用户设置了一个 tmp 目录。

将此绑定到您的暂存目录:

<property>
<name>mapreduce.jobtracker.staging.root.dir</name>
<value>${hadoop.tmp.dir}/mapred/staging</value>
<source>mapred-default.xml</source>
</property>

让我知道这是否可行,或者是否已经以这种方式设置。

如果我没记错的话,这些属性应该在 yarn-site.xml 中。

【讨论】:

  • 嗨,${user.name} 来自哪里?
  • 从 hadoop-3.0.0/bin 目录我执行 $ ./hdfs dfs -ls /tmp/hadoop-ajajoo/mapred。以下是我得到的回应: ls: `/tmp/hadoop-user/mapred': 没有这样的文件或目录@OleksiiDuzhyi @venkat。有什么建议吗?
【解决方案2】:

这对我有用,我只是在 MR v1 中设置了这个属性:

<property>
    <name>hadoop.security.authorization</name>
    <value>simple</value>
  </property>

请通过这个:

访问控制列表 ${HADOOP_CONF_DIR}/hadoop-policy.xml 为每个 Hadoop 服务定义了一个访问控制列表。每个访问控制列表都有一个简单的格式:

用户和组列表都是以逗号分隔的名称列表。两个列表用空格隔开。

示例:user1,user2 group1,group2。

如果只提供组列表,则在行首添加一个空格,等效于以逗号分隔的用户列表,后跟一个空格,否则不表示仅一组给定用户。

* 的特殊值表示允许所有用户访问该服务。

刷新服务级别授权配置 NameNode 和 JobTracker 的服务级别授权配置可以在不重新启动任何一个 Hadoop 主守护程序的情况下进行更改。集群管理员可以在master节点上修改${HADOOP_CONF_DIR}/hadoop-policy.xml,通过-refreshServiceAcl切换到dfsadmin和mradmin命令分别指示NameNode和JobTracker重新加载各自的配置。

刷新NameNode的服务级授权配置:

$ bin/hadoop dfsadmin -refreshServiceAcl

刷新 JobTracker 的服务级别授权配置:

$ bin/hadoop mradmin -refreshServiceAcl

当然,可以使用 ${HADOOP_CONF_DIR}/hadoop-policy.xml 中的 security.refresh.policy.protocol.acl 属性来限制对某些用户/组刷新服务级别授权配置的能力的访问.

示例 只允许用户 alice、bob 和 mapreduce 组中的用户向 MapReduce 集群提交作业:

<property>
     <name>security.job.submission.protocol.acl</name>
     <value>alice,bob mapreduce</value>
</property>

只允许以属于datanodes组的用户身份运行的DataNodes与NameNode通信:

<property>
     <name>security.datanode.protocol.acl</name>
     <value>datanodes</value>
</property>
Allow any user to talk to the HDFS cluster as a DFSClient:

<property>
     <name>security.client.protocol.acl</name>
     <value>*</value>
</property>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 2019-07-13
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多