我有一个运行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
答案 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时问题就消失了。我们没有更改任何代码或任何配置文件。