CentOS7にApache Hadoop及びHiveを擬似分散モードでセットアップする手順のメモです。
hiveのmetastoreにはmariadb(mysql)を使用します。

CentOS7はminimaldvdからデフォルト状態でインストールした前提です。
使用したDVDイメージ: CentOS-7-x86_64-Minimal-1511.iso

以下の流れでセットアップをしていきます。

  • 前提となる設定など
  • Apache Hadoopのセットアップ
  • Apache Hiveのセットアップ

前提となる設定など

SELINUXの無効化

「/etc/selinux/config」を編集してSELINUXを無効にしておきます。

SELINUX=disabled

編集した後は、「setenforce 0」するか、rebootしておきます。

OpenJDKのインストール

以下のようにして、OpenJDKをインストールします。

# yum install java-1.8.0-openjdk-devel

MariaDBのインストール

以下のようにして、MariaDBをインストール&有効化します。

$ yum install mariadb-server
$ systemctl enable mariadb
$ systemctl start mariadb

SSHの設定

以下のように、sshでパスワード無しでlocalhostに接続できるようにしておきます。

$ ssh-keygen
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys

一度sshで、localhostに接続しておきます。 「~/.ssh/authorized_keys」にlocalhostのfingerprintを追加しておきます。

$ ssh localhost
$ exit

「~/.bashrc」にJAVA_HOMEを設定しておきます。

$ readlink $(readlink $(which java))
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.111-1.b15.el7_2.x86_64/jre/bin/java

上記コマンドで出力された結果を元に、以下のようにJAVA_HOMEを設定します。

$ echo "export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.111-1.b15.el7_2.x86_64" >> ~/.bashrc
$ . ~/.bashrc

参考: OpenJDKをyumインストールした場合のJAVA_HOMEの設定の仕方 | kakakikikekeのブログ http://kakakikikeke.blogspot.jp/2013/09/openjdkyumjavahome.html

Apache Hadoopのセットアップ

Apache Hadoopのダウンロードと展開

以下のページのリンクから「hadoop-2.7.3.tar.gz」を探し、そのURLを控えておきます。

Apache Download Mirrors - hadoop-common http://www.apache.org/dyn/closer.cgi/hadoop/common/

以下のように、hadoopをダウンロード&展開します。

$ wget ※控えたURL(http://…/hadoop-2.7.3.tar.gzのようになる)※
$ tar zxf hadoop-2.7.3.tar.gz

環境変数「HADOOP_HOME」を設定しておきます。

$ echo "export HADOOP_HOME=/home/`whoami`/hadoop-2.7.3" >> ~/.bashrc
$ . ~/.bashrc

HDFS設定と初期化

次に、疑似分散モードでHDFSを構成します。

参考: Hadoop: Setting up a Single Node Cluster. https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html

以下のコマンドでHDFSの格納先ディレクトリを作成します。

$ mkdir -p ~/var/lib/hdfs/{name,data}

core-site.xml/hdfs-site.xmlを以下のように変更します。

$HADOOP_HOME/etc/hadoop/core-site.xml

<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
  </property>
</configuration>

$HADOOP_HOME/etc/hadoop/hdfs-site.xml

<configuration>
  <property>
    <name>dfs.name.dir</name>
    <value>/home/※ユーザ名※/var/lib/hdfs/name</value>
  </property>
  <property>
    <name>dfs.data.dir</name>
    <value>/home/※ユーザ名※/var/lib/hdfs/data</value>
  </property>
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
</configuration>

以下のコマンドでnamenodeを初期化します。

$ $HADOOP_HOME/bin/hadoop namenode -format

namenodeの起動とhdfsへの接続確認

以下のコマンドでHDFSを起動します。

$ $HADOOP_HOME/sbin/start-dfs.sh

以下のコマンドでHDFSを参照できることを確認します。
※まだHDFS上にファイルが無いので一覧には何も表示されません。

$ $HADOOP_HOME/bin/hadoop fs -ls /

Apache Hiveのセットアップ

Apache Hiveのダウンロードと展開

以下のページのリンクから「apache-hive-1.2.1-bin.tar.gz」を探し、そのURLを控えておきます。

Apache Download Mirrors - hive
http://www.apache.org/dyn/closer.cgi/hive/

以下のように、hiveをダウンロード&展開します。

$ wget ※控えたURL(http://…/apache-hive-1.2.1-bin.tar.gzのようになる)※
$ tar zxf apache-hive-1.2.1-bin.tar.gz

環境変数「HIVE_HOME」を設定しておきます。

$ echo "export HIVE_HOME=/home/`whoami`/apache-hive-1.2.1-bin" >> ~/.bashrc
$ . ~/.bashrc

以下のコマンドで、インストール出来たことを確認します。

$ $HIVE_HOME/bin/hive -H

metastore用データベースの作成

以下のコマンドで、metastore用のデータベースを作成します。

$ mysql -u root
mysql> create database hive_metastore default character set 'latin1';
mysql> use hive_metastore;
mysql> create user 'hive'@'localhost' identified by '※パスワード※';
mysql> grant select, insert, update, delete, alter, create, index, references on hive_metastore.* to 'hive'@'localhost';

# databaseのcharactersetはlaten1にしておく必要があります。
# 以下を参照
# http://tagomoris.hatenablog.com/entry/20110310/1299738606

JDBCドライバの配置

mysqlのサイトからjdbcドライバをダウンロードします。
私の場合、以下のファイルをダウンロードしました。

ダウンロード元: http://dev.mysql.com/downloads/connector/j/
ファイル: mysql-connector-java-5.1.40.tar.gz

ダウンロードしたファイルを展開し、
$HIVE_HOME/lib/配下に、mysql-connector-java-5.1.40-bin.jarを配置します。

metastoreの設定

hive-site.xmlを以下のように変更します。

$HIVE_HOME/conf/hive-site.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value><![CDATA[jdbc:mysql://localhost/hive_metastore?autoReconnect=true&useSSL=false]]></value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>hive</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>※パスワード※</value>
  </property>
  <property>
    <name>datanucleus.fixedDatastore</name>
    <value>false</value>
  </property>
  <property>
      <name>hive.exec.local.scratchdir</name>
      <value>/tmp/hive</value>
  </property>
  <property>
    <name>hive.downloaded.resources.dir</name>
    <value>/tmp/hive</value>
  </property>
  <property>
    <name>hive.querylog.location</name>
    <value>/tmp/hive</value>
  </property>
  <property>
    <name>hive.server2.enable.doAs</name>
    <value>false</value>
  </property>
</configuration>

以下のコマンドでmetastoreを初期化します。

$ $HIVE_HOME/bin/schematool -dbType mysql -initSchema

Hiveコマンドからの接続

以下のコマンドを入力し、hiveプロンプトが表示されることを確認します。

$ $HIVE_HOME/bin/hive
hive> exit

hiveserver2の起動とbeelineでの接続

以下のコマンドでhiveserver2を起動します。

$ $HIVE_HOME/bin/hiveserver2

hiveserver2が起動した状態で、以下のようにbeelineで接続できることを確認します。

$ $HIVE_HOME/bin/beeline -u jdbc:hive2://localhost:10000/default -n `whoami`
0: jdbc:hive2://localhost:10000/default> !exit