MR2中的基本权限错误

时间:2013-07-06 22:29:30

标签: hadoop permissions yarn

最近构建的MR2基本示例在伪分布式MR2 HDFS集群中失败,即运行pi示例,出现以下错误:

13/07/06 21:20:47错误security.UserGroupInformation:PriviledgedActionException as:root(auth:SIMPLE)cause:org.apache.hadoop.security.AccessControlException:Permission denied:user = root,access = EXECUTE,索引节点= “/ TMP / Hadoop的纱线/分期”:mapred:mapred:drwxrwx ---

为什么会发生这种情况?

4 个答案:

答案 0 :(得分:5)

解决方案,只需更改/ tmp / hadoop-yarn权限:

sudo -u hdfs hadoop fs -chmod -R 777 / tmp / hadoop-yarn

让想象一下,如果这个目录完全是由hadoop的内部生命周期创建的,那么这个目录最终会有不正确的权限。

(评论将不胜感激)

答案 1 :(得分:3)

yarn.app.mapreduce.am.staging-dir上添加mapred-site.xml,如下所示:

<property>
  <name>yarn.app.mapreduce.am.staging-dir</name>
  <value>/user</value>
</property>

此配置假设用户帐户(在您的情况下为root)在HDFS上具有其主目录/user/root,并且暂存目录将创建为/user/root/.staging其中的用户帐户已经拥有正确的权限。

有关详细信息,请查看followig链接上的“步骤4:配置暂存目录”。

答案 2 :(得分:0)

首先,您需要正确创建临时文件夹。使用hadoop用户,运行以下命令:

$ hdfs dfs -mkdir /tmp
$ hdfs dfs -chmod -R 1777 /tmp

您可能要删除/ tmp目录的当前内容。

对于hive用户,如果您的scratchdir存在类似问题,请编辑文件hive / conf / hive-site.xml

  <property>
    <name>hive.exec.local.scratchdir</name>
    <value>${system:java.io.tmpdir}/${system:user.name}</value>
    <description>Local scratch space for Hive jobs</description>
  </property>
  <property>
    <name>hive.downloaded.resources.dir</name>
    <value>${system:java.io.tmpdir}/${hive.session.id}_resources</value>
    <description>Temporary local directory for added resources in the remote file system.</description>
  </property>
  <property>
    <name>hive.scratch.dir.permission</name>
    <value>777</value>
    <description>The permission for the user specific scratch directories that get created.</description>
  </property>

答案 3 :(得分:-1)

你在HDP中遇到这个错误,为wordcount运行一个示例jar文件:

  

org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException):   权限被拒绝:user = root,access = EXECUTE,   索引节点=&#34; /user/root/.staging":HDFS:HDFS:drwx ------

来自/ user目录下的hdfs用户 public interface CompanyRepository extends MongoRepository<Company, String>{ @Query(value = "{ 'employer.userId' : ?0 }") Company findByCompanyUserUserId(String userId); } ,我可以使用我的ubuntu用户sudoer来运行.jar文件。我也可以使用hdfs用户来运行jar。