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

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

これで安価でスケーラビリティや障害耐性のある、バックアップシステムとかは簡単に作れそうだ。