S-JIS[2011-08-09/2011-08-13] 変更履歴

Hiveインストール

Hiveのインストールのメモ。


Windowsへのインストール

HiveはHadoopと同じくLinuxが対象。
シェルは一応Cygwinを考慮して書かれているが、多少設定しないとWindowsでは動かせない。

ここではHadoop-0.20.2Cygwinを使用し、Hive-0.7.1をWindowsXPへインストールしてみた。

前提

インストール手順

  1. Hiveのトップページの「Getting Started」章の「Getting Started Guide」をクリックし、スタートガイドを開く。
  2. Hiveのスタートガイドの「Installing Hive from a Stable Release」章の「see Hive Releases」をクリックし、リリース情報ページを開く。
  3. Hiveのリリース情報ページの「Download」章の「Download a release now!」をクリックし、ダウンロードページを開く。
  4. Hiveのダウンロードページから適当なミラーサイトを選択し、アーカイブ(hive-0.7.1.tar.gz)をダウンロードする。
  5. ダウンロードしたアーカイブを適当な場所に展開する。Hadoopと似たような位置がいいかな?
    例: C:\cygwin\usr\local\hive-0.7.1 …これをHIVE_HOMEとする。
  6. HIVE_HOME/conf/hive-env.sh.templateを元に、HIVE_HOME/conf/hive-env.shを作成する。[/2011-08-13]
    export HADOOP_OPTS="$HADOOP_OPTS -Djava.io.tmpdir=/tmp"
    HADOOP_OPTSの設定を追加。
  7. HIVE_HOME/conf/hive-default.xmlを元に、HIVE_HOME/conf/hive-site.xmlを作成する。
    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
    
    <property>
      <name>hadoop.bin.path</name>
      <value>bash.exe ${hadoop.home.dir}/bin/hadoop</value>
    </property>
    
    </configuration>
    Hadoopの起動コマンドの設定。[/2011-08-09]
    bash.exe /usr/local/hadoop-0.20.2/bin/hadoop」や
    bash.exe C:/cygwin/usr/local/hadoop-0.20.2/bin/hadoop」でも可。
    bash.exe ${hadoop.config.dir}/../bin/hadoop」は駄目。
    (hadoop.config.dirというプロパティーはあるのだが、
    設定される順序がhadoop.bin.pathより後なので ここでは使えない)

Hiveを起動するには、Cygwin(bash)からHIVE_HOME/bin/hiveを実行する。

$ /usr/local/hive-0.7.1/bin/hive --help
$ /usr/local/hive-0.7.1/bin/hive

ちなみに、HiveはHadoop上で動いている。
つまりhiveシェルは「$HADOOP_HOME/bin/hadoop jar $HIVE_HOME/lib/hive-cli-*.jar org.apache.hadoop.hive.cli.CliDriver」というコマンドでHadoopを起動し、HiveのCLI(コマンドラインインターフェース)プログラムを実行している。


環境設定しないと出るエラー

エラー内容 説明
hive> show tables;
FAILED: Hive Internal Error: java.lang.IllegalArgumentException(java.net.URISyntaxException:
Relative path in absolute URI: file:C:/cygwin/tmp//hishidama/hive_2011-08-08_22-56-38_093_1041237583019147492)
java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: file:C:/cygwin/tmp//hishidama/hive_2011-08-08_22-56-38_093_1041237583019147492
        at org.apache.hadoop.fs.Path.initialize(Path.java:140)
        at org.apache.hadoop.fs.Path.<init>(Path.java:132)
        at org.apache.hadoop.hive.ql.Context.getScratchDir(Context.java:142)
ログファイルの出力先が正しいURIでないのでエラーになっている。
ここでの「C:/cygwin/tmp/」はシステムプロパティー「java.io.tmpdir」の値なので、
「C:」を取った値をHadoop(Hive)のjava.io.tmpdirに指定してやれば通るようになる。
hive> select t.text from test t;

Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there's no reduce operator

java.io.IOException: Cannot run program "C:\cygwin\usr\local\hadoop-0.20.2\/bin/hadoop" (in directory "C:\cygwin\usr\local\hive-0.7.1\bin"): CreateProcess error=193, %1 ??L???? Win32 ?A?v???P
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
        at java.lang.Runtime.exec(Runtime.java:593)
        at java.lang.Runtime.exec(Runtime.java:431)
        at org.apache.hadoop.hive.ql.exec.MapRedTask.execute(MapRedTask.java:246)

MapReduceを実行するようなHiveQL文の場合、Hadoopを起動(hadoopシェルを実行)しようとするが、
ProcessBuilderはWindowsではシェルを実行することが出来ないのでエラーとなる。
Hadoop起動シェルはコンフィグの「hadoop.bin.path」によって指定することが出来るので、bash.exe経由で起動するようにする。

metastore_dbの場所

Hiveを起動してSHOW TABLESを実行したりすると、カレントディレクトリーの下にmetastore_dbというディレクトリーが作られる。[2011-08-13]
Hiveではテーブル一覧をここで管理しているので、別の場所からHiveを起動すると「作ったはずのテーブルが無い!」という事態になる。

このmetastore_dbは、Apache DerbyというRDB(JDK1.6で使えるJavaDBと同じやつ)で作られている。
Hiveの設定ファイルの中にDerbyのDBを作成するコマンド(JDBCの接続URL)が書かれているので、これを直してやれば任意の場所にmetastore_dbを作ることが出来る。

HIVE_HOME/conf/hive-site.xml:

<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:derby:;databaseName=C:/cygwin/home/ユーザー/metastore_db;create=true</value>
  <description>JDBC connect string for a JDBC metastore</description>
</property>

こうすればどこからHiveを起動しても同じmetastore_dbを指すようになる。


ただ、derby.logは相変わらずカレントディレクトリーに出力される…。
これはシステムプロパティーで場所を変えられる(ファイル名も指定できる)ので、システムプロパティーを設定してやる。

HIVE_HOME/conf/hive-env.sh:

export HADOOP_OPTS="$HADOOP_OPTS -Djava.io.tmpdir=/tmp -Dderby.stream.error.file=C:/cygwin/tmp/hive-derby.log"

Hive目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま