简短的介绍:
我正在运行一个带有 hadoop 命令的 shell 脚本。和奥齐。
下面是我试图运行的 shell 脚本:
#!/bin/bash
hdfs dfs -mkdir /user/etp8117/testdir
工作流.xml:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<workflow-app xmlns="uri:oozie:workflow:0.5" name="test_oozie">
<start to="shell_1"/>
<action name="shell_1">
<shell xmlns="uri:oozie:shell-action:0.1">
<job-tracker>${resourceManager}</job-tracker>
<name-node>${nameNode}</name-node>
<exec>test.sh</exec>
<env-var>HADOOP_USER_NAME=${wf:user()}</env-var>
<file>/user/etp8677/oozie_test/test.sh</file>
</shell>
<ok to="end"/>
<error to="kill"/>
</action>
<kill name="kill">
<message>${wf:errorMessage(wf:lastErrorNode())}</message>
</kill>
<end name="end"/>
</workflow-app>
工作属性:
nameNode=hdfs://CKNOS6VJFS01
resourceManager=slmupd5hmn03.zres.ztech:8050
queueName=default
outputDir=hdfs://CKNOS6VJFS01/user/etp8117/
oozie.use.system.libpath=false
wf:user()=etp8117
oozie.system.id=etp8117
oozie.wf.application.path=hdfs://CKNOS6VJFS01/user/etp8117/oozie_test/workflow.xml user.name=etp8117 mapreduce.job.user.name=etp8117
执行 oozie 作业时出现以下错误:
开始操作 [shell_1] 时出错。ErrorType [TRANSIENT], ErrorCode [JA009], Message [JA009: Permission denied: user=etp8677, access=WRITE, inode="/user/ETP8117@ZGIE.ZTECH/oozie-oozi/0000001-190123054344212-oozie-oozi-W /shell_1--shell.tmp":hdfs:hdfs:drwxr-xr-x 在 org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:353) 在 org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:325) 在 org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:246) 在 org.apache.ranger.authorization.hadoop.RangerHdfsAuthorizer$RangerAccessControlEnforcer.checkDefaultEnforcer(RangerHdfsAuthorizer.java:428) 在 org.apache.ranger.authorization.hadoop.RangerHdfsAuthorizer$RangerAccessControlEnforcer.checkPermission(RangerHdfsAuthorizer.java:278) 在 org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:190) 在 org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1950) 在 org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1934) 在 org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkAncestorAccess(FSDirectory.java:1917) 在 org.apache.hadoop.hdfs.server.namenode.FSDirMkdirOp.mkdirs(FSDirMkdirOp.java:71) 在 org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirs(FSNamesystem.java:4181) 在 org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.mkdirs(NameNodeRpcServer.java:1109) 在 org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.mkdirs(ClientNamenodeProtocolServerSideTranslatorPB.java:645) 在 org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java) 在 org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:640) 在 org.apache.hadoop.ipc.RPC$Server.call(RPC.java:982) 在 org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2351) 在 org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2347) 在 java.security.AccessController.doPrivileged(本机方法) 在 javax.security.auth.Subject.doAs(Subject.java:422) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1869) 在 org.apache.hadoop.ipc.Server$Handler.run(Server.java:2347) ] org.apache.oozie.action.ActionExecutorException: JA009: Permission denied: user=etp8117, access=WRITE, inode="/user/ETP8117@ZGIE.ZTECH/oozie-oozi/0000001-190123054344212-oozie-oozi-W/shell_1 --shell.tmp":hdfs:hdfs:drwxr-xr-x 在 org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:353) 在 org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:325) 在 org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:246) 在 org.apache.ranger.authorization.hadoop.RangerHdfsAuthorizer$RangerAccessControlEnforcer.checkDefaultEnforcer(RangerHdfsAuthorizer.java:428) 在 org.apache.ranger.authorization.hadoop.RangerHdfsAuthorizer$RangerAccessControlEnforcer.checkPermission(RangerHdfsAuthorizer.java:278) 在 org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:190) 在 org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1950) 在 org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1934) 在 org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkAncestorAccess(FSDirectory.java:1917) 在 org.apache.hadoop.hdfs.server.namenode.FSDirMkdirOp.mkdirs(FSDirMkdirOp.java:71) 在 org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirs(FSNamesystem.java:4181) 在 org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.mkdirs(NameNodeRpcServer.java:1109) 在 org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.mkdirs(ClientNamenodeProtocolServerSideTranslatorPB.java:645) 在 org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java) 在 org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:640) 在 org.apache.hadoop.ipc.RPC$Server.call(RPC.java:982) 在 org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2351) 在 org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2347) 在 java.security.AccessController.doPrivileged(本机方法) 在 javax.security.auth.Subject.doAs(Subject.java:422) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1869) 在 org.apache.hadoop.ipc.Server$Handler.run(Server.java:2347) 在 org.apache.oozie.action.ActionExecutor.convertExceptionHelper(ActionExecutor.java:463) 在 org.apache.oozie.action.ActionExecutor.convertException(ActionExecutor.java:437) 在 org.apache.oozie.action.hadoop.JavaActionExecutor.prepareActionDir(JavaActionExecutor.java:664) 在 org.apache.oozie.action.hadoop.JavaActionExecutor.start(JavaActionExecutor.java:1380) 在 org.apache.oozie.command.wf.ActionStartXCommand.execute(ActionStartXCommand.java:234) 在 org.apache.oozie.command.wf.ActionStartXCommand.execute(ActionStartXCommand.java:65) 在 org.apache.oozie.command.XCommand.call(XCommand.java:287) 在 org.apache.oozie.service.CallableQueueService$CompositeCallable.call(CallableQueueService.java:331) 在 org.apache.oozie.service.CallableQueueService$CompositeCallable.call(CallableQueueService.java:260) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 org.apache.oozie.service.CallableQueueService$CallableWrapper.run(CallableQueueService.java:178) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745) 引起:org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException):权限被拒绝:user=etp8117, access=WRITE, inode="/user/ETP8117@ZGIE.ZTECH/oozie-oozi /0000001-190123054344212-oozie-oozi-W/shell_1--shell.tmp":hdfs:hdfs:drwxr-xr-x 在 org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:353) 在 org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:325) 在 org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:246) 在 org.apache.ranger.authorization.hadoop.RangerHdfsAuthorizer$RangerAccessControlEnforcer.checkDefaultEnforcer(RangerHdfsAuthorizer.java:428) 在 org.apache.ranger.authorization.hadoop.RangerHdfsAuthorizer$RangerAccessControlEnforcer.checkPermission(RangerHdfsAuthorizer.java:278) 在 org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:190) 在 org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1950) 在 org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1934) 在 org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkAncestorAccess(FSDirectory.java:1917) 在 org.apache.hadoop.hdfs.server.namenode.FSDirMkdirOp.mkdirs(FSDirMkdirOp.java:71) 在 org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirs(FSNamesystem.java:4181) 在 org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.mkdirs(NameNodeRpcServer.java:1109) 在 org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.mkdirs(ClientNamenodeProtocolServerSideTranslatorPB.java:645) 在 org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java) 在 org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:640) 在 org.apache.hadoop.ipc.RPC$Server.call(RPC.java:982) 在 org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2351) 在 org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2347) 在 java.security.AccessController.doPrivileged(本机方法) 在 javax.security.auth.Subject.doAs(Subject.java:422) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1869) 在 org.apache.hadoop.ipc.Server$Handler.run(Server.java:2347) 在 org.apache.hadoop.ipc.Client.getRpcResponse(Client.java:1554) 在 org.apache.hadoop.ipc.Client.call(Client.java:1498) 在 org.apache.hadoop.ipc.Client.call(Client.java:1398) 在 org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:233) 在 com.sun.proxy.$Proxy31.mkdirs(未知来源) 在 org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.mkdirs(ClientNamenodeProtocolTranslatorPB.java:610) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:291) 在 org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:203) 在 org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:185) 在 com.sun.proxy.$Proxy32.mkdirs(未知来源) 在 org.apache.hadoop.hdfs.DFSClient.primitiveMkdir(DFSClient.java:3087) 在 org.apache.hadoop.hdfs.DFSClient.mkdirs(DFSClient.java:3057) 在 org.apache.hadoop.hdfs.DistributedFileSystem$25.doCall(DistributedFileSystem.java:1181) 在 org.apache.hadoop.hdfs.DistributedFileSystem$25.doCall(DistributedFileSystem.java:1177) 在 org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81) 在 org.apache.hadoop.hdfs.DistributedFileSystem.mkdirsInternal(DistributedFileSystem.java:1195) 在 org.apache.hadoop.hdfs.DistributedFileSystem.mkdirs(DistributedFileSystem.java:1169) 在 org.apache.hadoop.fs.FileSystem.mkdirs(FileSystem.java:1924) 在 org.apache.oozie.action.hadoop.JavaActionExecutor.prepareActionDir(JavaActionExecutor.java:653) ... 11 更多
OOZIE 默认尝试写入不存在的 HDFS 目录。这里是错误:org.apache.oozie.action.ActionExecutorException: FS014: Permission denied: user = etp8117, access = WRITE, inode = "/user/ETP8117@ZGIE.ZTECH/oozie-oozi/0000026-181219054701162-oozie- oozi-W/shell_1--fs/fs-0000026-181219054701162-oozie-oozi-W@shell_1@0":hdfs:hdfs:drwxr-xr-x
它试图创建这个目录:/user/ETP8117@ZGIE.ZTECH/ 这不是我的用户名,而是我的 KERBEROS 令牌。
有人可以帮我解决这个问题吗!!!