HDP SANDBOX on SoftLayer by Rancher

@maru1981さんの[HDP SANDBOX on AWS EC2](http://www.stay-ko.be/hadoop/hdp_on_ec2)を参考に、SoftLayer上でHDP SANDBOXのDockerコンテナを稼働させて、Rancherで管理するまでを試してみた記録です。

# 1.SoftLayerでサーバの準備

SoftLayer上に仮想サーバ(1台)を以下の構成で作成します。

|項目|設定内容|備考|
|:-----------------|:------------------|:------------------|
|Data Center      |SJC01 - San Jose| Hortonworks本社の近くということで！|
|Computing Instance|4 x 2.0 GHz Cores|-|
|RAM|16GB|8GB以上必要です。|
|ディスク|100GB|1台でOKです。|
|Operating System|CentOS7.x - Minimal Install(64 bit) |HDP SANDBOXは確かRHEL系だったのでCentOSにしました。|

# 2.Dockerのインストール

最新のDocker-engineをインストールします。
作業は、rootユーザで行いました。

```コマンド
# yum update -y

# wget -qO- https://get.docker.com/ | sh
+ sh -c 'sleep 3; yum -y -q install docker-engine'
warning: /var/cache/yum/x86_64/7/docker-main-repo/packages/docker-engine-1.12.3-1.el7.centos.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID 2c52609d: NOKEY
Public key for docker-engine-1.12.3-1.el7.centos.x86_64.rpm is not installed
Importing GPG key 0x2C52609D:
 Userid     : "Docker Release Tool (releasedocker) <docker@docker.com>"
 Fingerprint: 5811 8e89 f3a9 1289 7c07 0adb f762 2157 2c52 609d
 From       : https://yum.dockerproject.org/gpg
restorecon:  lstat(/var/lib/docker) failed:  No such file or directory
warning: %post(docker-engine-selinux-1.12.3-1.el7.centos.noarch) scriptlet failed, exit status 255
Non-fatal POSTIN scriptlet failure in rpm package docker-engine-selinux-1.12.3-1.el7.centos.noarch

If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:

  sudo usermod -aG docker your-user

Remember that you will have to log out and back in for this to take effect!

# docker version
Client:
 Version:      1.12.3
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   6b644ec
 Built:
 OS/Arch:      linux/amd64
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
```

yum install docker でのインストールは、CentOSのディストリビューションとしてのDockerとなり、バージョンはdocker.x86_64 0:1.10.3-46.el7.centos.14となりますので、公式のDocker-enginの最新版をインストールする場合は、wget -qO- https://get.docker.com/ | sh となります。

# 3.Dockerの設定

## a.Base Device Sizeの変更
Base Device Sizeがデフォルトの10GBだと、HDPのイメージ容量が大きくdocker loadで失敗するとのことなので、10GBから30GBに変更します。

```コマンド
# cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service

# vi /etc/systemd/system/docker.service
=========================================================
ExecStart=/usr/bin/dockerd
↓変更
ExecStart=/usr/bin/dockerd --storage-opt=dm.basesize=30G
=========================================================
:wq

# systemctl daemon-reload

# systemctl restart docker

# docker info
(中略)
Base Device Size: 32.21 GB
```

## b.HDP SANDBOXイメージをロード

まずは、HDP SANDBOXイメージをダウンロードします。

```コマンド
# wget http://hortonassets.s3.amazonaws.com/2.5/HDP_2.5_docker.tar.gz
```

ダウンロードしたHDP SANDBOXイメージをdocker loadします。
少し時間を要します。

```コマンド
# docker load < HDP_2.5_docker.tar.gz
docker load < HDP_2.5_docker.tar.gz
b1b065555b8a: Loading layer 202.2 MB/202.2 MB
3901568415a3: Loading layer 13.85 GB/13.85 GB
Loaded image: sandbox:latest

# docker images
sandbox                   latest              a4150ee4e70b        5 weeks ago         13.96 GB
```

# 4.HDP SANDBOXの起動

起動スクリプトを作成します。
公式のstart_sandbox.shの内容を[こちら](https://github.com/hortonworks/tutorials/blob/hdp-2.5/tutorials/hortonworks/hortonworks-sandbox-hdp2.5-guide/start_sandbox.sh)からコピーします。

```コマンド
# vi start_sandbox.sh
=======================================================================
#!/bin/bash
echo "Waiting for docker daemon to start up:"
until /usr/bin/docker ps 2>&1| grep STATUS>/dev/null; do  sleep 1; done;  >/dev/null
/usr/bin/docker ps -a | grep sandbox
if [ $? -eq 0 ]; then
 /usr/bin/docker start sandbox
else
docker run -v hadoop:/hadoop --name sandbox --hostname "sandbox.hortonworks.com" --privileged -d \
-p 6080:6080 \
-p 9090:9090 \
-p 9000:9000 \
-p 8000:8000 \
-p 8020:8020 \
-p 42111:42111 \
-p 10500:10500 \
-p 16030:16030 \
-p 8042:8042 \
-p 8040:8040 \
-p 2100:2100 \
-p 4200:4200 \
-p 4040:4040 \
-p 8050:8050 \
-p 9996:9996 \
-p 9995:9995 \
-p 8080:8080 \
-p 8088:8088 \
-p 8886:8886 \
-p 8889:8889 \
-p 8443:8443 \
-p 8744:8744 \
-p 8888:8888 \
-p 8188:8188 \
-p 8983:8983 \
-p 1000:1000 \
-p 1100:1100 \
-p 11000:11000 \
-p 10001:10001 \
-p 15000:15000 \
-p 10000:10000 \
-p 8993:8993 \
-p 1988:1988 \
-p 5007:5007 \
-p 50070:50070 \
-p 19888:19888 \
-p 16010:16010 \
-p 50111:50111 \
-p 50075:50075 \
-p 50095:50095 \
-p 18080:18080 \
-p 60000:60000 \
-p 8090:8090 \
-p 8091:8091 \
-p 8005:8005 \
-p 8086:8086 \
-p 8082:8082 \
-p 60080:60080 \
-p 8765:8765 \
-p 5011:5011 \
-p 6001:6001 \
-p 6003:6003 \
-p 6008:6008 \
-p 1220:1220 \
-p 21000:21000 \
-p 6188:6188 \
-p 61888:61888 \
-p 2222:22 \
sandbox /usr/sbin/sshd -D
fi
#docker exec -t sandbox /etc/init.d/startup_script start
docker exec -t sandbox make --makefile /usr/lib/hue/tools/start_scripts/start_deps.mf  -B Startup -j -i
docker exec -t sandbox nohup su - hue -c '/bin/bash /usr/lib/tutorials/tutorials_app/run/run.sh' &>/dev/nul
docker exec -t sandbox touch /usr/hdp/current/oozie-server/oozie-server/work/Catalina/localhost/oozie/SESSIONS.ser
docker exec -t sandbox chown oozie:hadoop /usr/hdp/current/oozie-server/oozie-server/work/Catalina/localhost/oozie/SESSIONS.ser
docker exec -d sandbox /etc/init.d/tutorials start
docker exec -d sandbox /etc/init.d/splash
docker exec -d sandbox /etc/init.d/shellinaboxd start
=======================================================================
:wq

# chmod +x start_sandbox.sh

# bash start_sandbox.sh
```

# 5.HDPのスタート

ブラウザを起動して、http://サーバのIPアドレス:8888/ にアクセスし、Launch Dashboardを選択します。

![launch_dashboard.png](https://qiita-image-store.s3.amazonaws.com/0/61606/f90e09af-0909-aa94-e74f-d2d3cf9bfbad.png)

Ambariのログイン画面が表示されたら、以下のデフォルトのUsername/Passwordでログインします。

Username：maria_dev
Password：maria_dev

![ambari.png](https://qiita-image-store.s3.amazonaws.com/0/61606/1361e261-d6ba-0ee4-9265-070bf7479dbe.png)

ログイン後にダッシュボードが表示されます。

![ambari2.png](https://qiita-image-store.s3.amazonaws.com/0/61606/f1af02eb-792b-c69e-d81f-c750b9019ba1.png)

以上でHDP SANDBOXの環境構築は終了となります。

# 6.Rancher Agentのインストール

Rancherのマネージャホストの構築されたことを前提しますので、Rancherマネージャホストの構築は「[Hadoop + Yarn Docker on SoftLayer by Rancher](http://qiita.com/cyberblack28/items/4c9c36f3a49622594c55)」を参照してください。

Rancherのバージョンはv1.2.0、言語環境は日本語としています。

## a.Rancherの環境を作成
Rancherの管理画面にログインして、上部メニュー「環境」から「環境を管理」を選択します。

![rancher1.png](https://qiita-image-store.s3.amazonaws.com/0/61606/c5bbf7b5-1e36-4106-3a75-211d51624cd6.png)

「環境を追加」を選択します。

![rancher2.png](https://qiita-image-store.s3.amazonaws.com/0/61606/0dd24c8e-4631-06dd-bd11-1666e90baa31.png)

名前をHDP(任意名)にして、「作成」ボタンを押下します。

![rancher3.png](https://qiita-image-store.s3.amazonaws.com/0/61606/bfa5e427-e7f4-1159-c5d8-d0c2ae96cde5.png)

上部メニュー「インフラストラクチャ」から「ホスト」を選択します。そして、「ホストを追加」ボタンを押下します。

![rancher4.png](https://qiita-image-store.s3.amazonaws.com/0/61606/1233ed1c-2b82-52d7-4dbc-62e7f78ecaa4.png)

赤枠のコマンドをコピーして、サーバで実行します。

![rancher5.png](https://qiita-image-store.s3.amazonaws.com/0/61606/643be4bc-6510-de4f-c5eb-4945fb956913.png)

コマンド実行後、コンテナのPullが完了した後に「閉じる」ボタンを押下します。

```コマンド
# docker run -d --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.1.0 http://RancherマネージャーホストのIPアドレス:8080/v1/scripts/7E0CA449959F4B634E4D:1480946400000:uLwKStkhQHBCuPz4j9eoqm0NDM
```

上部メニュー「インフラストラクチャ」から「コンテナ」を選択して、対象のコンテナを選択します。

![rancher6.png](https://qiita-image-store.s3.amazonaws.com/0/61606/58718b76-7b98-3cb9-514c-9674ee460149.png)

以下のようにHDP SANDBOXコンテナのリソースの状態等を監視及び管理できます。

![screencapture-169-54-135-242-8080-env-1a2876-infra-containers-1i4155-ports-1480950589008.png](https://qiita-image-store.s3.amazonaws.com/0/61606/7b1c5801-4a38-e702-748c-c53bf0a87c71.png)

***

以上でHDP SANDBOX on SoftLayer by Rancherは完了となります。

今回はSoftLayerで実施しましたが、こちらの内容でGCP、Azure、AWS、その他のクラウドでも実施できると思いますので、試してみましょう！

最後になりますが、@maru1981さん、非常に参考になりました。感謝いたします。

参考サイト

- [HDP SANDBOX on AWS EC2](http://www.stay-ko.be/hadoop/hdp_on_ec2)
- [Hadoop + Yarn Docker on SoftLayer by Rancher](http://qiita.com/cyberblack28/items/4c9c36f3a49622594c55)