在hadoop上运行oozie作业时出现问题-对/user/history/done的权限

7eumitmz  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(428)

首先是一些背景知识。我有一个测试cdh集群,有两个节点。我正在尝试执行一个oozie作业,下载一个文件,用spark处理它,然后在solr中索引它。
群集配置为使用kerberos身份验证。cdh版本是5.7.1
当我尝试使用oozie运行作业时,使用以下命令:

oozie job --oozie https://host:11443/oozie/ -run --config oozieExample/job.properties

它失败,但出现以下异常:

2016-08-12 12:29:40,415 WARN org.apache.oozie.action.hadoop.JavaActionExecutor: SERVER[it4364-cdh01.novalocal] USER[centos] GROUP[-] TOKEN[] APP[stackOverflow] JOB[0000012-160808110839555-oozie-clou-W] ACTION[0000012-160808110839555-oozie-clou-W@Download_Current_Data] Exception in check(). Message[JA017: Could not lookup launched hadoop Job ID [job_1470672690566_0027] which was associated with  action [0000012-160808110839555-oozie-clou-W@Download_Current_Data].  Failing this action!]
org.apache.oozie.action.ActionExecutorException: JA017: Could not lookup launched hadoop Job ID [job_1470672690566_0027] which was associated with  action [0000012-160808110839555-oozie-clou-W@Download_Current_Data].  Failing this action!
        at org.apache.oozie.action.hadoop.JavaActionExecutor.check(JavaActionExecutor.java:1277)
        at org.apache.oozie.command.wf.ActionCheckXCommand.execute(ActionCheckXCommand.java:182)
        at org.apache.oozie.command.wf.ActionCheckXCommand.execute(ActionCheckXCommand.java:56)
        at org.apache.oozie.command.XCommand.call(XCommand.java:286)
        at org.apache.oozie.service.CallableQueueService$CallableWrapper.run(CallableQueueService.java:175)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)

通过快速的google搜索,当作业历史服务器没有运行,或者无法检测到作业的中间目录时,似乎会发生这种情况。
在执行 ls 在history目录下,我得到以下信息:

[hdfs@it4364-cdh01 ~]$  hadoop fs -ls /user/history
Found 2 items
drwxrwx---   - mapred hadoop          0 2016-08-12 10:36 /user/history/done
drwxrwxrwt   - mapred hadoop          0 2016-08-12 12:29 /user/history/done_intermediate

我想这是可以的。从理论上讲 mapred 根据cdh文档,用户应该是history文件夹的所有者。
但是,当我检查done\u intermediate的内容时:

[hdfs@it4364-cdh01 ~]$  hadoop fs -ls  /user/history/done_intermediate
Found 1 items
drwxrwx---   - centos hadoop          0 2016-08-12 12:29 /user/history/done_intermediate/centos

也就是说用户 centos (执行oozie作业的那个)是这个目录的所有者。这可以防止作业历史服务器读取文件,将作业标记为已完成,然后oozie将其标记为失败。日志中明确指出:

<ommited for brevity>
...
Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=mapred, access=READ_EXECUTE, inode="/user/history/done_intermediate/centos":centos:hadoop:drwxrwx---
    at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.checkFsPermission(DefaultAuthorizationProvider.java:281)
    at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.check(DefaultAuthorizationProvider.java:262)
...
<ommited for brevity>

如果我更改历史记录文件夹中所有内容的所有权 hadoop fs -ls -R /user/history 历史服务器识别作业并将其标记为已完成。
我试图以mapred用户的身份运行作业,更改了作业的.properties文件,但是,这也失败了,因为mapred用户现在没有写入的权限 /users 文件夹内的hdfs,所以这似乎不是正确的解决方案。
是否有一些配置可以避免用户之间的冲突 centos 以及 mapred ,在历史文件夹中?
提前谢谢

2ekbmq32

2ekbmq321#

长话短说:作业历史记录日志收集的此特定hdfs权限问题可能有不同的根本原因。。。
系统帐户 mapred 无法通过“组Map”规则解析
(默认配置=>Mapnamenode主机上本地linux用户的hadoop用户名,并检索他们的linux组——但反过来linux用户/组可能绑定到ad、openldap等)
系统帐户 mapred 可以解析,但不是必需的 hadoop 系统组(…)
中的权限 hdfs:///user/history/ 子目录由于一些未知的原因而变得混乱——例如,“粘性位”从 tT 未经通知
在那篇文章中也描述了类似的问题:historyserver在启用kerberos后无法读取日志(诊断为原因2)
附言:我提到的“粘性位”翻转(原因3)出于个人经验。顺便说一句,我还不知道是什么导致了这种变化。

相关问题