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 というのは出てますね。なんだろこれ……。