在用户获得/user/yarn/.staging目录

时间:2015-07-16 19:51:58

标签: hadoop mapreduce hive yarn oozie

我有一个运行Hive操作的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/yarn/.staging目录。如果作业以用户云进程的形式运行,那么它不应该尝试访问/user/cloudfeeds/.staging吗?

我该如何解决这个问题?

感谢, -shinta

4 个答案:

答案 0 :(得分:1)

让您验证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>

同样可以帮助挖掘问题

答案 1 :(得分:0)

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

chmod 777 /user/yarn/.staging

答案 2 :(得分:0)

运行以下hdfs命令,

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

-R表示适用于其所有子目录。上述命令将对该目录及其所有子目录的所有用户应用完全权限。

或者如果您启用了ACL,则可以为特定用户设置权限,如下所示

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

答案 3 :(得分:0)

虽然我不完全理解为什么,但当我们从HDP 2.2.4升级到HDP 2.2.6时问题就消失了。我们没有更改任何代码或任何配置文件。