GCEのhadoopにhiveをインストールする、そうubuntuから。

# **Google compute engineのhadoopにhiveをインストールします**
GCEのhadoopにhiveをインストールする方法を色々検索したけど情報が少なすぎてまとめることにしました。  

公式っぽいドキュメントとしては下記のものがあります。
基本その通りに実施すれば実行できるようになるのですが、ドキュメントがあまりにも不親切というか分かりにくいというか・・・。

https://github.com/GoogleCloudPlatform/solutions-apache-hive-and-pig-on-google-compute-engine

* 事前にgcloudでの接続が可能な設定を行っておきます。
* 基本的に作業はubuntuのtermで行います。（readmeにはこれが抜けている）
* 事前にhadoopのvmを作成しておきます。
* gsutil と gcutil コマンドがubuntuで実行できることを確認しておく。

## **本当に必要かわからんがやっておく**
readmeに書いてあるのでとりあえず下記を実行しておく。
### **プロジェクトのセット**
> gcloud config set project \<project ID\>

project IDは、GCPで作成済みのはずです。
![image](https://qiita-image-store.s3.amazonaws.com/0/84915/94a629aa-5342-ff7a-f02d-bf267cdf3b9f.png)
### **バケットの作成**
これもreadmeに書いてるけど、
> gsutil mb gs://\<bucket name\>

バケットが作成済みの場合もあります。
バケット名は、[ストレージ][cloud Storage][ストレージ ブラウザ]を開くとみれます。
![image](https://qiita-image-store.s3.amazonaws.com/0/84915/4ba8fb64-4109-3298-c0fe-e9c5cf138131.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/84915/55d14fe5-0565-390e-d502-be7f91aad6d5.png)

### **パッケージのダウンロード**
このセクションも説明不足すぎてわかりにくい。
ダウンロード先は実行するユーザのhomeで問題ない。
> $ wget https://github.com/GoogleCloudPlatform/solutions-apache-hive-and-pig-on-google-compute-engine/archive/master.zip
> $ unzip master.zip

### **Hive パッケージのセットアップ**
上記でunzipしたフォルダ(solutions-apache-hive-and-pig-on-google-compute-engine-master)に移動する。
この位置をreadmeではサンプルアプリケーションルートディレクトリと呼んでいる。(root directory of the sample application.)
このフォルダの下で以下のコマンドを実行する。

> $ mkdir -p packages/hive

作成packages/hive下にhiveをダウンロードする。自分は、hive-0.12.0.tar.gzにしました。

> $ cd packages/hive
> $ wget http://archive.apache.org/dist/hive/hive-0.12.0/hive-0.12.0.tar.gz

### **project_properties.shの編集**
サンプルアプリケーションルートディレクトリにあるproject_properties.shを編集します。
編集する項目は以下の４つです。
各項目を自分の環境に合わせて書き直します。

>readonly GCS_PACKAGE_BUCKET=myproject-bucket
readonly ZONE=us-central1-a
readonly MASTER=myproject-hm
readonly HADOOP_HOME=/home/hadoop/hadoop-install

HADOOP_HOMEは自分の環境のhadoopではhadoop-insallだったので書き換えています。
分からない場合、gceのVM側でwhichしてみます。

>$ which hadoop
/home/hadoop/hadoop-install/bin/hadoop

でbin以下がHADOOP_HOMEになります。

### **cloud storageにパッケージをプッシュ**
サンプルアプリケーションルートディレクトリから以下のシェルを実行してパッケージをプッシュします。
> $ ./scripts/packages-to-gcs__at__host.sh

### **インストール実行**
サンプルアプリケーションルートディレクトリから以下のシェルを実行してインストールを実行します。
> $ ./scripts/install-packages-on-master__at__host.sh

成功すればGCE側にhdpuserが作成されます。
### **確認**
ここからreadmeと若干異なります。
また、ここからはGCEにgcloudで接続してhadoop vm上での実行です。

> sudo sudo -i -u hdpuser

hiveの起動
>$ hive

起動時に以下のメッセージが出る場合、HADOOP_HOMEかHADOOP_PREFIXが正しくhadoopのインストールディレクトリを指していないことが原因です。

> Cannot find hadoop installation: \$HADOOP_HOME or $HADOOP_PREFIX must be set or hadoop must be in the path

環境変数を確認してください。
自分の環境では、最初に
> HADOOP_PREFIX=/home/hadoop/hadoop

となっていましたので、
>HADOOP_PREFIX=/home/hadoop/hadoop-install

と修正しています。
project_properties.shの内容が正しく設定されていれば問題ないと思うので、project_properties.shを修正してセットアップをし直すのもいいかもしれません。

hiveが起動したらプロンプトがこんな感じに。
> hive\> 


下記のテーブルを作成します。（readmeのままです）
> CREATE TABLE passwd (
  user STRING,
  dummy STRING,
  uid INT,
  gid INT,
  name STRING,
  home STRING,
  shell STRING
)
ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ':'
>STORED AS TEXTFILE;

次にデータをロードします。
> hive|>LOAD DATA LOCAL INPATH '/etc/passwd' OVERWRITE INTO TABLE passwd;

readmeではgsからロードになっていますが、まだ上手くいっていないので直接ロードします。

ロードできたらselectしてみます。

````
hive> select * from passwd;
OK
root	x	0	0	root	/root	/bin/bash
daemon	x	1	1	daemon	/usr/sbin	/bin/sh
bin	x	2	2	bin	/bin	/bin/sh
sys	x	3	3	sys	/dev	/bin/sh
sync	x	4	65534	sync	/bin	/bin/sync
games	x	5	60	games	/usr/games	/bin/sh
man	x	6	12	man	/var/cache/man	/bin/sh
lp	x	7	7	lp	/var/spool/lpd	/bin/sh
mail	x	8	8	mail	/var/mail	/bin/sh
news	x	9	9	news	/var/spool/news	/bin/sh
uucp	x	10	10	uucp	/var/spool/uucp	/bin/sh
proxy	x	13	13	proxy	/bin	/bin/sh
www-data	x	33	33	www-data	/var/www	/bin/sh
backup	x	34	34	backup	/var/backups	/bin/sh
list	x	38	38	Mailing List Manager	/var/list	/bin/sh
irc	x	39	39	ircd	/var/run/ircd	/bin/sh
gnats	x	41	41	Gnats Bug-Reporting System (admin)	/var/lib/gnats	/bin/sh
nobody	x	65534	65534	nobody	/nonexistent	/bin/sh
libuuid	x	100	101		/var/lib/libuuid	/bin/sh
ntp	x	101	103		/home/ntp	/bin/false
sshd	x	102	65534		/var/run/sshd	/usr/sbin/nologin
messagebus	x	103	105		/var/run/dbus	/bin/false
hadoop	x	500	500		/home/hadoop	/bin/bash
hdpuser	x	1002	500		/home/hdpuser	/bin/bash
Time taken: 10.486 seconds, Fetched: 26 row(s)
hive> 
````

どうやらselectできたようです。