まずは少し背景。 私は2つのノードを持つテストCDHクラスタを持っています。私はOozieジョブを実行しようとしています。ファイルをダウンロードし、SPARKで処理してから、Solr内でインデックスを作成します。Hadoopで実行中のOozieジョブの問題 -/user/history/done_intermediateのアクセス許可
クラスタはKerberos認証を使用するように構成されています。私は、次のコマンドを使用して、Oozieでジョブを実行しようとすると CDHのバージョンが5.7.1
です:
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)
クイックGoogle検索では、ジョブ履歴サーバーが実行されていない場合、またはジョブの中間ディレクトリを検出できない場合に発生します。履歴ディレクトリにls
コマンドを実行すると
、私は次しまっ:OKです
[[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
、私は推測します。理論上、mapred
ユーザーは、CDHのドキュメントに基づいて、履歴フォルダの所有者である必要があります。
[[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ジョブを実行する1つ)がこのディレクトリの所有者であることを意味している:私はdone_intermediateの内容を確認しかし
、。これにより、ジョブ履歴サーバーがファイルを読み取り、ジョブが完了したことをマークしてから、Oozieが失敗したとマークします。私はhadoop fs -ls -R /user/history
履歴サーバがジョブを認識し、完了したとして、それをマークして、履歴フォルダ上のすべてのコンテンツの所有権を変更する場合は
<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>
:ログは、まさにこのことを述べています。
マップされたユーザーとしてジョブを実行しようとしましたが、ジョブの.propertiesファイルを変更しましたが、マップされたユーザーにHDFS内の/users
フォルダーに書き込む権限がないため失敗します。これは正しい解決策ではないと考えています。
centos
とmapred
の間のユーザーの競合を避けるための設定が履歴フォルダにありますか?
事前に感謝
この設定は 'mapred'ユーザが実際に' hadoop'グループのメンバーである場合に機能します。 'mapred @ YOUR.REALM'のためのKerberosチケットを作成して、' hdfs groups'を実行して確認することはできますか? –
ありがとう@SamsonScharfrichter。私には2つの問題がありました。まず、Kerberosで使用されるActive Directoryにマップされたユーザーが存在しませんでした。第2に、ユーザーは正しいグループに属していませんでした。修正後、ジョブは問題なく実行されます。あなたは答えとしてこのコメントを投稿できますか?それを受け入れることができますか? –