前回までに、Redhut Enterprise Linux の EC2 を用意できたので、
ついにそこにHadoopをインストールしてみる。
Hadoopと一言で言っても、現在は、
- Apache Hadoop
- 本家のオープンソースプロジェクト
- CDH
- Apache HadoopをベースにCloudera社がパッケージングし、サポートを行うもの
- MapR
- Apache Hadoopと互換を保ちつつ、米MapR社がHDFS層をC++で再実装したもの
と、いくつかのリビジョンが存在する。
それぞれ、CDHもMapRもCommunity版が存在するし、MapRも30日試用フル機能ライセンスも
あるので、どれを選んでもとりあえずは問題ない。
ここでは、私が使い慣れているっていうのと、CDHならブログとして面白くないって意味もあり、
MapRをインストールするものとする。
シングルノードのMapRのインストール方法は、
http://www.mapr.com/doc/display/MapR/M3+-+RHEL+or+CentOS
に書いてあり、ここでの記事の半分以上は上記の日本語訳になる。
MapRを知っているような人は、英語を苦にするような人ではないと思うけど、
EC2ならではの手順も少しあるので、省略しないで全手順を書いておく。
@専用ディスクを用意
MapRでは、OSがマウントしていないハードディスクが必須である。
なので、EC2にも専用ディスクを追加してあげる必要がある。
EC2でのハードディスクの追加は、Elastic Block Storeにて行う。
AWS Management Consoleの右メニューから「Elastic Block Store / Volumes」を選択し、
「Create Volume」をクリック。

現在は30GBまで無料なので、その範囲で必要な容量を選択すればよい。
(当然、お金を払うのであればそれ以上でも問題ありません。)
あとはそのまま。

Volumeができたので、それをEC2にアタッチさせる。

アタッチ先のインスタンス、アタッチ時のデバイス名を入力。
デバイス名は、「既に使われているよ」って拒否られる場合があるので、
その場合はデバイス名を変えて再度アタッチを実行。

インスタンスで、ディスクが追加されていることを確認。
(新しい方が追加したディスク)
[root@ip-10-162-xx-xxx ~]# ls -l /dev/xvd*
brw-rw----. 1 root disk 202, 432 Feb 14 11:07 /dev/xvdab
brw-rw----. 1 root disk 202, 65 Feb 14 10:17 /dev/xvde1
Aホスト名を設定
MapRではホスト名が必須であるので、設定する。
[root@ip-10-162-xx-xxx ~]# hostname mapr001
[root@ip-10-162-xx-xxx ~]# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=mapr001
[root@ip-10-162-xx-xxx ~]# echo "10.162.xx.xxx mapr001" >> /etc/hosts
[root@ip-10-162-xx-xxx ~]# cat /etc/hosts
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
10.162.xx.xxx mapr001
BJDKのインストール
MapRでは、RHEL標準のGNU Javaではなく、Sun Java JDK(1.6.0_24以降)が必要である。
EC2インスタンスへパッケージを持っていくのは面倒なので、
手元のブラウザでパッケージのURLを入手し、wgetでダウンロードする。
[root@mapr001 ~]# wget http://download.oracle.com/otn-pub/java/jdk/6u30-b12/jdk-6u30-linux-x64.bin
あとは、普通にインストール。
[root@mapr001 ~]# chmod +x jdk-6u30-linux-x64.bin
[root@mapr001 ~]# ./jdk-6u30-linux-x64.bin
[root@mapr001 ~]# mv jdk1.6.0_30/ /opt/
JAVA_HOMEとPATHも設定しておく。
[root@mapr001 ~]# echo "export JAVA_HOME=/opt/jdk1.6.0_30/" >> ~/.bashrc
[root@mapr001 ~]# echo "export PATH=${JAVA_HOME}/bin:${PATH}" >> ~/.bashrc
[root@mapr001 ~]# source ~/.bashrc
[root@mapr001 ~]# java -version
java version "1.6.0_30"
Java(TM) SE Runtime Environment (build 1.6.0_30-b12)
Java HotSpot(TM) 64-Bit Server VM (build 20.5-b03, mixed mode)
CMapRリポジトリへの接続
いよいよ、MapRのインストールに入る。
RHELなので、yumを使う。yumの設定は以下の通り。
[root@mapr001 ~]# cat /etc/yum.repos.d/maprtech.repo
[maprtech]
name=MapR Technologies
baseurl=http://package.mapr.com/releases/v1.2.2/redhat/
enabled=1
gpgcheck=0
protect=1
前述のURLのMapR公式手順書ではv1.2.0を見ていたが、最新のv1.2.2がリリースされていたので、
最新のリビジョン番号に変更して設定した。
ちゃんと接続されるか、searchをして確認してみる。
[root@mapr001 ~]# yum search mapr
Loaded plugins: amazon-id, rhui-lb, security
maprtech | 951 B 00:00
maprtech/primary | 5.8 kB 00:00
maprtech 31/31
rhui-ap-northeast-1-client-config-server-6 | 2.6 kB 00:00
rhui-ap-northeast-1-rhel-server-releases | 3.7 kB 00:00
rhui-ap-northeast-1-rhel-server-releases/primary_db | 11 MB 00:00
rhui-ap-northeast-1-rhel-server-releases-optional | 3.5 kB 00:00
rhui-ap-northeast-1-rhel-server-releases-optional/primary_db | 1.8 MB 00:00
=================================== N/S Matched: mapr ====================================
mapr-cldb.x86_64 : MapR
mapr-client.i386 : MapR Client
mapr-client.x86_64 : MapR Client
mapr-core.x86_64 : MapR Core
mapr-fileserver.x86_64 : MapR
mapr-flume.x86_64 : MapR
mapr-flume-internal.x86_64 : MapR Flume
mapr-hbase-internal.x86_64 : MapR Hbase
mapr-hbase-master.x86_64 : MapR
mapr-hbase-regionserver.x86_64 : MapR
mapr-hive.x86_64 : MapR
mapr-hive-internal.x86_64 : MapR Hbase
mapr-jobtracker.x86_64 : MapR
mapr-mahout.x86_64 : MapR Mahout
mapr-nfs.x86_64 : MapR
mapr-oozie.x86_64 : MapR
mapr-oozie-internal.x86_64 : MapR Oozie
mapr-pig.x86_64 : MapR
mapr-pig-internal.x86_64 : MapR Hbase
mapr-single-node.x86_64 : MapR Core
mapr-sqoop.x86_64 : MapR
mapr-sqoop-internal.x86_64 : MapR Sqoop
mapr-tasktracker.x86_64 : MapR
mapr-upgrade.x86_64 : MapR Upgrade
mapr-webserver.x86_64 : MapR
mapr-whirr.x86_64 : MapR Whirr
mapr-zk-internal.x86_64 : MapR
mapr-zookeeper.x86_64 : MapR
mapr-datameer.noarch : Datameer Analytics Solution
よし、いっぱい出てきてくれた!
DMapRパッケージのインストール
リポジトリに接続できたところで、実際にパッケージをインストールする。
複数台構成のときには、コンポーネントの配置を考えなければいけないのだが、
今回は1台で試しに使うだけなので、必須コンポーネントを全て1台にインストールする。
[root@mapr001 ~]# yum install mapr-cldb mapr-fileserver mapr-jobtracker mapr-nfs mapr-tasktracker mapr-webserver mapr-zookeeper
EMapRの初期設定
初回起動時(及び、環境変更時)のみに必要な設定を施す。
まずは、コンポーネントの配置を指定する。
配置設定が必要なコンポーネントは、MapRのMaster的な役割をするCLDBとZookeeperであり、
当然、1台しかないので自分のホスト名を指定する。
[root@mapr001 ~]# /opt/mapr/server/configure.sh -C mapr001 -Z mapr001
Node setup configuration: cldb fileserver jobtracker nfs tasktracker webserver zookeeper
Log can be found at: /opt/mapr/logs/configure.log
次に、MapRで使用するディスクを設定する。
MapRは、OSマウントされていないディスクをデータ領域として、独自形式でフォーマットして使用する。
ここでは、手順@にて追加したディスクを設定する。
[root@mapr001 ~]# echo "/dev/xvdab" > disks.txt
[root@mapr001 ~]# /opt/mapr/server/disksetup -F disks.txt
Added /dev/xvdab
なお、このディスクフォーマットは、ディスクキャッシュを確保するだけのメモリがない場合には失敗する。
具体的には、613MBのEC2マイクロインスタンスでは実行できなかった。
また、失敗時に /opt/mapr/hostname がリセットされる場合がある。
(hostnameを永続化せずにノード再起動したからか?)
その場合は、同ファイルを直接編集してホスト名を書いてあげると良い。
FMapRの起動
ついにMapRを起動させる。
まずは、クラスタ全体のプロセス管理をするZookeeperのサーバプロセスを起動する。
[root@mapr001 ~]# /etc/init.d/mapr-zookeeper start
JMX enabled by default
Using config: /opt/mapr/zookeeper/zookeeper-3.3.2/conf/zoo.cfg
Starting zookeeper ... Zookeeper is already running as process 991.
続いて、ノードのプロセス監視をするwardenを起動する。
wardenを起動させると、必要なプロセスをwardenがキックしてくれる。
[root@mapr001 ~]# /etc/init.d/mapr-warden start
Starting WARDEN, logging to /opt/mapr/logs/warden.log
For diagnostics look at /opt/mapr/logs/ for createsystemvolumes.log, warden.log and configured services log files
プロセスが立ち上がっているかを確認する。
[root@mapr001 ~]# jps
3644 CLIMainDriver
2465 CommandServer
1752 CLDB
2429 JobTracker
3819 Jps
1228 QuorumPeerMain
3346 TaskTracker
1318 WardenMain
これらは全てMapR関連のプロセスである。
まずは、ライセンス認証前はCLDBとCommandServerが立ち上がっていることが確認できれば良い。
CLDBはMapRの核となる管理プロセスであり、CDLBを通じてライセンス認証を行うので必須である。
また、Web認証はCLDBのWEB管理コンソールより行うのだが、
その管理コンソールのWEBサーバプロセスがCommandServerである。
GWeb管理コンソールのアクセス設定
ライセンス認証は、CLDBの管理Web画面にて設定する。
手元のマシンからEC2上のCLDBにアクセスするため、
外部からのHTTP通信を受け付けるように設定する。
まずは、面倒なのでOSファイアーウォールを停止する。
ちょい心配だけど、セキュリティは全てAWSのSecurity Groupで管理することにする
[root@mapr001 ~]# /etc/init.d/iptables stop
iptables: Flushing firewall rules: [ OK ]
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Unloading modules: [ OK ]
次に、AWSのSecurity Groupの設定にて、操作端末からWeb画面を見えるようにする。
アクセスポートは、CLDBは8443、JobTrackerは50030と、複数存在するため、
ここでは簡単に、操作端末のIPに対しては全ポートを開放する。
IP制限を掛けているので、セキュリティ的にも大丈夫だろう。

また、管理コンソールはOSユーザでログインをするため、OSユーザにパスワードを設定しておく。
(最初に設定しておけって話ではあるが・・・。)
[root@mapr001 ~]# passwd
Changing password for user root.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
Hライセンス認証
操作端末からEC2にアクセスできるようにしたので、MapRが立ち上がっている状態で、
以下のURLのMapR管理コンソールにアクセスする。
https://[Public DNS]:8443/
管理コンソールにはOSユーザでログインする。
このページの手順で進めた場合は、管理コンソールへのアクセス許可設定を変更していないので、
デフォルトで管理コンソールアクセスが許可されているrootユーザのOSパスワードでログインする。

初回起動時にはライセンス規約への同意を求められるので、「Accept」を選択。

続いて、ライセンス登録ウインドウが立ち上がる。
Web経由で登録するため、「Add License via Web」をクリック。
(なお、この画面は、管理コンソールの右上の「Manage License」からいつでも立ち上げられる)

すると、MapR公式ページのログイン画面に飛ぶ。ここで、MapRアカウントにてログインする。
(アカウントがない場合は、ここで登録する。)

ログインできると、M3ライセンスと、M5・30日ライセンスが選べる。
ここではM3を選択して、「Register」を押下。

その後、登録完了画面に遷移するので、「return mapr web ui(曖昧(^^;))」を押下すると、
以下のようなMapR管理コンソールに遷移する。ここで、「Apply Licenses」を押下することで設定完了。
ちなみに、M5を選択していた場合は、この画面でM3とM5の両方がリストアップされる。

管理コンソールにて、ヒートマップが緑色になっていればOK。
ライセンス適用直後はオレンジのままの場合があるが、その際は、wardenをリスタートするか、
管理コンソールからNFS Serverを立ち上げれば緑になる。
(ライセンスを入れていない状態(baseライセンス)で立ち上げもできないのは、NFS Serverだけの模様)

I動作確認
これまでの作業で、MapRの設定は完了である。
最後に、hadoopのサンプルを動かして、動作確認を行う。
[root@mapr001 hadoop-0.20.2]# pwd
/opt/mapr/hadoop/hadoop-0.20.2
[root@mapr001 hadoop-0.20.2]# hadoop jar hadoop-0.20.2-dev-examples.jar pi 1 1
Number of Maps = 1
Samples per Map = 1
Wrote input for Map #0
Starting Job
12/02/19 00:56:41 INFO fs.JobTrackerWatcher: Current running JobTracker is: mapr001/10.160.9.94:9001
12/02/19 00:56:42 INFO mapred.FileInputFormat: Total input paths to process : 1
12/02/19 00:56:42 INFO mapred.JobClient: Running job: job_201202190013_0002
12/02/19 00:56:43 INFO mapred.JobClient: map 0% reduce 0%
12/02/19 00:56:48 INFO mapred.JobClient: map 100% reduce 0%
12/02/19 00:56:53 INFO mapred.JobClient: Job complete: job_201202190013_0002
・・・
Job Finished in 11.497 seconds
Estimated value of Pi is 4.00000000000000000000
問題なくMapReduceが動作していることが伺える!よっしゃ!
Apache Hadoopと同様のURLでJob Tackerの管理画面も表示されることができ、そちらでも正しく動作していることが確認できる。
http://[Public DNS]:50030/
無事にMapRが動いたので、ようやく、明日からアプリの開発を始められる。
ちなみに、ここまで結構試行錯誤をしたが、AWSの請求は$2.91なり。
円高万歳。
<参考>
MapRとはなんぞや?という方は、中の人が書いているこちらの記事が参考になります。
http://d.hatena.ne.jp/nagixx/20111216/1324006829