首先介紹一點背景知識。 我有一個測試CDH羣集,有兩個節點。我正在嘗試執行Oozie作業,下載文件,使用SPARK處理它,然後在Solr中對其進行索引。在Hadoop上運行的Oozie作業問題 -/user/history/done_intermediate上的權限
羣集被配置爲使用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[[email protected]_Current_Data] Exception in check(). Message[JA017: Could not lookup launched hadoop Job ID [job_1470672690566_0027] which was associated with action [[email protected]_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 [[email protected]_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)
隨着快速谷歌搜索,似乎發生這種情況時,作業歷史記錄服務器沒有運行,或無法檢測作業的中間目錄。
當歷史目錄執行ls
命令,我有以下幾點:
[[email protected] ~]$ 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
這是確定的,我猜。理論上,根據CDH文檔,mapred
用戶應該是歷史文件夾的所有者。
然而,當我檢查done_intermediate的內容:
[[email protected] ~]$ 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用戶,更改屬性文件的工作,然而,這也失敗了,現在因爲mapred用戶沒有權限對內部HDFS /users
文件夾寫的,所以它看起來這不是正確的解決方案。
是否有一些配置可以避免centos
和mapred
之間的歷史文件夾中的用戶衝突?
在此先感謝
這個設置應該可行 - 如果'mapred'用戶確實是'hadoop'組的成員。您可以嘗試爲'mapred @ YOUR.REALM'創建Kerberos票據,然後運行'hdfs groups'以確保? –
謝謝@SamsonScharfrichter。我有兩個問題。首先,映射的用戶不存在於用於Kerberos的Active Directory上。其次,用戶不在正確的組中。確定作業運行後沒有問題。你可以發表這個評論作爲答案,所以我可以接受它嗎? –