今回、Hortonworks Advent Calendar 2016 12/5の記事としてポストします。
正直、これから学習していこうという身なので、Deepな情報をお伝えする知識はございません。私のように「そんな深い話より、いまインストールでコケてんだけど・・・」という方が何処かに居られると信じて、初心者による初心者のための記事となっております。

この記事で書くこと

  • HDP SANDBOX 2.5をEC2上のDockerでrunして、Ambariの起動確認まで

この記事で書かないこと

  • HDP SANDBOX 2.5のチュートリアルの進め方、具体的な使い方

そもそも、なぜEC2に

今回、はじめてHadoop Summit Tokyoに参加させていただきました。その中で、Crash Course受講にあたって、SANDBOX環境が必要となりました。当初、mac book pro に入れようかと思ったのですが、ディスクの空き容量もなくて断念しまして、どこかのクラウドを使おうと思った次第で、その際にまとめた手順となっています。

スペック的に問題ない方は、わざわざクラウドを使う必要はないかと思いますので、こちらよりHDP SANDBOXをダウンロードすると良いでしょう。下記の形式で提供されています。ファイル・サイズは10GBとDLするには少し大きいですが。(時々、ダウンロードでエラーになることがあるようです)

  • Virtual Box用
  • VMware用
  • Docker用
  • Azure用(ただし、v2.4)

OSとEC2インスタンス

ガイドに記載の、前提条件は以下のとおりです。

  • Docker 1.12.1 or Newer
  • RAM 8GB
  • 30GB 以上の空き推奨

Docker 1.12のマニュアルによれば、CentOS7.x 以上と記載されていますので、2016年11月現在のAmazon Linuxは避けたほうが無難かもしれませんね。(Redhat6ベースだったと思うので)
今回は AWS Marcketplaceから以下のイメージを使いました。

インスタンスタイプはm4.largeを使いました(先日、値下げされて、お安くなりましたね)。東京リージョンでオンデマンド価格は$0.139/hですが、検証利用と割り切ってスポットインスタンスならば、$0.03/hくらいで使えそうですね。(もちろん、高騰することもありますので、、、)

セキュリティグループ

ひとまず私の場合は、 えいやーですべてのトラフィックをマイIPのみから接続許可にしました。ポート毎に制限するのであれば、下記のポートを開ける必要があります。数が多いので、ちょっと大変かもしれませんが、、、。

6080 , 9090 , 9000 , 8000 , 8020 , 42111 , 10500 , 16030 , 8042 , 8040 , 2100 , 4200 , 4040 , 8050 , 9996 , 9995 , 8080 , 8088 , 8886 , 8889 , 8443 , 8744 , 8888 , 8188 , 8983 , 1000 , 1100 , 11000 , 10001 , 15000 , 10000 , 8993 , 1988 , 5007 , 50070 , 19888 , 16010 , 50111 , 50075 , 50095 , 18080 , 60000 , 8090 , 8091 , 8005 , 8086 , 8082 , 60080 , 8765 , 5011 , 6001 , 6003 , 6008 , 1220 , 21000 , 6188 , 22 , 2222

Dcokerエンジンのインストール

Dockerのマニュアルに従って、docker-engineをインストールします。

$ ssh -i 秘密鍵ファイル centos@xx.xx.xx.xx
$ sudo yum update
$ sudo tee /etc/yum.repos.d/docker.repo <<-‘EOF’
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
$ sudo docker install docker-engine
$ sudo service docker start
Redirecting to /bin/systemctl start docker.service
$ 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?

Base Device Size の変更

デフォルトの設定では、docker の Base Device Size は10GBになっているようで、HDPのイメージがデカイのでこのままだとdocker loadで失敗します。ここに辿りつくのに苦労しました。。

$ sudo cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service
$ sudo vi /etc/systemd/system/docker.service
(中略)
ExecStart=/usr/bin/dockerd –storage-opt=dm.basesize=30G

余談:Hotrtonworks Community Connection

今回、docker loadでエラーする原因がまったく解らなくて途方に暮れていたのですが、Hadoop summitでHortonworksのコミュニティ Hortonworks Community Connection(HCC)の存在を知りまして、拙い英語でコミュニティに投げかけたところ、すぐにコメントいただき問題解決にいたりました。何か分からないこと、上手くいかないことなどあれば、HCCを利用すると良いですね。

Docker 再起動

保存したら、dockerを再起動して設定を反映します。docker infoの表示が下記のようになってればOKです。

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
$ sudo docker info
(中略)
Base Device Size: 32.21 GB

HDP SANDBOXイメージのダウンロード

SANDBOXイメージはS3で提供されているようですね。wgetは標準で入ってないので、curlを使います。

$ curl -O http://hortonassets.s3.amazonaws.com/2.5/HDP_2.5_docker.tar.gz

HDP SANDBOX イメージをロードする

ダウンロードしたイメージを、dockerにloadします。tar.gzのままでもdocker loadできるようですが、私は事前に解凍しました。

$ gunzip HDP_2.5_docker.tar.gz
$ sudo docker load < HDP_2.5_docker.tar
b1b065555b8a: Loading layer [==================================================>] 202.2 MB/202.2 MB
3901568415a3: Loading layer [==================================================>] 13.85 GB/13.85 GB
Loaded image: sandbox:latest
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
sandbox latest a4150ee4e70b 5 weeks ago 13.96 GB

HDP SANDBOXの起動

Gitからstartスクリプトを入手して実行します。$TERMの警告メッセージは無視します。

$ sudo bash start_sandbox.sh
Waiting for docker daemon to start up:
d761ac078bc5713e2cdb52bcd1432d229ea3b4889ef5f66cf805e296d1e23664
Starting mysql [ OK ]
Starting Flume [ OK ]
Starting Postgre SQL [ OK ]
Starting name node [ OK ]
Starting Oozie [ OK ]
Starting Zookeeper nodes [ OK ]
Starting Ambari server [ OK ]
Starting data node [ OK ]
Starting Ranger-admin [ OK ]
Starting Ambari agent [WARNINGS]
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
Safe mode is OFF
Starting Ranger-usersync [ OK ]
Starting NFS portmap [ OK ]
Starting Hdfs nfs [ OK ]
Starting Hive server [ OK ]
Starting Hiveserver2 [ OK ]
Starting Node manager [ OK ]
Starting Yarn history server [ OK ]
Starting Webhcat server [ OK ]
Starting Spark [ OK ]
Starting Mapred history server [ OK ]
Starting Resource manager [ OK ]
Starting Zeppelin [ OK ]

さぁ、HDPを使ってみよう

http://IPアドレス:8888にブラウザでアクセスし、Launch Dashboardをクリック。
hortonworks-sandbox-with-hdp-2-5-technical-preview-2016-12-03-17-37-34

Anbariのログイン画面が表示されますので、defaultのログインユーザ、パスワードでログインします。
ambari-2016-12-03-17-39-17

Anbariのダッシュボードが表示されたら、完了です。
あとはチュートリアルに従って、いろいろ試してみてください!
ambari-sandbox-2016-12-03-17-44-56


停止方法

SANDBOXを停止するときは、Ambariから操作します。
画面上部のHostsタブを開いて、対象のホストをクリックします。
ambari-sandbox-2016-12-03-18-59-07

Host Actions > Stop All Componentsをクリックします。
ambari-sandbox-2016-12-03-19-00-07

すべてがStopしたら停止完了です。
ambari-sandbox-2016-12-03-19-04-46

再始動方法

dockerデーモンが動いている場合は、$ sudo systemctl start dockerは不要です。
start_sandbox.shを実行すれば、SANDBOX docker イメージを再始動してくれます。

$ sudo systemctl start docker
$ sudo bash start_sandbox.sh


以上、実は11月にHORTONWORKS DATA CLOUD FOR AWSがリリースされているので、AWSで使うならそっちのほうが手っ取り早いかもしれませんが、HCCなどを通じて無事にインストール出来たことが嬉しかったので記事にしてみました。いずれは多くの方の参考になるような記事が書けるよう、これからしっかり勉強します!