CDH5版Hiveのインストール手順

CDH版Hiveのインストール手順を今後のためにまとめておきます。
そのうち自動化したい。

# 前提条件

* 擬似分散環境
* OSはCentOS 7
* Javaはインストール済み
* PostgreSQLはインストール済み(Hive Metastore用)


# Clouderaのレポジトリ登録

```
# wget http://archive.cloudera.com/cdh5/redhat/7/x86_64/cdh/cloudera-cdh5.repo
# mv cloudera-cdh5.repo /etc/yum.repos.d/
```

インストールしたいCDHのバージョンを最新から変えたい場合は、
cloudera-cdh5.repoを編集する。

```
baseurl=https://archive.cloudera.com/cdh5/sles/11/x86_64/cdh/5/
```

を

```
baseurl= https://archive.cloudera.com/cdh5/sles/11/x86_64/cdh/5.3.3/
```

というようにすればよい。

# Hadoop擬似分散環境のインストール

## パッケージインストール

```
# yum clean all
# yum install hadoop-conf-pseudo
```

## HDFSのフォーマット＆起動

```
# sudo -u hdfs hdfs namenode -format
# service hadoop-hdfs-namenode start
# service hadoop-hdfs-datanode start
# service hadoop-hdfs-secondarynamenode start
# /usr/lib/hadoop/libexec/init-hdfs.sh
```

## YARNクラスタの起動

```
# service hadoop-yarn-resourcenamager start
# service hadoop-yarn-nodemanager start
```

# Hiveインストール

## パッケージインストール

```
# yum install hive hive-metastore hive-server2
```

## Hiveメタストアの設定

別途インストールしたPostgreSQLを利用します。バージョンは9.5RC1。

### PostgreSQLの設定

postgresql.conf

```postgresql.conf
listen_addresses = '*'
standard_conforming_strings = off
```

```pg_hba.conf
host    all             all             0.0.0.0/32              md5
```

### PostgreSQL JDBC Driverのインストール

```
# wget https://jdbc.postgresql.org/download/postgresql-9.4-1206-jdbc42.jar
# mv postgresql-9.4-1206-jdbc42.jar /usr/lib/hive/lib/
```

### Hive用ユーザ、データベースの作成

```
# su - postgres
$ psql
psql (9.5rc1)
Type "help" for help.

[local] 34253 postgres=# CREATE USER hive WITH PASSWORD 'password';
CREATE ROLE
[local] 34253 postgres=# CREATE DATABASE metastore;
CREATE DATABASE
[local] 34253 postgres=# \q
```

Hiveが使うテーブルやインデックスなどを作成するスクリプトを流す。
このスクリプトは相対パスを使っているので、スクリプトが置いてあるディレクトリに移動してから実行する必要がある。

```
$ cd /usr/lib/hive/scripts/metastore/upgrade/postgres/
$ psql -d metastore -f hive-schema-1.1.0.postgres.sql
```

作成したテーブルやインデックスへのアクセス権限を上で作成したユーザに与える。

```
$ psql metastore
psql (9.5rc1)
Type "help" for help.

metastore=# \pset tuples_only on
Tuples only is on.
metastore=# \o /tmp/grant-privs
metastore=#  SELECT 'GRANT SELECT,INSERT,UPDATE,DELETE ON "'  || schemaname || '". "' ||tablename ||'" TO hive ;'
FROM pg_tables
 WHERE tableowner = CURRENT_USER and schemaname = 'public';
metastore=# \o
metastore=# \pset tuples_only off
Tuples only is off.
metastore=# \i /tmp/grant-privs
```

## Hiveの設定

```hive-site.xml
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:postgresql://localhost:5432/metastore</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>org.postgresql.Driver</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>hive</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>password</value>
</property>

<property>
  <name>datanucleus.autoCreateSchema</name>
  <value>false</value>
</property>

<property>
  <name>hive.metastore.uris</name>
  <value>thrift://localhost:9083</value>
  <description>IP address (or fully-qualified domain name) and port of the metastore host</description>
</property>

<property>
  <name>hive.support.concurrency</name>
  <description>Enable Hive's Table Lock Manager Service</description>
  <value>true</value>
</property>

<property>
  <name>hive.zookeeper.quorum</name>
  <description>Zookeeper quorum used by Hive's Table Lock Manager</description>
  <value>localhost:2181</value>
</property>

</configuration>
```

## Hive Metastoreの起動

```
# service hive-metastore start
```

## HiveServer2のインストール

### ZooKeeperのインストール＆起動

```
# yum install zookeeper-server
# service zookeeper-server init --myid=1
Using myid of 1
# service zookeeper-server start
```

### HiveServer2の起動

```
# start hive-server2 start
```

### beelineからの接続確認

```
# su - hive
$ beeline
Beeline version 1.1.0-cdh5.5.1 by Apache Hive
beeline> !connect jdbc:hive2://localhost:10000 hive password org.apache.hive.jdbc.HiveDriver
Connecting to jdbc:hive2://localhost:10000
Connected to: Apache Hive (version 1.1.0-cdh5.5.1)
Driver: Hive JDBC (version 1.1.0-cdh5.5.1)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://localhost:10000>
0: jdbc:hive2://localhost:10000> SHOW TABLES;
+-----------+--+
| tab_name  |
+-----------+--+
+-----------+--+
No rows selected (3.6 seconds)
0: jdbc:hive2://localhost:10000> !quit
Closing: 0: jdbc:hive2://localhost:10000
```

以上。
長すぎ。