hadoop-1.0.3でhdfsをfuse mountする(1)

Fedoraではコンパイル失敗したから、ちゃんとScientific Linux 6でやることにした。

追記;この方法だと、書き込みが全く出来ませんでした…。

SL6.3です。

なんで、fuseしようと思ったからというと、hadoopを1.0.3、hiveを0.8.1にバージョンを上げてしまったので、glusterFSは利用できなさそうってのが理由。どうしても、コマンドでファイルが作りたかったんです…。

下の2サイトを参考させていただいて、fuse-dfsをコンパイルしたんだけど、hadoop-1.0.3ではうまく動かなかった。

参考にしたサイト

fuseでhdfsをmount : http://d.hatena.ne.jp/tagomoris/20110201/1296551734

HDFSをマウントして利用してみる : http://blog.kirie.net/linux/hadoop/336.html
手順通り、hadoop-1.0.3を展開したディレクトリで

ant compile-c++-libhdfs -Dlibhdfs=1
ant compile-contrib -Dlibhdfs=1 -Dfusedfs=1

ってやってたんですが、mountしようとすると、エラーでてた。
公式の以下をみてると、上記2サイトは0.22と0.19

http://wiki.apache.org/hadoop/MountableHDFS

「BUILDING (for 0.23 and up see here)」とのことで、こちらへ。
Build FuseDfs on 0.23 and higer : http://wiki.apache.org/hadoop/BuildFuseDfs023

先に、cmakeがいるみたいなのでyumでインストール。
yum install cmake
だったかな。

mvn コマンドは、tarballでいれた。
wget http://ftp.kddilabs.jp/infosystems/apache/maven/maven-3/3.0.4/binaries/apache-maven-3.0.4-bin.tar.gz
tar xvfz apache-maven-3.0.4-bin.tar.gz
mv apache-maven-3.0.4 /usr/local/.
cd /etc/alternatives
ln -s /usr/local/ maven
パスは適当に通す。

protobufが必要ってエラーで怒られたので、とってきた。
wget http://protobuf.googlecode.com/files/protobuf-2.4.1.tar.gz
tar xvfz protobuf-2.4.1.tar.gz
cd protobuf-2.4.1
./configure
make
make install

JAVA_HOMEの設定が必要。
yum install java-1.6.0-openjdk-*
して、-devel と -javadoc もインストールしとく。

/etc/alternatives/java_sdkにJVM用が設定されるようなので、JAVA_HOMEは

vi /etc/profile.d/java-home.sh
export JAVA_HOME=/etc/alternatives/java_sdk

ってしてます。

fuse-develが必要なので
yum install fuse-devel
します。

ここから本番。

https://github.com/apache/hadoop-commonからソースを落としてコンパイル。

cd
git clone https://github.com/apache/hadoop-common.git
cd hadoop-common/hadoop-hdfs-project/hadoop-hdfs
mvn package -Pnative

ってやる。

すごく時間かかる。

テストも失敗する。

けど、以下の場所に一連のファイルが出来上がる。

ls -l hadoop-common/hadoop-hdfs-project/hadoop-hdfs/target/native/target/usr/local/lib/

-rw-r--r--. 1 root root 267534 Nov 7 14:48 libhdfs.a
lrwxrwxrwx. 1 root root 16 Nov 7 16:51 libhdfs.so -> libhdfs.so.0.0.0
-rwxr-xr-x. 1 root root 176975 Nov 7 16:51 libhdfs.so.0.0.0

これを、hadoop-1.0.3のディレクトリコピーしてやる。

mkdir -p /home/hadoop/hadoop-1.0.3/build/c++/Linux-amd64-64/lib/
cd hadoop-common/hadoop-hdfs-project/hadoop-hdfs/target/native/target/usr/local/lib
cp libhdfs.so.0.0.0 /home/hadoop/hadoop-1.0.3/build/c++/Linux-amd64-64/lib/.

もしもうすでに、ファイルがあるようだったとしても上書きしちゃう。

コンパイル途中にこのsoファイルを参照するんだけど、ldコマンドで探せないため、
/usr/local/lib/に libhdfs.soをコピーしとく。

そして、

cd /home/hadoop/hadoop-1.0.3
ant compile-contrib -Dlibhdfs=1 -Dfusedfs=1

ちなみに、この環境では、すでに
ant compile -Dcompile.c++=true -Dlibhdfs=true
はやってあるからコピーの順番には気をつけてください。。。。
ってやって、ひと通り通ると、以下ののディレクトリに、実行ファイルが出来る。

ls -l /home/hadoop/hadoop/build/contrib/fuse-dfs
-rwxr-xr-x. 1 root root 38397 Nov 8 12:46 fuse_dfs
-rw-r--r--. 1 root root 1107 Nov 8 12:46 fuse_dfs_wrapper.sh
この2つを/usr/local/binとかにいれとく
cd /home/hadoop/hadoop/build/contrib/fuse-dfs
cp fuse_dfs* /usr/local/bin/.

あとは、mount。

su –
mkdir /mnt/hdfs
cd /usr/local/bin
./fuse_dfs_wrapper.sh dfs://{hostname}:9000 /mnt/hdfs

ってやるとマウントできた。

mountコマンドの結果
.....
fuse_dfs on /mnt/hdfs type fuse.fuse_dfs (rw,nosuid,nodev,allow_other,default_permissions)

うぉぉ。。。感動。

cd /mnt/hdfs/
tree
.
├── home
│ └── hadoop
│ └── var
│ └── hdfs
│ └── mapred
│ ├── staging
│ │ └── hadoop
│ └── system
├── tmp
│ └── hive-hadoop
└── user
├── hadoop
└── hive
├── tmp
│ ├── in6.txt
│ ├── in7.txt
│ └── test.txt
└── warehouse
└── my_table
└── in5.txt

広告

“hadoop-1.0.3でhdfsをfuse mountする(1)” への 1 件のフィードバック

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中