【问题标题】:Hadoop DFS permission issue when running job运行作业时的 Hadoop DFS 权限问题
【发布时间】:2016-05-06 12:31:21
【问题描述】:

我收到以下权限错误,我不确定 hadoop 为何尝试写入此特定文件夹:

hadoop jar /usr/lib/hadoop/hadoop-*-examples.jar pi 2 100000
Number of Maps  = 2
Samples per Map = 100000
Wrote input for Map #0
Wrote input for Map #1
Starting Job
org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security.AccessControlException: Permission denied: user=myuser, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x

知道它为什么要写入我的 hdfs 的根目录吗?

更新: 暂时将 hdfs root (/) 设置为 777 权限后,我看到正在写入一个“/tmp”文件夹。我想一种选择是只创建一个具有开放权限的“/tmp”文件夹供所有人写入,但从安全角度来看,如果将其写入用户文件夹(即/user/myuser/tmp)会很好

【问题讨论】:

  • 你是用“myuser”启动hadoop的吗?
  • 不,我用的是Cloudera,所以hadoop是作为服务运行的,大概是root
  • 尝试使用 hadoop fs -chmod 将权限设置为 / 到 777,看看它写了什么。
  • @orangeoctopus - 它正在写入 /tmp/hadoop-mapred - 是否有更改此位置的设置?
  • @spike - 如果非 root 用户可以从他们自己的帐户运行 hadoop,我会更喜欢它。我注意到它正在将 /tmp 写入 hdfs,因此试图弄清楚为什么会发生这种情况,所以如果您对此有任何想法,请告诉我。谢谢

标签: permissions hadoop


【解决方案1】:

我可以通过以下设置来实现这一点:

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

    #...

</configuration>

还需要重新启动 jobtracker 服务(特别感谢 Hadoop 邮件列表上的 Jeff 帮助我追踪问题!)

【讨论】:

  • 谢谢,遇到了同样的问题。可惜这不是默认值。
  • hhhm,如果我设置了这个,mapred.system.dir(/hadoop/mapred/system)上的权限需要更宽松
  • 我将 /mapred/system 目录锁定为只有 mapred 用户 (mapred.system.dir=/mapred/system)。 hdfs root (/) 也设置为仅 hdfs 用户。如果您仍有问题,请告诉我您遇到了什么错误
  • @stephenmulcahy - 顺便说一句,我刚刚遇到了 Pig 的权限问题,这是因为它有自己的临时目录设置。更多信息在这里:stackoverflow.com/questions/7194069/…
  • 你也添加了什么文件? Hadoop 配置还是 Hive 配置?
【解决方案2】:

1) 使用以下命令在 hdfs 中创建 {mapred.system.dir}/mapred 目录

sudo -u hdfs hadoop fs -mkdir /hadoop/mapred/

2) 授予映射用户权限

sudo -u hdfs hadoop fs -chown mapred:hadoop /hadoop/mapred/

【讨论】:

    【解决方案3】:

    您还可以创建一个名为“hdfs”的新用户。相当简单的解决方案,但可能没有那么干净。

    当然,这是当您将 Hue 与 Cloudera Hadoop Manager (CDH3) 一起使用时

    【讨论】:

      【解决方案4】:

      需要设置hadoop根目录(/)的权限,而不是设置系统根目录的权限。连我自己都一头雾水,后来才发现上面提到的目录是hadoop的文件系统,而不是系统的。

      【讨论】:

      • 你说的“hadoop根目录”是指HDFS的根目录吗?我选择不放松 HDFS 根目录中的权限,以便阻止用户写入根目录(并强制他们进入一个特定目录——他们的“家”:/user/)。
      • 没错。上述问题中的配置似乎不正确。它应该指向 HDFS 上的特定目录。就我而言,它指向/opt/hadoop/mapred/local/staging。我给了目录写权限,它工作得很好。
      • 你是说设置mapreduce.jobtracker.staging.root.dir=/user不正确?请注意,我还指的是我的设置中的 HDFS 位置。另外,我正在使用 Cloudera,以防万一。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多