Hiveのインストールのメモ。
|
|
HiveはHadoopと同じくLinuxが対象。
シェルは一応Cygwinを考慮して書かれているが、多少設定しないとWindowsでは動かせない。
ここではHadoop-0.20.2とCygwinを使用し、Hive-0.7.1をWindowsXPへインストールしてみた。
PATH | 〜;C:\cygwin\bin |
HADOOP_HOME | C:/cygwin/usr/local/hadoop-0.20.2 |
export HADOOP_OPTS="$HADOOP_OPTS -Djava.io.tmpdir=/tmp" |
HADOOP_OPTSの設定を追加。 |
<?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: |
ログファイルの出力先が正しいURIでないのでエラーになっている。 ここでの「C:/cygwin/tmp/」はシステムプロパティー「java.io.tmpdir」の値なので、 「C:」を取った値をHadoop(Hive)のjava.io.tmpdirに指定してやれば通るようになる。 |
hive> select t.text from test t;
|
MapReduceを実行するようなHiveQL文の場合、Hadoopを起動(hadoopシェルを実行)しようとするが、 ProcessBuilderはWindowsではシェルを実行することが出来ないのでエラーとなる。 Hadoop起動シェルはコンフィグの「hadoop.bin.path」によって指定することが出来るので、bash.exe経由で起動するようにする。 |
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を作ることが出来る。
<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は相変わらずカレントディレクトリーに出力される…。
これはシステムプロパティーで場所を変えられる(ファイル名も指定できる)ので、システムプロパティーを設定してやる。
export HADOOP_OPTS="$HADOOP_OPTS -Djava.io.tmpdir=/tmp -Dderby.stream.error.file=C:/cygwin/tmp/hive-derby.log"