簡単！dashDB Local データ分析基盤を構築してみた。

##**dashDB Localとは？**##
今まではdashDBというクラウドデータウェアハウスを検証した記事を書いてきましたが、今回からはDockerコンテナベースで提供されるDWHソフトウェアアプライアンスであるdashDB Localの検証に関する記事をご紹介していきたいと思います。[**IBM dashDB Local Webページ**](http://www.ibm.com/analytics/us/en/technology/cloud-data-services/dashdb-local/)はこちらで、What is dashDB Local？という形でdashDB Localの説明が載っています。Webページに書いてあることを整理すると以下のような感じです。

##[ IBM dashDB Local 概要 ](https://www.youtube.com/watch?v=F_0VwrBOU2k)##
**・ プライベートクラウド、ハイブリッドクラウドに最適化されたデータ分析プラットフォーム。**
**・ DWHワークロード最適化されたDockerコンテナとして提供されるソフトウェアアプライアンス**
**・ クラウドの柔軟性を持ちながら、データとアプリケーションをユーザーが制御可能。**
**・ シングルノードから、マルチノード構成(最大24ノード)までスケールアウト & アップに対応。**
**・ インメモリカラムナーDB、カラム圧縮、データスキッピング、MPP並列アーテクチャ実装**
**・ Apache Sparkとの統合による構造化データと非構造化データの分析を同一コンテナで実施可能**
**・ マネージドクラウドサービスで提供されるdashDBと共通のSQLエンジン、管理コンソール。**
**・ 他のRDBやHadoopとのデータフェデレーション機能を実装。**
**・ クラウドライクな使用した分だけの月払いライセンス体系**

Dockerコンテナで提供されるソフトウェアアプライアンスであり、オンプレ、プライベートクラウド、パブリッククラウドと場所を選ばず簡単かつ迅速にDWHサービス展開でき、コストも使用した期間と規模に応じた体系となっているとのこと。

というわけで無償評価版を使ってBluemix InfrastructureのIaaS環境に導入してどんな感じか使ってみたいと思います。

##**dashDB Local 評価版 導入の流れ**##
dashDB Local評価導入作業は、Docker IDの登録作業から始まり、以下のような流れになっています。

**Step1　評価版入手のための事前登録作業**
**Step2. Linuxをインストールする。(今回はRHEL7.3を導入)**
**Step3. OS設定(基本ネットワーク設定、ファイルシステム作成)**
**Step4. docker engineをインストールと起動**
**Step5. dashDB Local コンテナの作成、起動**

※本手順は導入先Linuxサーバー環境が外部ネットワーク(docker hubリポジトリ)に接続できることを前提とした手順となります。外部ネットワークに接続できない環境への導入については手順が異なります。

##**Step1.dashDB Local 評価版入手のための事前登録作業**##
dashDB Local評価版のコンテナは事前登録することで、Docker Hubからダウンロード(Pull)することができるようになっています。(注:ここでいうダウンロードはdocker pullコマンドを意味します。)　そのため、まずDocker IDとIBM IDを作成し、次に作成したDocker IDとIBM IDの紐付けをおこなう事前登録作業のステップを踏む必要があります。この作業完了後に、docker hubからdashDB Local イメージをダウンロードすることができます。

*1).*  [**Docker社 HP**](https://hub.docker.com/)にアクセスして、**Docker ID**を作成します。
参考: Docker Hub アカウントの登録
http://docs.docker.jp/docker-hub/accounts.html#registration-for-a-docker-hub-account
※docker ID作成後は必ずdocker hubにログインして、初期パスワードを変更してください。

*2).* [**dashDB Local Webページ**](http://www.ibm.com/analytics/us/en/technology/cloud-data-services/dashdb-local/)にて、**[Try it free](https://www.ibm.com/account/us-en/signup/register.html?a=NDllOGRkMjMtMTI0My00&ctx=C001&cc=us&lc=en&source=mrsaas-trial-ibmid&pkg=ov51381&S_TACT=000000VR&S_OFF_CD=10000739)**をクリック、IBM IDの作成と先ほど作成したDocker IDを登録してIDの紐付けをおこないます。その後24時間以内にDockerからdashDB Local リポジトリ（ibmdashDB）へのアクセスが可能となった承認メールが届きます。

これで評価版をダウンロードするための手順は完了です。自分のdocker IDを使用してPublicに公開されているdocker Hub経由からdashDB Local をPullすることが可能となります。

##**Step2.パブリッククラウド仮想環境へのLinux OSの導入**##
今回はBluemix Infrastructure(旧SoftLayer)の仮想環境にLinuxを導入します。Bluemix Infrastructure(旧SoftLayer)って何？という方は下記サイトの資料を参照ください。

IBMのパブリッククラウド 「IBM Bluemix Infrastructure」のご紹介
http://www.slideshare.net/KazuhikoIsaji/soft-layer-20144-v4

CHANGE MAKERS IBM SoftLayer 1.2 仮想サーバーを起動するには？
https://www.change-makers.jp/docs/softlayer-config-guide/10292

今回の検証環境では下記仮想インスタンスをオーダーして導入を進めます。
![image](https://qiita-image-store.s3.amazonaws.com/0/94920/57ee7d89-7f84-e3e5-26e7-46e2d0403a00.png)
![image](https://qiita-image-store.s3.amazonaws.com/0/94920/040c53a7-14fe-fe49-44a6-bfcd878409d0.png)

ちなみにdashDB Local 導入前提条件は下記URLに記載があります。docker-engineがサポートされているLinux環境が前提となりますが、Windows, Mac環境でもLinux VM上に導入することはサポートされているようです。

dashDB Local prerequisites
https://www.ibm.com/support/knowledgecenter/SS6NHC/com.ibm.swg.im.dashdb.doc/admin/local_prereqs.html



##**Step3. OS設定(ネットワーク設定、ファイルシステム作成)**##
OS設定としては下記３つの項目のみを最低限実施すれば導入可能です。ファイアウォール設定等は環境に応じて任意で設定ください。

**3-1. /etc/hosts ファイルの環境にあわせて変更します。**

```text:コマンド例:
#vi  /etc/hosts 
127.0.0.1 localhost.localdomain localhost
10.132.60.211 dashlocal1.softlayer.com dashlocal1
161.202.120.51 dashlocal1_pub.softlayer.com dashlocal1_pub 
```
**3-2.SELinuxの無効化します。**

```text:コマンド例: 
1). rootユーザーにて/etc/selinux/config ファイルを編集し、SELLinux =　enforcing から　SELinux = disabledに変更します。
# vi /etc/selinux/config 

2).設定を確認
[root@xxxx ~]# cat /etc/selinux/config |grep permissive
SELINUX=disabled

3). OS再起動を行い、設定を有効化します。
# reboot
```
**3-3.dashDB Local用 ファイルシステムの作成します。**

```text:コマンド例: 
１). /dev/xvdbデバイス上で/dev/xvdb1 パーティションを作成する
# fdisk /dev/xvdc
・・・・省略
2). /dev/xvdc1 上に XFSファイルシステムを作成する。
# mkfs.xfs -d su=256k,sw=4  /dev/xvdc1
３). dashDB Local ディレクトリの作成
# mkdir /mnt/clusterfs
4). ファイルシステムのマウント
# mount /dev/xvdc1 /mnt/clusterfs 
```
※mkfs.xfsパラメータ設定はあくまで検証用に仮設定したものであり、全環境に最適なパラメータ設定を意味しているわけではありません。本番環境への導入にあたってはお客様環境に合わせて変更ください。


##**Step4. docker engineのインストールと起動**##
dashDB Local ホストへDockerエンジンのインストールとDocker Hubへのアクセス設定をおこないます。本手順は外部公開されているDocker HubのPublicリポジトリを使用してdashDB Localのインストールを行います。RHEL7.3へのdockerインストールについては下記URLの最新版マニュアルを参照の上、インストールください。

参考Red Hat Enterprise Linux Dokcerインストールマニュアル https://docs.docker.com/engine/installation/linux/rhel/

```text:コマンド例 
1). dashDB Local ホストへrootユーザーでログイン(もしくはsudoコマンドを追加して実行)します。

2). 既存のyumリポジトリを最新にアップデートします。
# yum update

3).　下記コマンドでyumリポジトリを追加します。
# tee /etc/yum.repos.d/docker.repo <<-'EOF' 
[dockerrepo] 
name=Docker Repository 
baseurl=https://yum.dockerproject.org/repo/main/centos/7/ 
enabled=1 
gpgcheck=1 
gpgkey=https://yum.dockerproject.org/gpg 
EOF

4) Dockerパッケージのインストールを実施します。
# yum install docker-engine

5).Dockerサービスを有効化し、開始します。
# systemctl enable docker.service
# systemctl start docker
```
※上記は外部ネットワークを経由してdockerエンジンのパッケージを取得する設定となります。使用しているLinux環境がインターネットに接続できない場合は、個別にdocker Engineのrpmを入手して転送、導入という手順を取る必要があります。

##**Step5. dashDB Local コンテナの作成、起動**##
次にDocker HubからdashDB Local イメージをダウンロードできるようにdocekr hubへログインします。

```text:コマンド例
docker login -u=<ユーザ名> -e=<メールアドレス> -p='<パスワード>'
docker run hello-world				・・・オプション (docker runのテスト)
```

```text:実行例
# docker login -u=UserName -e=UserName@jp.ibm.com -p='UserPassword'
WARNING: login credentials saved in /root/.docker/config.json
Login Succeeded
#
# docker pull hello-world
Using default tag: latest
Trying to pull repository registry.access.redhat.com/hello-world ... not found
Trying to pull repository docker.io/library/hello-world ... latest: Pulling from library/hello-world
79112a2b2613: Pull complete
4c4abd6d4278: Pull complete
Digest: sha256:4f32210e234b4ad5cac92efacc0a3d602b02476c754f13d517e1ada048e5a8ba
Status: Downloaded newer image for docker.io/hello-world:latest
#
```

次に、docker runコマンドを実行して、dashDB Local イメージの入手とコンテナの作成を実行します。

```text:コマンド例
# docker run -d -it --privileged=true --net=host --name=dashDB -v /mnt/clusterfs:/mnt/bludata0 -v /mnt/clusterfs:/mnt/blumeta0 ibmdashdb/local:latest-linux
```

```text:実行例
# docker run -d -it --privileged=true --net=host --name=dashDB -v /mnt/clusterfs:/mnt/bludata0 -v /mnt/clusterfs:/mnt/blumeta0 ibmdashdb/local:latest-linux
Unable to find image 'ibmdashdb/local:latest-linux' locally
latest-linux: Pulling from ibmdashdb/local
a3ed95caeb02: Pull complete
da71393503ec: Pull complete
34bf6bf9da39: Pull complete
e8d83c627eab: Pull complete
c47e651fb327: Pull complete
f5eec8fc7173: Pull complete
6c6e86fa1162: Pull complete
e1bcbe278a8e: Pull complete
8647edfef5d1: Pull complete
e2c709c7fa78: Pull complete
ddb8a7f7fe8d: Pull complete
9f792f5a8035: Pull complete
e263a65f87d9: Pull complete
2e725a245dff: Pull complete
aec3afd6c84d: Pull complete
5679e1b73f18: Pull complete
579447e11045: Pull complete
3bfb7547be3b: Pull complete
caedad148428: Pull complete
b7935a0d5b2a: Pull complete
8ecce93c584a: Pull complete
c1b08a79bb8d: Pull complete
dd931f838d1e: Pull complete
f3fbfb80bf89: Pull complete
59f33fb407f5: Pull complete
095a19ef641d: Pull complete
fdd95128045d: Pull complete
937b7e8e1ec1: Pull complete
Digest: sha256:a67cc401ed7bb6562359cec454767d1776d39483c08f9c71da4a0fbed414ebdc
Status: Downloaded newer image for ibmdashdb/local:latest-linux
3405fcd10c81dc741ffc447190b19a0e32402f9cc62ef863c453457e0f025b56
```

これで導入作業で実施すべきことは終了です。コンテナの初期化、dashDB Local起動状態の確認するには下記のコマンドで確認できます。全てのサービスがSUCCESSで起動したこと確認します。

```text:実行例
# docker logs --follow dashDB
systemd 219 running in system mode. (+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GN
UTLS +ACL +XZ -LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN)
Detected virtualization docker.
Detected architecture x86-64.

Welcome to dashDB Local!

・・・(省略)・・・

[ 3156.935843] start_dashDB_local.sh[173]: ###########################################################################
[ 3156.938745] start_dashDB_local.sh[173]: #####           --- dashDB stack service status summary ---           #####
[ 3156.951499] start_dashDB_local.sh[173]: ###########################################################################
[ 3160.916977] start_dashDB_local.sh[173]: Redirecting to /bin/systemctl status  slapd.service
[ 3160.917365] start_dashDB_local.sh[173]: SUMMARY
[ 3160.917635] start_dashDB_local.sh[173]: LDAPrunning                   : SUCCESS
[ 3160.917897] start_dashDB_local.sh[173]: dashDBtablesOnline            : SUCCESS
[ 3160.918180] start_dashDB_local.sh[173]: WebConsole                    : SUCCESS
[ 3160.918436] start_dashDB_local.sh[173]: dashDBconnectivity            : SUCCESS
[ 3160.918678] start_dashDB_local.sh[173]: dashDBrunning                 : SUCCESS
[ 3160.925132] start_dashDB_local.sh[173]: ***********************************************************
[ 3160.927969] start_dashDB_local.sh[173]: *******             Congratulations!             **********
[ 3160.930845] start_dashDB_local.sh[173]: **         You have successfully deployed dashDB         **
[ 3160.935336] start_dashDB_local.sh[173]: ***********************************************************
[ 3160.943259] start_dashDB_local.sh[173]: *
[ 3160.949247] start_dashDB_local.sh[173]: * Next steps:
[ 3160.952320] start_dashDB_local.sh[173]: *
[ 3161.015769] start_dashDB_local.sh[173]: * 1. Please use Ctrl+c key-sequence to detach from the Docker logs console.
[ 3161.018854] start_dashDB_local.sh[173]: * 2. Log in to the web console using the following information:
[ 3161.030006] start_dashDB_local.sh[173]: *        URL: https://161.202.120.51:8443
[ 3162.564355] start_dashDB_local.sh[173]: Password successfully updated
[ 3163.771258] start_dashDB_local.sh[173]: *        Default user ID    : bluadmin
[ 3163.771627] start_dashDB_local.sh[173]: *        Default password   : SNE4aU@sSbVq@kXhY^WY0jWmVDlS0YrG
[ 3163.774906] start_dashDB_local.sh[173]: * 3. For improved security, change the default bluadmin password
[ 3163.776840] start_dashDB_local.sh[173]: *         by running "docker exec -it dashDB setpass <new password>". Other user management
[ 3163.778720] start_dashDB_local.sh[173]: *         should be done via the web console.
[ 3163.780615] start_dashDB_local.sh[173]: *
[ 3163.782412] start_dashDB_local.sh[173]: ***********************************************************
```

起動完了後、下記コマンドでbluadminのパスワードを変更して*導入完了*です！

```text:コマンド例
#docker exec -it dashDB setpass xxxxxxx
```

導入後にはdashDB webコンソールへのログインができるようになっています。今回の環境では下記アドレスアクセスします。

dashDB Web管理コンソールURL:https://161.202.120.51:8443　

※管理コンソールのポート番号:8443は外部からアクセスできるよう設定しておく必要はあります。

![image](https://qiita-image-store.s3.amazonaws.com/0/94920/6981b9c9-9fd9-f66e-c5d7-b787b2f72486.png)

dashDB WebコンソールはdashDBとほとんど同じです。左側のタブからDBオブジェクトの管理作業や、SQL実行、データロード作業、In-DBオブジェクトの管理、DBワークロードの監視、dashDB接続情報を確認することができます。こちらの操作については次回以降の記事で触れたいと思います。

##**dashDB Local 導入完了後の作業(任意)**##
dashDB Local 導入後の任意作業として、コンテナのタイムゾーンをJSTに設定する、dashDB Localコンテナでデフォルト有効になっているApache Sparkのメモリ割当の無効にするとといった設定作業をおこないます。これら作業は任意ですが、下記手順で実行できるようになっていますので参考までにリンク先を記します。

Changing the time zone for dashDB Local
http://www.ibm.com/support/knowledgecenter/SS6NHC/com.ibm.swg.im.dashdb.doc/admin/local_timezone.html

Disabling Spark on dashDB Local
http://www.ibm.com/support/knowledgecenter/SS6NHC/com.ibm.swg.im.dashdb.doc/admin/spark_memshare.html

今回はdashDB Local評価版を使った導入、セットアップの流れを書いて見ました。 仮想マシンオーダーから、dashDB Localの起動までにかかった時間は40分ぐらいです。**そのため仮想マシンの使用料は0.9ドルしかかかりませんでした。** というわけで導入作業は本当に手早く、簡単にできます。

また実はパブリックのDocker Hubに接続できなくてもdashDB Local コンテナイメージを入手する方法はあります。イメージをオフラインで入手して、プライベート環境にSFTPで転送後、docker loadコマンドでロードすることで同様に構築できるようになっています。dashDB Localイメージを個別入手したい場合は、IBM営業か下記リンク先の右側にある「お問い合わせはこちら」から相談してください。

IBM dashDB Webページ: http://www-03.ibm.com/software/products/ja/dashdb

ということで、次回はdashDB Local Web管理コンソールを使用して、様々な操作を実行できることをご紹介していきたいと思います。

##**参考文献**##
IBM dashDB Knowledge Center dashDB Local ページ(Administrating dashDB Local)
http://www.ibm.com/support/knowledgecenter/SS6NHC/com.ibm.swg.im.dashdb.doc/admin/local_administering.html

IBM dashDB Local 概要
http://www.ibm.com/analytics/us/en/technology/cloud-data-services/dashdb-local/

IBM dashDB Local Youtube video
　・dashDB Local Takes Hybrid Data Warehousing to the Next Level
　　https://www.youtube.com/watch?v=F_0VwrBOU2k

　・Tutorial: Install Docker for dashDB Local
　　https://www.youtube.com/watch?v=0WNaHfnIr6Y