Hive が動かない

Pocket

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

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

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

<br />
hive&gt; SHOW TABLES;<br />
OK<br />
sampletable<br />
Time taken: 1.98 seconds</p>
<p>hive&gt; SELECT S.* FROM sampletable S;<br />
FAILED: Hive Internal Error: java.lang.RuntimeException(Error while making MR scratch directory - check filesystem config (null))<br />
java.lang.RuntimeException: Error while making MR scratch directory - check filesystem config (null)<br />
     at org.apache.hadoop.hive.ql.Context.getMRScratchDir(Context.java:196)<br />
     at org.apache.hadoop.hive.ql.Context.getMRTmpFileURI(Context.java:247)<br />
     at org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.getMetaData(SemanticAnalyzer.java:905)<br />
     at org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.analyzeInternal(SemanticAnalyzer.java:6599)<br />
     at org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer.analyze(BaseSemanticAnalyzer.java:238)<br />
     at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:340)<br />
     at org.apache.hadoop.hive.ql.Driver.run(Driver.java:736)<br />
     at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:209)<br />
     at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:286)<br />
     at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:516)<br />
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br />
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br />
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />
     at java.lang.reflect.Method.invoke(Method.java:597)<br />
     at org.apache.hadoop.util.RunJar.main(RunJar.java:197)<br />
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<br />
     at org.apache.hadoop.fs.FileSystem.checkPath(FileSystem.java:410)<br />
     at org.apache.hadoop.hdfs.DistributedFileSystem.checkPath(DistributedFileSystem.java:106)<br />
     at org.apache.hadoop.fs.FileSystem.makeQualified(FileSystem.java:322)<br />
     at org.apache.hadoop.hdfs.DistributedFileSystem.makeQualified(DistributedFileSystem.java:123)<br />
     at org.apache.hadoop.hive.ql.Context.getScratchDir(Context.java:146)<br />
     at org.apache.hadoop.hive.ql.Context.getMRScratchDir(Context.java:190)<br />
     ... 14 more<br />

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

<br />
127.0.0.1  localhost<br />
172.16.1.2 hadoop01.example.com<br />

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

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

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

<br />
&lt;property&gt;<br />
  &lt;name&gt;fs.default.name&lt;/name&gt;<br />
  &lt;value&gt;hdfs://172.16.1.2:8020&lt;/value&gt;<br />
&lt;/property&gt;<br />

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

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

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

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

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

コメントを残す