Apache Hadoopのインストール手順

## 概要
Apache Hadoop と Hive のインストール手順です。
それぞれ別記事に分けて書きます。

## 目次
1. Apache Hadoopのインストール手順
2. [Apache Hiveのインストール手順](http://qiita.com/Esfahan/items/a6f2107876e5a712a72c)
3. [HadoopでWordCountをやってみる](http://qiita.com/Esfahan/items/bdd254dccf29da22cc7c)

## Apache Hadoopのインストール手順
Hadoopとは、ビッグデータを取り扱うための、分散処理のフレームワーク、基盤です。
この手順では、擬似的にスタンドアローンモード（ローカルモード）で構築します。

## 環境
- CentOS 7.1
- **Hadoop 2.8.0**
- **MariaDB 5.5.52**
- **java 1.8.0**
- Hive 2.3.0
- HBase 1.3.1

このページでは太字のもののインストールを行います。

## SELINUXの無効化
SELINUXを無効にします。

```
$ sudo vi /etc/selinux/config
```

```lang:/etc/selinux/config
SELINUX=disabled
```

## 依存関係インストール

```
$ sudo yum update -y
$ sudo yum -y groupinstall 'Development tools'
```

## ssh設定
localhostにパスワード無しでssh接続できるようにします。

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

ssh接続できるか検証

```
$ ssh localhost
```


## MariaDBのインストール
MariaDBをインストールします。

```
$ sudo yum -y install mariadb-server
$ sudo systemctl enable mariadb
$ sudo systemctl start mariadb
```

## metastore用データベースの作成
databaseの文字コードはlatin1にしておく必要があります。
参考：http://tagomoris.hatenablog.com/entry/20110310/1299738606

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

## javaのインストール
以下を参考にしてインストール
[CentOS7にJava OpenJDK8のインストール](https://qiita.com/Esfahan/items/60cf425514c66553bd42)

## Hadoopのインストール
以下からページからApache Hadoopをダウンロードして展開します。

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

```
$ wget http://ftp.jaist.ac.jp/pub/apache/hadoop/common/hadoop-2.8.0/hadoop-2.8.0.tar.gz
$ tar zxfv hadoop-2.8.0.tar.gz
```

### 環境変数設定
HADOOP_HOMEを環境変数に設定します。

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

## HDFS初期化
HDFS（Hadoop Distributed File System）の設定と初期化をします。

疑似分散モードでHDFSを構成します。
HDFSの保存先ディレクトリを作成します。

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

core-site.xml, hdfs-site.xmlをそれぞれ、以下の内容に書き換えます。

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

```xml:$HADOOP_HOME/etc/hadoop/core-site.xml
<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
  </property>
</configuration>
```

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

`<value>/home/vagrant</value>` のユーザー名には、環境に合わせてください。

```xml:$HADOOP_HOME/etc/hadoop/hdfs-site.xml
<configuration>
  <property>
    <name>dfs.name.dir</name>
    <value>/home/vagrant/var/lib/hdfs/name</value>
  </property>
  <property>
    <name>dfs.data.dir</name>
    <value>/home/vagrant/var/lib/hdfs/data</value>
  </property>
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
</configuration>
```

### 初期化コマンド
namenodeを初期化します。

```
$ $HADOOP_HOME/bin/hadoop namenode -format

DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.

17/07/19 02:07:00 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   user = vagrant
STARTUP_MSG:   host = localhost/127.0.0.1
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 2.8.0
```

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

HDFSを起動します。

```
$ $HADOOP_HOME/sbin/start-dfs.sh

Starting namenodes on [localhost]
localhost: starting namenode, logging to /home/vagrant/hadoop-2.8.0/logs/hadoop-vagrant-namenode-localhost.localdomain.out
localhost: starting datanode, logging to /home/vagrant/hadoop-2.8.0/logs/hadoop-vagrant-datanode-localhost.localdomain.out
Starting secondary namenodes [0.0.0.0]
The authenticity of host '0.0.0.0 (0.0.0.0)' can't be established.
ECDSA key fingerprint is 24:23:14:32:58:14:91:76:55:91:20:87:e3:dc:30:c7.
Are you sure you want to continue connecting (yes/no)? yes
```

ちなみに停止は以下です。

```
$ $HADOOP_HOME/sbin/stop-dfs.sh
```

HDFSを参照できるか確認します。
この時点ではまだファイルは存在しないので、結果はなくてOKです。

```
$ $HADOOP_HOME/bin/hadoop fs -ls /
```

hadoopのインストールはこれで完了です。

次項：[Apache Hiveのインストール手順](http://qiita.com/Esfahan/items/a6f2107876e5a712a72c)


## 参考
- [Hadoop(ハドゥープ)とは？：ビッグデータ処理を支える「基盤」](https://www.graffe.jp/blog/899/)
- [Hiveとは？：Hadoop上で稼動するデータベースマネージメントシステム(DBMS)](https://www.graffe.jp/blog/884/)
- [CentOS7 Apache Hadoop インストール](https://www.server-world.info/query?os=CentOS_7&p=hadoop)
- [CentOSでHadoopとHiveを試してみる（2015年秋編）](http://qiita.com/zaburo/items/202abc3be628301b277e)
- [CentOS7への擬似分散モードでのhadoop及び、hiveセットアップ手順](http://takemikami.com/2016/12/14/CentOS7hadoophive.html)
- [Hadoopのインストールと実行方法（スタンドアロンモード）](http://www.task-notes.com/entry/20160213/1455358772)
- [Hiveのインストールと実行方法](http://www.task-notes.com/entry/20160217/1455678000)
- [HBaseのインストールと実行方法（スタンドアロンモード）](http://www.task-notes.com/entry/20160211/1455179303)