たごもりすメモ

コードとかその他の話とか。

CDH4+YARN+Hiveでハマってる

検証用として新規にセットアップしたCDH4クラスタ、YARN使用で設定してみたんだけど以下のような状態。完全分散モード。

  • CDH4はtarballを展開する形でインストール
  • YARNで hadoop-mapreduce-example.jar は走る
    • ResourceManagerと同ホストから以下のコマンドを実行したら成功する
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-0.23.1-cdh4.0.0b2.jar pi 4 1000
  • HiveでMapReduceを介さない処理は成功する
    • 具体的にはSHOW TABLESやCREATE TABLEおよびLOADなど
  • HiveでSELECTすると、エラーになって失敗する
    • ResourceManagerのアプリケーション一覧にジョブが登録される
    • が以下のようなログが出て KILLED になる
2012-06-25 16:18:46,425 FATAL [IPC Server handler 5 on 16040] org.apache.hadoop.mapred.TaskAttemptListenerImpl:
    Task: attempt_1340595366899_0003_m_000002_0 - exited : java.lang.RuntimeException: java.io.FileNotFoundException:
     /tmp/USERNAME/hive_2012-06-25_16-18-34_931_2832351455751959226/-mr-10001/c2a2caf9-8bda-4e22-a3c2-4745531a927a (No such file or directory)
	at org.apache.hadoop.hive.ql.exec.Utilities.getMapRedWork(Utilities.java:223)
	at org.apache.hadoop.hive.ql.io.HiveInputFormat.init(HiveInputFormat.java:255)
	at org.apache.hadoop.hive.ql.io.HiveInputFormat.pushProjectionsAndFilters(HiveInputFormat.java:381)
	at org.apache.hadoop.hive.ql.io.HiveInputFormat.pushProjectionsAndFilters(HiveInputFormat.java:374)
	at org.apache.hadoop.hive.ql.io.CombineHiveInputFormat.getRecordReader(CombineHiveInputFormat.java:536)
	at org.apache.hadoop.mapred.MapTask$TrackedRecordReader.(MapTask.java:160)
	at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:381)
	at org.apache.hadoop.mapred.MapTask.run(MapTask.java:334)
	at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:148)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.Subject.doAs(Subject.java:396)
	at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1177)
	at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:143)
Caused by: java.io.FileNotFoundException: /tmp/USERNAME/hive_2012-06-25_16-18-34_931_2832351455751959226/-mr-10001/c2a2caf9-8bda-4e22-a3c2-4745531a927a (No such file or directory)
	at java.io.FileInputStream.open(Native Method)
	at java.io.FileInputStream.(FileInputStream.java:120)
	at java.io.FileInputStream.(FileInputStream.java:79)
	at org.apache.hadoop.hive.ql.exec.Utilities.getMapRedWork(Utilities.java:214)
	... 12 more

Hive側でHDFSにputしたジョブ用のファイルをTaskTracker……じゃなくてNodeManager? 側から見えてないっぽい。なんでだ。もちろんslave側のノードでも hdfs dfs -ls とかすればちゃんとHDFS内のファイルは見えているんだけどなー。わからん。わからーん。

とりあえずそれだけ。なんか分かったら書く。

解決した! (7/3追記)

”Does not contain a valid host:port authority: local”がなんやねんという感じでいろいろ調べてみると、hive-site.xmlにJobTrackerのURLを指定する必要があるっぽかったので、指定しました。

CDH4 YARNでHive - marblejediary

これだ! これでした! HiveServerに全く同じログが出ていたのを間抜けにも見逃しておりました。NodeManager側で出ているログの結果こうなるのかなー、みたいななんとなくのヌルい思考でなんとなくスルーしてた!

ということで(YARN用の) hadoop.conf.dir と、あと mapred.job.tracker になんとなくResourceManagerをやっているホストのホスト名を書いたらHiveクエリでMapReduceが走って結果が返ってくるようになりました。万歳! @marblejenka++

ところでこっちでも java.lang.InterruptedException というのは出てますね。なんだろこれ……。