Hadoopの 0.18.0には fuse-dfsが含まれている
というより、元々あったのだが、 0.18.0からは contrib に含まれるようになった。これを使うと、Hadoopの分散ファイルシステムである dfs に普通に読み書きしたりできる。今までは基本的にJavaのbyteStreamで読み出さなければならなかった。基本的には hadoop/src/contrib/fuse-dfs/README を見ながらやる。
- fuse が入っているか確かめて無かったら入れる
lsmod | grep fuse fuse 47124 0
- antでHadoopをリビルドする
cd hadoop_root # fuse-dfs の READMEの通りではできなかった # make でエラーが出たら jni.h や fuse-devel にinclude pathを通す ant compile-contrib -Dcompile.c++=1 -Dlibhdfs=1 -Dlibhdfs-fuse=1
- mountの補助スクリプトを修正する
hadoop/src/contrib/fuse-dfs/srcあたりにfuse_dfsができるので、一緒のディレクトリにある起動補助スクリプトを開いてJAVA_HOME,HADOOP_HOME, LD_LIBRARY_PATH, CLASSPATHあたりを修正しておく。また、あらかじめ Hadoopを起動してファイルシステムをフォーマットしておく。
mkdir /mnt/haddoop ./fuse_dfs_wrapper.sh dfs://localhost:54310 /mnt/haddoop # 起動補助スクリプトを使用しない場合は ./fuse_dfs --server=localhost --port=54310 /mnt/hadoop -o-o allow_other,rw -d
で lsとかができれば成功、アンマウントは
fusermount -u /mnt/haddoop
これで安価でスケーラビリティや障害耐性のある、バックアップシステムとかは簡単に作れそうだ。