1.はじめに
今回はを予めClouderaManager、及びCDHの環境が構築されたdockerイメージであるcloudera/quickstart
を使用してkuduの構築を行う。
ただし試行錯誤した末に構築できたものなので、少々余分な設定があると思われる。
2.dockerイメージのダウンロードと起動
①Dockerイメージのダウンロード
$ docker pull cloudera/quickstart:latest
②Dockerコンテナのバックグラウンド起動
$ docker run --hostname=quickstart.cloudera --name=cloudera --privileged=true -t -i -d -p 7180 -p 80 -p 8888 cloudera/quickstart:latest /usr/bin/docker-quickstart
③Dockerコンテナへ接続
$ docker exec -it cloudera bash
3.kuduサービス追加の事前設定
これまではホストOS上でDockerコマンドを使用していたが、ここからはコンテナ上の操作となる。
①kuduのrepoファイルを取得
cd /etc/yum.repos.d/
curl -O http://archive.cloudera.com/beta/kudu/redhat/6/x86_64/kudu/cloudera-kudu.repo
②kuduのインストール
sudo yum install kudu -y
③kuduのCSD(Custom Service Descriptor)を追加
CSDはClouderaMangerのアドオンに必要なファイルのこと。
cd /opt/cloudera/csd
curl -O http://archive.cloudera.com/beta/kudu/csd/kudu-latest
jar
の拡張子を付与する。
※拡張子を付与しないと何故かClouderaManagerに表示されない。
latest以外はjar
の拡張子があるのでそれを取得してもよい。
ちなみに今現在の最新版は0.10
である。
mv kudu-latest kudu-latest.jar
clouderaユーザが使用できるためにとりあえず777で権限付与しておく。
chmod 777 kudu-latest.jar
④kudu用ディレクトリ作成
kuduで必要になるMasterServer、TabletServer用のディレクトリを作成し、権限を付与する。
cd /opt
mkdir fs_wal_dir_master fs_data_dirs_master fs_wal_dir_tablet fs_data_dirs_tablet
chmod 777 fs_wal_dir_master fs_data_dirs_master fs_wal_dir_tablet fs_data_dirs_tablet
⑤NTPの設定
KuduはMasterServerをNTPサーバにして、TabletServerと時刻同期する必要がある。Kuduは時刻に相当シビアであり、ずれるとすぐにKuduのサービスがダウンとなる。
sudo yum -y install ntp
日本標準時間に設定する。
sudo ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
自分自身をNTPサーバの頂点にするために、元のNTP接続先はコメントにし、server 127.127.1.0
を追加設定する。
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 127.127.1.0
NTPサーバを起動する。
sudo service ntpd start
正しく時刻同期できているか確認する。ntpq -p
コマンドの結果でLOCALの左に*があればOK。
# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*LOCAL(0) .LOCL. 5 l 2 64 1 0.000 0.000 0.004
⑥impala-kuduのインストール
元のimpalaサービスをアンインストールする。
yum remove impala impala-catalog impala-server impala-shell impala-state-store impala-udf-devel -y
impala-kuduのrepoファイルを取得する。
cd /etc/yum.repos.d/
curl -O http://archive.cloudera.com/beta/impala-kudu/redhat/6/x86_64/impala-kudu/cloudera-impala-kudu.repo
impala-kuduをインストールする。
yum install impala-kudu impala-kudu-catalog impala-kudu-debuginfo impala-kudu-server mpala-kudu-shell impala-kudu-state-store impala-kudu-udf-devel -y
⑦ClouderaMangerの起動
/home/cloudera/cloudera-manager --express --force
結構時間がかかる。
※先にClouderaManagerを起動していた場合は、service cloudera-scm-server restart
でサービス再起動するだけでよい。
下記の結果が出力されればClouderaMangerの起動完了
4.ClouderaManagerからkuduサービスの追加
①ブラウザを起動してClouderaManagerに接続
事前にホストOS側でdocker ps
コマンドから、コンテナのポート番号7180にマッピングされたホストOSのポート番号を確認する。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
02493a6f70d4 cloudera/quickstart:latest "/usr/bin/docker- quic" 15 hours ago Up 15 hours 0.0.0.0:32806->80/ tcp, 0.0.0.0:32805->7180/tcp, 0.0.0.0:32804->8888/tcp cloudera
上記結果からポート番号32805
がホスト側にマッピングされているため、ブラウザを起動しhttp://localhost:32805
へ接続すると下記画面が表示される。
ユーザ名とパスワードはcloudera
を入力してログインする。
②クラスタにkuduサービスを追加
-
Master
、Tablet Server
ともに、quickstart.cloudera
をを選択し、続行
を選択する。
- 各テキストボックスに事前に作成したディレクトリパスである下記設定を入力し、
続行
を選択する。
fs_wal_dir | fs_data_dirs | fs_wal_dir | fs_data_dirs |
---|---|---|---|
/opt/fs_wal_dir_master | /opt/fs_data_dirs_master | /opt/fs_wal_dir_tablet | /opt/fs_data_dirs_tablet |
5.impalaサービスの削除と追加
①ClouderaManagerからimpala-kuduでない元のimpalaサービスを削除する。
(※削除する前にHue
の削除が求められるので先に、Hue
を削除しておく)
②ClouderaManagerからimpalaサービスを追加する。
(※特にサービス名称がimpala-kudu
にはならないので注意)
③Hueを使用する場合、Hueサービスを追加する。
これでkuduを使用したimpalaテーブルが作成できるので、Hueやimpala-shell等から確認を行う。