2016-08-12 35 views
0

まずは少し背景。 私は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フォルダーに書き込む権限がないため失敗します。これは正しい解決策ではないと考えています。

centosmapredの間のユーザーの競合を避けるための設定が履歴フォルダにありますか?

事前に感謝

+0

この設定は 'mapred'ユーザが実際に' hadoop'グループのメンバーである場合に機能します。 'mapred @ YOUR.REALM'のためのKerberosチケットを作成して、' hdfs groups'を実行して確認することはできますか? –

+0

ありがとう@SamsonScharfrichter。私には2つの問題がありました。まず、Kerberosで使用されるActive Directoryにマップされたユーザーが存在しませんでした。第2に、ユーザーは正しいグループに属していませんでした。修正後、ジョブは問題なく実行されます。あなたは答えとしてこのコメントを投稿できますか?それを受け入れることができますか? –

答えて

1

かいつまん:ジョブ履歴ログ収集のためのこの特定のHDFSのパーミッションの問題が異なる根本的な原因を有することができる...

  1. システムアカウントmapredグループ」によって解決することはできません(デフォルトの設定=> NameNodeホスト上のローカルLinuxユーザのHadoopユーザ名をマップし、それらのLinuxグループを取得しますが、Linuxユーザ/グループはAD、OpenLDAPなどにバインドされます)
  2. システムアカウントmapredは解決できますが、必要なhadoopシステムグループのメンバーではありません(...)
  3. hdfs:///user/history/サブディレクトリのパーミッションは、何らかの不明な理由で混乱します。 tからTに「スティッキービット」のスイッチは予告なしに

同様の問題は、その記事で説明されていますhistoryserver not able to read log after enabling kerberos(#2原因と診断)

PS:私は「スティッキービットを」言及しましたフリップ(原因#3)個人的な経験から。ところで、どうして変化を引き起こしたのか、困惑しました。

+0

はい、あなたもnamenodeにマップされているはずです。また、マップされたユーザーをhadoopグループに追加する – snow04

関連する問題