Hive が動かない

Pocket

システムに新たなアプリを追加したけど、
動作させるのに、既に動いているシステムの設定を変更しないときどうします?

今回、Hadoop 環境で同じような問題が起こりました。

hive のインストール完了!
テーブルをCREATE 完了!
さぁ、SELECT してみましょう。と思った時、エラーが発生・・・。

hive> SHOW TABLES;
OK
sampletable
Time taken: 1.98 seconds

hive> SELECT S.* FROM sampletable S;
FAILED: Hive Internal Error: java.lang.RuntimeException(Error while making MR scratch directory - check filesystem config (null))
java.lang.RuntimeException: Error while making MR scratch directory - check filesystem config (null)
     at org.apache.hadoop.hive.ql.Context.getMRScratchDir(Context.java:196)
     at org.apache.hadoop.hive.ql.Context.getMRTmpFileURI(Context.java:247)
     at org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.getMetaData(SemanticAnalyzer.java:905)
     at org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.analyzeInternal(SemanticAnalyzer.java:6599)
     at org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer.analyze(BaseSemanticAnalyzer.java:238)
     at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:340)
     at org.apache.hadoop.hive.ql.Driver.run(Driver.java:736)
     at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:209)
     at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:286)
     at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:516)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
     at java.lang.reflect.Method.invoke(Method.java:597)
     at org.apache.hadoop.util.RunJar.main(RunJar.java:197)
Caused by: java.lang.IllegalArgumentException: Wrong FS: hdfs://172.16.1.2:8020/tmp/hive-hogeuser/hive_2012-07-25_15-58-05_591_1978366274661151425, expected: hdfs://hadoop01.example.com
     at org.apache.hadoop.fs.FileSystem.checkPath(FileSystem.java:410)
     at org.apache.hadoop.hdfs.DistributedFileSystem.checkPath(DistributedFileSystem.java:106)
     at org.apache.hadoop.fs.FileSystem.makeQualified(FileSystem.java:322)
     at org.apache.hadoop.hdfs.DistributedFileSystem.makeQualified(DistributedFileSystem.java:123)
     at org.apache.hadoop.hive.ql.Context.getScratchDir(Context.java:146)
     at org.apache.hadoop.hive.ql.Context.getMRScratchDir(Context.java:190)
     ... 14 more

/etc/hosts の中身は下のような感じ

127.0.0.1  localhost
172.16.1.2 hadoop01.example.com

Wrong FS の部分を読む限り、この辺がまずい。
/etc/hadoop/conf/core-site.xml の該当部分であろう

検索して調べてみても、IP で書いてあるところをホスト名にしなさいと。

fs.default.name を読んでみると・・・

<property>
  <name>fs.default.name</name>
  <value>hdfs://172.16.1.2:8020</value>
</property>

IP アドレスで書いてある・・・。

既に動いているシステムだし、core-site.xml なんて修正したくない・・・。
でも、hiveを動かしたい。。。・

そこで、ものは試し。/etc/hive/conf/hive-site.xml に下記を加えてみると・・・。 fs.default.name
hdfs://hadoop01.example.com:8020

hive> SHOW TABLES;
OK
sampletable
Time taken: 1.96 seconds
hive> SELECT S.* FROM sampletable S;
hoge test
fuga test2

おぉ。実行できる。
問題解決。

コメントを残す