@maru1981さんのHDP SANDBOX on AWS 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の内容をこちらからコピーします。
# 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を選択します。
Ambariのログイン画面が表示されたら、以下のデフォルトのUsername/Passwordでログインします。
Username:maria_dev
Password:maria_dev
ログイン後にダッシュボードが表示されます。
以上でHDP SANDBOXの環境構築は終了となります。
6.Rancher Agentのインストール
Rancherのマネージャホストの構築されたことを前提しますので、Rancherマネージャホストの構築は「Hadoop + Yarn Docker on SoftLayer by Rancher」を参照してください。
Rancherのバージョンはv1.2.0、言語環境は日本語としています。
a.Rancherの環境を作成
Rancherの管理画面にログインして、上部メニュー「環境」から「環境を管理」を選択します。
「環境を追加」を選択します。
名前をHDP(任意名)にして、「作成」ボタンを押下します。
上部メニュー「インフラストラクチャ」から「ホスト」を選択します。そして、「ホストを追加」ボタンを押下します。
赤枠のコマンドをコピーして、サーバで実行します。
コマンド実行後、コンテナの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
上部メニュー「インフラストラクチャ」から「コンテナ」を選択して、対象のコンテナを選択します。
以下のようにHDP SANDBOXコンテナのリソースの状態等を監視及び管理できます。
以上でHDP SANDBOX on SoftLayer by Rancherは完了となります。
今回はSoftLayerで実施しましたが、こちらの内容でGCP、Azure、AWS、その他のクラウドでも実施できると思いますので、試してみましょう!
最後になりますが、@maru1981さん、非常に参考になりました。感謝いたします。
参考サイト