ClouderaManager5でHadoopクラスタを構成する


Hadoopは素で使うことに慣れているが、ClouderaManagerも試してみる。
環境はローカルMacのVMWareFuion8上。

##Host環境
* Mac(MBP 15inch Retina)上のVMWareFusion
* 16GB RAM, 1TB SSD

##Guestマシンの用意

###構成

VMWareFusion(8)上にCentOSを3つ用意する。

* server1.test.local
* server2.test.local
* server3.test.local

それぞれCentOS6.5(yum updateで6.7になる）をMinimalインストール。

###環境準備

私は、Minimalインストールに加え、以下の設定をしました。

* yum update
* yum groupinstall 'Development tools'
* selinux disabled(/etc/selinux/config)
* Java8インストールとJAVA_HOME,PAHT設定（これは必須ではない）
* SSHでのログイン（マスターからスレーブマシンへのログイン確保）
* /etc/hostsに書くマシンのIPとFQDNの登録（ちょっとハマった：後述）
* firewallの無効化（service iptables stop || chkconfig iptables off)

以下、注意点、特記事項など。

####Javaはいらないかも

JavaはClouderaManagerがインストールするのでいりません。
但し、Cloudera専用？的なもになります（PATHが通ったりしません）。

####/etc/hostsの書き方でハマった

/etc/hostsの書き方ではまりました。
短縮名を下記のように先に書いていたら、インストールの途中でコケました。

192.168.88.131 server1 server1.test.local

エージェントのハードビード確認ができない！的なエラーでした。

hostsは、下記のようにFQDNを先に書きましょう。

```bash
192.168.88.131 server1.test.local server1
192.168.88.132 server2.test.local server2
192.168.88.133 server3.test.local server3
```

###hostnameも適切に変更

hostsnameはデフォルト（ほったらかしインストール）では、localhost.localdomainとかになってますが、hostsと一致するようにしましょう。

設定は、

```bash
vi /etc/sysconfig/network
```
で。

####Master（server1)のメモリは大きく

ClouderaManagerをインストールし、マスターにする予定のサーバ（ここではserver1）は、いろいろなデーモンが稼働するので、できれば8GB程度のメモリが理想のようです（私は6GBにしました。スレーブはとりあえず1GBで動きましたが、少々もたつきます）。

####CPI:memory_hp:Memory online failed（VMWare依存）

VMのメモリ容量を変更した際に、起動時に「CPI:memory_hp:Memory online failed...」というエラーメッセージが表示されるようになりました。hotスワップ系の機能が影響しているようです。

対象VMのvmxファイルを開き、下記パラメータをTRUEからFALSEにすることで解消されました。

* hotvcpu.hotadd = "FALSE"
* mem.hotadd = "FALSE"

##ClouderaManagerのインストール

インストールは大きく下記の3フェーズから構成されます。

* ClouderaManagerServerのインストール（管理画面のインストール）
* クラスタ構成サーバ群の認識とAgentのインストール
* クラスタを構成するマシンへの各種ツールのインストール

但し、フロートしてはシームレスに実施されます。

###ClouderaManager（初期管理画面）のインストール

```bash
wget http://archive.cloudera.com/cm5/installer/latest/cloudera-manager-installer.bin
chmod 755 cloudera-manager-installer.bin
./cloudera-manager-installer.bin
```
で、セットアップスクリプト？を起動します。いろいろ聞いてきますが、基本デフォルト、\<OK>で。

インストールが完了すると、http://hostname:7180 へアクセスすると、管理画面が開きます。

>初期ID,PWはadmin,adminのようです。

###クラスタを構成するマシンの認識とAgentの追加

管理画面んへの初回ログイン時は、「エディションを選べ！」と言われるのでCloudera Expressを選択し、「続行」をクリックします。

対象となるマシンを指定しろと言われるので、指定します。
指定用の記述にはいくつかのパターンがあるようです。本格運用に際しては、あらかじめこのパターンを意識してサーバを命名しておくとい便利かもしれません。

今回は、server1,server2...という感じなので、

```bash
server[1-3].test.local
```

と、指定した所、無事認識されました。
その後は、基本、デフォルトのままで進めます。

SSHログインの指定では、自分の環境に合わせた設定をします。
最後に検証結果が表示されます。いくつかワーニングがありましたが、直せるところは直します。

>私はswappinessを0にしろ!というのと、Transprent Huge Pageが有効化されてるぞ！的なワーニングが出ましたが、とりあえず無視しました。が、対処方法とかも表示されるので、本番環境では対処した方がいいでしょう。

###クラスタの構成

そのままの流れで、クラスタのセットアップに入ります。
メモリも限られているので、最小っぽい「コア」を選択。
あとは、そのままデフォルト設定で進めました。

途中、どのサーバをNameNodeにするか？とか、どのサーバでどのデーモンを動かすか？を聞いてきたり、各種データ保存用の位置をどうするか？などを聞いてきます。とりあえずデフォルトで進めます。

>初回テスト時、マスタサーバのメモリを1GBのままで作業したところ、最後のCloudera Management Serviceの起動がいつまでたっても終わらない感じでした。

###動作確認

セットアップ完了ご、再度、管理画面へログインし様子をみました。
リソース不足のため、グリーンにはならず、オレンジ状態のものばかりです。。。
1つ致命的なエラーがあり、それは、HDFSのレプリケーションが出来ない！というものでした。恐らく、標準でreplicationが3になっているのに、DataNodeが2つしかないためかと思います。

##クラスタの追加（と削除）

ClouderaManagerの利点は、簡単にクラスタの追加（や削除）ができる点でしょう。
なので、簡単に出順を確認しておきます。

###追加用のマシンの設定

追加用のマシンの構成は他のスレーブ用のマシンと基本同じです。が、既存マシンにも変更が必要だったのでメモします。

最初、server1のhostsにserver4を追加し、server4のhostsにserver1とserver4を追加し設定しましたが、ホストの追加フェーズでserver4からserver2,3の名前解決ができない。また、server2,3からserver4への名前解決ができないとのアラートがでました。

どうやら、全てのホストで相互に名前解決ができないといけないみたいですね。
本番環境ではDNSが利用されていると思うので心配はないとは思いますが。

###ホストの削除（検証中）

ホストを削除する場合、いきなり消してしまうと不正合が発生するようです（設定ファイルとかを書き換えが無いまま消えれば当然おかしくなるはず）。

なので、削除は、対象となるホストを選択した後、「ロールの停止」、「デコミッション」を行った後、削除する必要があるようです。