mapreduce作业以用户身份运行在/user/yarn/.staging目录上获得权限时出错

fkaflof6  于 2021-05-29  发布在  Hadoop
关注(0)|答案(4)|浏览(419)

我有一个oozie工作流运行一个hive操作。配置单元操作非常简单,它只是从一个表拷贝读取到另一个表。作业运行时具有以下属性:

user.name=yarn
mapreduce.job.user.name=cloudfeeds

作业失败,出现以下错误:

15/07/16 18:45:25 INFO mapreduce.Job: Job job_1435680786374_0060 failed with state FAILED due to: Application application_1435680786374_0060 failed 2 times due to AM Container for appattempt_1435680786374_0060_000002 exited with  exitCode: -1000
For more detailed output, check application tracking page:http://master-1.local:8088/proxy/application_1435680786374_0060/Then, click on links to logs of each attempt.
Diagnostics: Permission denied: user=cloudfeeds, access=EXECUTE, inode="/user/yarn/.staging":yarn:hdfs:drwx------
    at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkFsPermission(FSPermissionChecker.java:271)
    at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:257)
    at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkTraverse(FSPermissionChecker.java:208)
    at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:171)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:6795)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getFileInfo(FSNamesystem.java:4387)
    at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getFileInfo(NameNodeRpcServer.java:855)
    at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getFileInfo(ClientNamenodeProtocolServerSideTranslatorPB.java:835)
    at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
    at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:619)
    at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:962)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2039)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2035)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1628)
    at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2033)

我不明白为什么user cloudfeeds需要访问/user/yarn/.staging目录。如果作业作为user cloudfeeds运行,它不应该尝试访问/user/cloudfeeds/.staging吗?
我该怎么解决这个问题?
谢谢,-新田

w46czmvw

w46czmvw1#

授予cloudfeeds用户对暂存目录的权限。任何执行应用程序的用户都需要访问临时目录。因此,要么为所有这些用户所属的组设置acl,要么盲目地授予777权限。

chmod 777 /user/yarn/.staging
uurity8g

uurity8g2#

虽然我不完全明白为什么,但当我们从hdp2.2.4升级到hdp2.2.6时,问题就消失了。我们没有更改任何代码或配置文件。

kqlmhetl

kqlmhetl3#

运行下面的hdfs命令,

hadoop fs -chmod -R 1777 /user/yarn/.staging

-r表示应用于其所有子目录。上面的命令对该目录及其所有子目录的所有用户应用完全权限。
或者,如果启用了ACL,则可以为特定用户设置权限,如下所示,

hadoop fs -setfacl -m -R user:cloudfeeds:rwx /user/yarn/.staging
r1zk6ea1

r1zk6ea14#

如果您验证了core-site.xml,应该为所有具有

<property>
            <name>hadoop.proxyuser.oozie.hosts</name>
            <value>*</value>
    </property>
    <property>
            <name>hadoop.proxyuser.oozie.groups</name>
            <value>*</value>
    </property>

还要检查hdfs-site.xml权限状态意味着什么,它应该设置为false:

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

这同样有助于挖掘问题

相关问题