CDH3u2で初めてHiveを使ってみる(初心者向け?)
というわけで、
CDH3u2で初めてHiveを使おうとしたら、
環境まわり(というかほとんどpermission denied)で
何度かはまったので、整理しておく。
なお、CDH3u2自体のインストールは、、忘れた。
このくらいならば、ぐぐればたくさんヒットする。
以下、前提条件として、hdfsユーザで操作を行うものとする。
CDH3u2のhiveをインストールすれば、
hiveコマンドのパスなど、自動で通してくれるので、
後は環境まわりを整理すればよい。
とりあえず、hiveコマンドを実行すると、以下のようなエラーが出力される。
-bash-4.1$ hive Hive history file=/tmp/hdfs/hive_job_log_hdfs_201112070248_1529599074.txt Exception in thread "main" java.io.FileNotFoundException: /usr/lib/hadoop-0.20/.hivehistory (Permission denied) at java.io.FileOutputStream.open(Native Method) at java.io.FileOutputStream.<init>(FileOutputStream.java:194) at java.io.FileOutputStream.<init>(FileOutputStream.java:145) at java.io.FileWriter.<init>(FileWriter.java:73) at jline.History.setHistoryFile(History.java:45) at jline.History.<init>(History.java:37) at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:505) 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:186)
「/usr/lib/hadoop-0.20/.hivehistory」のアクセス権限がないよ、
と怒られている訳だが、
もちろんhiveを初めて動かすので、「.hivehistory」なるファイルなど存在しない。
しかも、
-bash-4.1$ ll /usr/lib | grep hadoop-0.20 drwxr-xr-x 9 root root 4096 12月 7 02:49 2011 hadoop-0.20
なことで、hdfsユーザじゃあ「/usr/lib/hadoop-0.20/」配下にファイルを作成できない。
なので、ひとまずrootユーザになって、このファイルをカキコできるように設定する。
[root@master conf]# touch /usr/lib/hadoop-0.20/.hivehistory [root@master conf]# chmod 775 /usr/lib/hadoop-0.20/.hivehistory [root@master conf]# ll /usr/lib/hadoop-0.20/.hivehistory -rwxrwxr-x 1 root root 0 12月 7 02:49 2011 /usr/lib/hadoop-0.20/.hivehistory [root@master conf]# chown hdfs:hadoop /usr/lib/hadoop-0.20/.hivehistory
上記設定が終われば、改めてhdfsユーザになってhiveコマンドを実行する。
-bash-4.1$ hive Hive history file=/tmp/hdfs/hive_job_log_hdfs_201112070250_1706396861.txt hive>
無事にhiveコンソールが起動した。
ためしに、何もないのは分かっているものの、テーブル一覧を表示してみる。
hive> show tables; 2011-12-06 17:50:30.812 GMT Thread[main,5,main] java.io.FileNotFoundException: derby.log (Permission denied) ---------------------------------------------------------------- 2011-12-06 17:50:31.212 GMT: Booting Derby version The Apache Software Foundation - Apache Derby - 10.4.2.0 - (689064): instance a816c00e-0134-147f-8d9f-000000948598 on database directory /var/lib/hive/metastore/metastore_db Database Class Loader started - derby.database.classpath='' OK Time taken: 4.65 seconds
「/usr/lib/hive/conf/hive-site.xml」の設定もそのままなので、
DBのディレクトリは初期値「 /var/lib/hive/metastore/metastore_db」のままとのこと。
え?そんなことより、
2011-12-06 17:50:30.812 GMT Thread[main,5,main] java.io.FileNotFoundException: derby.log (Permission denied)
の方を気にしろって??
ひとまず、現在hiveコマンドを実行しているディレクトリは
「/usr/lib/hadoop-0.20」なので、ここに上記ファイルを作成する。
[root@master hive]# touch derby.log [root@master hive]# chmod 777 derby.log [root@master hive]# chown hdfs:hadoop derby.log [root@master hive]# mv derby.log /usr/lib/hadoop-0.20/
上記設定後、改めてhiveコマンドを実行する。
-bash-4.1$ hive Hive history file=/tmp/hdfs/hive_job_log_hdfs_201112070330_264158222.txt hive> show tables; OK Time taken: 3.093 seconds
ってなカンジでエラーはでなくなった。
ただ、これが正しい設定なのかは、何とも言い難いが。。。