システムに新たなアプリを追加したけど、
動作させるのに、既に動いているシステムの設定を変更しないときどうします?
今回、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 に下記を加えてみると・・・。
hive> SHOW TABLES; OK sampletable Time taken: 1.96 seconds hive> SELECT S.* FROM sampletable S; hoge test fuga test2
おぉ。実行できる。
問題解決。