CloudStoreをバックエンドにしてMapReduce
CloudStore は Hadoop と組み合わせることができ、MapReduce のデータ保持先として利用できる。
Using KFS with Hadoopを参考に試して見た。
Hadoop MapReduce をインストールした場合のサーバの役割は以下のようにした。
ノード名 | CloudSotre での役割 | Hadoop での役割 |
---|---|---|
kfs0 | metaserver | JobTracker |
kfs1 | chunkserver | TaskTracker |
kfs2 | chunkserver | TaskTracker |
kfs3 | chunkserver | TaskTracker |
CloudStore については、これまでの設定ですでに動作しているので、これに Hadoop の環境を用意していく。Hadoop のインストールについては、以前のエントリ「http://d.hatena.ne.jp/kikumoto/20090607/1244389139」とほぼ同様であるが、いくつか修正しなければならない。
まず、/home/hadoop 配下に kfs0:/home/kfs/cloudstore をそのままコピーしておく。
hadoop-0.20.0/bin/hadoop では、/home/hadoop/hadoop-0.20.0/lib/native/Linux-i386-32 に java.library.path を設定するので、このディレクトリに libkfs_access.so のシンボリックリンクを作成する。
$ cd /home/hadoop/hadoop-0.20.0/lib/native/Linux-i386-32 $ ln -s ../../../../cloudstore/lib/libkfs_access.so .
さらに、libkfs_access.so は同ディレクトリのライブラリを必要としているため、conf/hadoop-env.sh に、以下を追記しておく。
export LD_LIBRARY_PATH=/home/hadoop/cloudstore/lib
そして、core-site.xml を以下のように設定することで、CloudStore を認識させる。
hadoop.tmp.dir /home/${user.name}/hadoop_tmp fs.kfs.metaServerHost kfs0 fs.kfs.metaServerPort 20000 fs.default.name kfs://kfs0:20000
以上で、
$ ./bin/hadoop fs -ls /
とすれば、CloudStore 上のファイル・ディレクトリが表示される。
そして、kfs0 にて
$ ./bin/start-mapred.sh
とすることで、JobTracker, TaskTracker が起動するので、後は以前のエントリ「http://d.hatena.ne.jp/kikumoto/20090607/1244389139」と同じ方法で MapReduce の動作を確認することができる。