hadoop mapreduce在启用权限管理时失败

jdgnovmf  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(403)

我在hadoop集群中启用了权限管理,但是在用pig发送作业时遇到了问题。以下是场景:
1-我有hadoop/hadoop用户
2-我有运行pig脚本的myuserapp/myuserapp用户。
3-我们将路径/myapp设置为myuserapp所有
4-我们将pig.temp.dir设置为/myapp/pig/tmp
但是,当我们尝试运行作业时,出现以下错误:

job_201303221059_0009    all_actions,filtered,raw_data    DISTINCT    Message: Job failed! Error - Job initialization failed: org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security.AccessControlException: Permission denied: user=realtime, access=EXECUTE, inode="system":hadoop:supergroup:rwx------

hadoop jobtracker需要此权限才能定位其服务器。
我的hadoop策略如下所示:

<property>
<name>security.client.datanode.protocol.acl</name>
<value>hadoop,myuserapp supergroup,myuserapp</value>
</property>
<property>
<name>security.inter.tracker.protocol.acl</name>
<value>hadoop,myuserapp supergroup,myuserapp</value>
</property>
<property>
<name>security.job.submission.protocol.acl</name>
<value>hadoop,myuserapp supergroup,myuserapp</value>
<property>

我的hdfs-site.xml:

<property>
<name>dfs.permissions</name>
<value>true</value>
</property>

<property>
 <name>dfs.datanode.data.dir.perm</name>
 <value>755</value>
</property>

<property>
 <name>dfs.web.ugi</name>
 <value>hadoop,supergroup</value>
</property>

我的核心网站:

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

最后是我的mapred-site.xml

...
<property>
 <name>mapred.local.dir</name>
 <value>/tmp/mapred</value>
</property>

<property>
 <name>mapreduce.jobtracker.jobhistory.location</name>
 <value>/opt/logs/hadoop/history</value>
</property>

是否缺少配置?如何处理在受限hdfs集群中运行作业的多个用户?

qltillow

qltillow1#

你的问题可能是临时目录。尝试将此属性添加到mapred-site.xml:

<property>
    <name>mapreduce.jobtracker.staging.root.dir</name>
    <value>/user</value>
</property>

然后确保提交用户(例如“realtime”)有一个主目录(例如“/user/realtime”),并且他们拥有它。

zxlwwiss

zxlwwiss2#

fair调度器被设计为以用户身份运行map reduce作业,它为用户/组创建分离的池,但具有共享资源。乍一看,这个调度程序有一些问题与某些目录上的权限有关,不允许其他用户在运行作业所需的位置执行/写入。
因此,一种解决方案是使用容量调度器:

<property>
 <name>mapred.jobtracker.taskScheduler</name>
 <value>org.apache.hadoop.mapred.CapacityTaskScheduler</value>
</property>

容量调度器,使用多个命名队列,其中每个队列都有可配置数量的map和reduce插槽。容量的一个好处是可以限制每个用户运行任务的百分比,这样用户就可以共享一个有配额的集群。

相关问题