開始行:
#wysiwyg
*Solaris で擬似ファイルシステムをつくろう/其の3(HDFSファ...
#norelated
* 目次 [#v4fc9936]
#contents
* ご注意 [#s352c217]
ここで紹介しているプログラムは、カーネルモジュールを含ん...
* 概要 [#f863b7fa]
[[Hadoop:http://hadoop.apache.org/]] の [[HDFS:http://had...
NFS の様に HDFS をマウントすることができ、一度マウントし...
> ※ 同様のことが行える FUSE (Filesystem in userland) とい...
- [[FUSE on OpenSolaris:http://hub.opensolaris.org/bin/vi...
- [[MountableHDFS:http://www.google.co.jp/url?sa=t&source...
* ソースファイルとダウンロード [#p0da4166]
管理の利便性からソースコードは[[Github:http://github.com]...
今後はこちらにアップデートしていきます。ソースコードもこ...
: ファイルシステムモジュールのソースファイルのダウンロー...
: ユーザモードデーモンプログラムのソースファイルのダウン...
: ソースコードの参照 | http://github.com/kaizawa/iumfs &b...
COLOR(RED){Github へのコードの配置にともない文字コードを ...
* 動作確認済み Solaris バージョン及びプラットフォーム [#p...
このプログラムの動作確認状況は以下のようになっています。
|プラットフォーム&br;Solarisバージョン|Sparc&br;(32bit)|S...
|Solaris10|-|◯|?|?|
|OpenSolaris|-|?|◯|◯|
|OpenIndiana 148|-|?|◯|?|
|Solaris11 express|-|?|◯|?|
|Solaris11|-|?|?|◯|
> ○:動作確認済み ×:動作不可 ?:未確認 -:該当なし&br;
* プログラムの解説 [#ta6aa97f]
基本的な考え方は「Solaris で擬似ファイルシステムをつくろ...
** iumfs ファイルシステムモジュール [#b36c5a3a]
ファイルシステムとしての基本的な枠組みは「Solaris で擬似...
モジュールのファイル名は「iumfs」ですが、カーネルに登録す...
** iumfscntl デバイスドライバ [#na7df0d0]
こちらも基本的には「Solaris で擬似ファイルシステムをつく...
ただ、今回は Java プログラムからアクセスされることを考え...
** hdfsd ユーザモードデーモンプログラム [#g8c4e78e]
[[hadoop の API:http://hadoop.apache.org/common/docs/curr...
このプログラムは起動時に /dev/iumfscntl デバイスをオープ...
** iumfs ファイルシステム用 mount コマンド [#s65b30a4]
iumfs ファイルシステム専用の mount コマンドです。~
其の2とほぼ同じでものです。mount(1M) コマンドが自動的にこ...
* 実行環境の要件 [#f19b4629]
このプログラムのコンパイル、及び実行時には以下の要件が満...
+ Solaris/OpenSolaris([[動作確認済み Solaris バージョン>#...
+ JDK6 がインストールされている(JRE5.0以前は動作確認して...
+ hadoop 0.21.0(以降)がインストールされていて、正常に動...
+ HADOOP_HOME 環境変数に Hadoop のインストールディレクト...
(※)ここでは説明しきれないので Hadoop のセットアップ方法...
* インストール [#q0561d17]
** コンパイル&インストール [#re8fcf25]
*** カーネルモジュールと mount コマンド [#m2a36a0e]
ファイルシステムモジュールのダウンロードファイルを解凍し...
OpenSolaris での実行例:
$ cd kaizawa-iumfs-4f1da99
$ ./configure
checking for gcc... no
checking for cc... cc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... no
checking whether cc accepts -g... yes
checking for cc option to accept ISO C89... none needed
checking for a BSD-compatible install... /usr/bin/ginsta...
checking for isainfo... yes
configure: creating ./config.status
config.status: creating Makefile
$ make
cd module ; make
gcc -c -DPACKAGE_NAME="IUMFS" -DPACKAGE_TARNAME="iumfs" ...
-DPACKAGE_BUGREPORT="admin2@whiteboard.ne.jp" -g -O2 -Wa...
-mno-red-zone -D_KERNEL -I. iumfs_vfsops.c -o iumfs_vfso...
gcc -c -DPACKAGE_NAME="IUMFS" -DPACKAGE_TARNAME="iumfs" ...
-DPACKAGE_BUGREPORT="admin2@whiteboard.ne.jp" -g -O2 -W...
-mno-red-zone -D_KERNEL -I. iumfs_vnops.c -o iumfs_vnop...
:
> ※ 表示の都合上、一部改行してるところがあります
# make install
cd module ; make install
/bin/ginstall -c -m 0644 -o root -g sys iumfs /kernel/fs...
/bin/ginstall -c -m 0644 -o root -g sys iumfs.conf /usr/...
:
> ※ ここだけ root 権限が必要です!
*** ユーザモードデーモン [#meda3505]
ユーザモードデーモンプログラムのダウンロードファイルには...
$ export HADOOP_HOME=/usr/local/hadoop
$ export JAVA_HOME=/usr/java
$ cd cmd
$ ant
Buildfile: build.xml
compile:
[javac] Compiling 12 source files to /var/tmp/hdfs/cm...
dist:
[jar] Building jar: /var/tmp/hdfs/cmd/hdfsd.jar
BUILD SUCCESSFUL
Total time: 2 seconds
** アンインストール [#zd68f39b]
ファイルシステムモジュールおよびコマンドのアンインストー...
もし、インストール時に利用した Makefile がすでに無い場合...
# make uninstall
> ※ root 権限が必要です
hdfs ファイルシステムが利用中(マウントされている)の場合...
* 使い方 [#ja8cf0fb]
hdfs ファイルシステムの利用方法についてご説明します。
> COLOR(RED){※ hadoop のネームノード、データノードは予め...
既存ファイルへの追記(Append)を有効にするためには ${HADOOP...
<property>
<name>dfs.support.append</name>
<value>true</value>
</property>
このプロパティを設定しないで書き込み操作をすると I/...
$ echo aaa >> hoge
-ksh: echo: write to 1 failed [I/O error
** hdfsd デーモンの起動 [#j5e9cc04]
hadoop 各データノードと通信を行う hdfsd デーモンを起動し...
実際にはこのデーモンの起動と、後述のファイルシステムのマ...
起動方法:~
ユーザモードデーモンプログラムのダウンロードファイルを展...
$ ./start-hdfsd.sh
若しくは、直接 hadoop コマンドを使って hdfsd を実行するこ...
% ${HADOOP_HOME}/bin/hadoop -cp ${CLASSPATH} iumfs.hdfs....
$HADOO_HOME は Hadoop がインストールされているディレクト...
$CLASSPATH には最低でも以下の4つをパスを指定する必要があ...
+ hdfsd.jar ファイルスのパス(ダウンロードファイルに含ま...
+ iumfs-daemon-core-xx.jar (ダウンロードファイルに含まれ...
+ hadoop-core-xxx.jar ファイルのパス ファイル(hadoop の...
+ hadoop の設定ファイルが置いてあるディレクトリ のパス
実行例:
$ hadoop -cp "./cmd/hdfsd.jar:./cmd/lib/iumfs-daemon-cor...
/usr/local/hadoop/hadoop-core-1.0.2.jar" iumfs.hdfs.Main
> ※ 一般ユーザでも起動できるはずですが、もし権限不足で iu...
また、[[java.util.Logger:http://java.sun.com/javase/ja/6/...
デバッグ実行例:
$ hadoop -Djava.util.logging.config.file=cmd/log.prop -...
/usr/local/hadoop/conf:/usr/local/hadoop/hadoop-core-1.0...
2012/04/30 12:10:50 iumfs.ControlDevicePollingThread run
詳細レベル (低): Successfully open device.
2012/04/30 12:10:50 iumfs.ControlDevicePollingThread run
詳細レベル (低): Started
2012/04/30 12:10:50 iumfs.ControlDevicePollingThread run
詳細レベル (低): Successfully open device.
2012/04/30 12:10:50 iumfs.ControlDevicePollingThread run
詳細レベル (低): Started
2012/04/30 12:10:50 iumfs.ControlDevicePollingThread run
詳細レベル (低): Successfully open device.
2012/04/30 12:10:50 iumfs.ControlDevicePollingThread run
詳細レベル (低): Started
2012/04/30 12:10:50 iumfs.ControlDevicePollingThread run
詳細レベル (低): Successfully open device.
2012/04/30 12:10:50 iumfs.ControlDevicePollingThread run
詳細レベル (低): Started
:
※ 表示の都合上、途中で改行しています。
** ファイルシステムのマウント [#i7948cdf]
iumfs ファイルシステムのマウントには通常の mount(1M) コマ...
マウント時にはファイルシステムタイプとして iumfs を指定し...
使い方:
# /usr/sbin/mount -F iumfs hdfs://name_node/base_path mo...
: name_node | NameNode のホスト名
: base_path | マウントをする HDFS 上のディレクトリのパス...
: mount_point | hdfs ファイルシステムをマウントするローカ...
> ※ root 権限が必要です
以下に /mnt ディレクトリに HDFS (NameNode はnamenode.exam...
# /usr/sbin/mount -F iumfs hdfs://namenode.example.com/u...
^^^^^^^^^^^^^^^^^^^^ ^^...
NameNode ベ...
マウントの確認:
# /usr/sbin/mount
:
:
/mnt on hdfs://namenode.example.com/user/myname read/wri...
** 可能なファイル操作 [#g8e2a81e]
*** ディレクトリの移動、ディレクトリエントリの参照 [#b716...
$ cd /mnt/
$ /bin/ls
inputs
*** 各ファイルの属性情報の参照 [#saeda8b3]
$ /bin/ls -l
total 3
drwxr-xr-x 1 root root 0 May 21 23:03 ./
drwxr-xr-x 1 root root 0 May 21 23:03 ../
drwxr-xr-x 1 root root 0 May 21 23:03 in...
ファイル属性のうち、ファイルタイプ、ファイルサイズ、ファ...
*** ファイルの読み込み [#ud041f82]
$ cd inputs
$ cat file1
this is file1
this is file1
this is file1
this is file1
$
*** ファイルのコピー [#s3801688]
HDFS からローカルディスクへ
$ cp file1 /var/tmp
$
ローカルディスクから HDFSへ
$ cp /etc/hosts /mnt
** 不可能な操作 [#uc61e2ee]
open,creat,read,write,mkdir,rmdir,getdent,ulink,stat 以外...
ファイルのアクセス権の変更
$ chmod 777 file1
$ <-- エラーにはなりませんがアクセス権は変更されません
ファイルの更新日時を変更
$ <-- エラーにはなりませんがファイルの更新日は変更になり...
ファイルのオーナーを変更
$ chown nobody file1
$ <-- エラーにはなりませんがオーナーは root のママです。
** ファイルシステムのアンマウント [#t4473c5e]
hdfs ファイルシステムのアンマウントには通常の umount(1M) ...
Usage: umount mount_point
mount_point : ファイルシステムがマウントされているマ...
他のファイルシステムでもおなじですが、だれかがそのファイ...
アンマウントの成功例)
# umount /mnt
#
ファイルシステムが利用中である為にアンマウントが失敗する...
# pwd
/mnt
# umount /mnt
umount: /mnt 使用中です。
* 今後の課題 [#q8d2f3d7]
+ パフォーマンスの向上&br;最初の読み込み時に dfs の copyT...
終了行:
#wysiwyg
*Solaris で擬似ファイルシステムをつくろう/其の3(HDFSファ...
#norelated
* 目次 [#v4fc9936]
#contents
* ご注意 [#s352c217]
ここで紹介しているプログラムは、カーネルモジュールを含ん...
* 概要 [#f863b7fa]
[[Hadoop:http://hadoop.apache.org/]] の [[HDFS:http://had...
NFS の様に HDFS をマウントすることができ、一度マウントし...
> ※ 同様のことが行える FUSE (Filesystem in userland) とい...
- [[FUSE on OpenSolaris:http://hub.opensolaris.org/bin/vi...
- [[MountableHDFS:http://www.google.co.jp/url?sa=t&source...
* ソースファイルとダウンロード [#p0da4166]
管理の利便性からソースコードは[[Github:http://github.com]...
今後はこちらにアップデートしていきます。ソースコードもこ...
: ファイルシステムモジュールのソースファイルのダウンロー...
: ユーザモードデーモンプログラムのソースファイルのダウン...
: ソースコードの参照 | http://github.com/kaizawa/iumfs &b...
COLOR(RED){Github へのコードの配置にともない文字コードを ...
* 動作確認済み Solaris バージョン及びプラットフォーム [#p...
このプログラムの動作確認状況は以下のようになっています。
|プラットフォーム&br;Solarisバージョン|Sparc&br;(32bit)|S...
|Solaris10|-|◯|?|?|
|OpenSolaris|-|?|◯|◯|
|OpenIndiana 148|-|?|◯|?|
|Solaris11 express|-|?|◯|?|
|Solaris11|-|?|?|◯|
> ○:動作確認済み ×:動作不可 ?:未確認 -:該当なし&br;
* プログラムの解説 [#ta6aa97f]
基本的な考え方は「Solaris で擬似ファイルシステムをつくろ...
** iumfs ファイルシステムモジュール [#b36c5a3a]
ファイルシステムとしての基本的な枠組みは「Solaris で擬似...
モジュールのファイル名は「iumfs」ですが、カーネルに登録す...
** iumfscntl デバイスドライバ [#na7df0d0]
こちらも基本的には「Solaris で擬似ファイルシステムをつく...
ただ、今回は Java プログラムからアクセスされることを考え...
** hdfsd ユーザモードデーモンプログラム [#g8c4e78e]
[[hadoop の API:http://hadoop.apache.org/common/docs/curr...
このプログラムは起動時に /dev/iumfscntl デバイスをオープ...
** iumfs ファイルシステム用 mount コマンド [#s65b30a4]
iumfs ファイルシステム専用の mount コマンドです。~
其の2とほぼ同じでものです。mount(1M) コマンドが自動的にこ...
* 実行環境の要件 [#f19b4629]
このプログラムのコンパイル、及び実行時には以下の要件が満...
+ Solaris/OpenSolaris([[動作確認済み Solaris バージョン>#...
+ JDK6 がインストールされている(JRE5.0以前は動作確認して...
+ hadoop 0.21.0(以降)がインストールされていて、正常に動...
+ HADOOP_HOME 環境変数に Hadoop のインストールディレクト...
(※)ここでは説明しきれないので Hadoop のセットアップ方法...
* インストール [#q0561d17]
** コンパイル&インストール [#re8fcf25]
*** カーネルモジュールと mount コマンド [#m2a36a0e]
ファイルシステムモジュールのダウンロードファイルを解凍し...
OpenSolaris での実行例:
$ cd kaizawa-iumfs-4f1da99
$ ./configure
checking for gcc... no
checking for cc... cc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... no
checking whether cc accepts -g... yes
checking for cc option to accept ISO C89... none needed
checking for a BSD-compatible install... /usr/bin/ginsta...
checking for isainfo... yes
configure: creating ./config.status
config.status: creating Makefile
$ make
cd module ; make
gcc -c -DPACKAGE_NAME="IUMFS" -DPACKAGE_TARNAME="iumfs" ...
-DPACKAGE_BUGREPORT="admin2@whiteboard.ne.jp" -g -O2 -Wa...
-mno-red-zone -D_KERNEL -I. iumfs_vfsops.c -o iumfs_vfso...
gcc -c -DPACKAGE_NAME="IUMFS" -DPACKAGE_TARNAME="iumfs" ...
-DPACKAGE_BUGREPORT="admin2@whiteboard.ne.jp" -g -O2 -W...
-mno-red-zone -D_KERNEL -I. iumfs_vnops.c -o iumfs_vnop...
:
> ※ 表示の都合上、一部改行してるところがあります
# make install
cd module ; make install
/bin/ginstall -c -m 0644 -o root -g sys iumfs /kernel/fs...
/bin/ginstall -c -m 0644 -o root -g sys iumfs.conf /usr/...
:
> ※ ここだけ root 権限が必要です!
*** ユーザモードデーモン [#meda3505]
ユーザモードデーモンプログラムのダウンロードファイルには...
$ export HADOOP_HOME=/usr/local/hadoop
$ export JAVA_HOME=/usr/java
$ cd cmd
$ ant
Buildfile: build.xml
compile:
[javac] Compiling 12 source files to /var/tmp/hdfs/cm...
dist:
[jar] Building jar: /var/tmp/hdfs/cmd/hdfsd.jar
BUILD SUCCESSFUL
Total time: 2 seconds
** アンインストール [#zd68f39b]
ファイルシステムモジュールおよびコマンドのアンインストー...
もし、インストール時に利用した Makefile がすでに無い場合...
# make uninstall
> ※ root 権限が必要です
hdfs ファイルシステムが利用中(マウントされている)の場合...
* 使い方 [#ja8cf0fb]
hdfs ファイルシステムの利用方法についてご説明します。
> COLOR(RED){※ hadoop のネームノード、データノードは予め...
既存ファイルへの追記(Append)を有効にするためには ${HADOOP...
<property>
<name>dfs.support.append</name>
<value>true</value>
</property>
このプロパティを設定しないで書き込み操作をすると I/...
$ echo aaa >> hoge
-ksh: echo: write to 1 failed [I/O error
** hdfsd デーモンの起動 [#j5e9cc04]
hadoop 各データノードと通信を行う hdfsd デーモンを起動し...
実際にはこのデーモンの起動と、後述のファイルシステムのマ...
起動方法:~
ユーザモードデーモンプログラムのダウンロードファイルを展...
$ ./start-hdfsd.sh
若しくは、直接 hadoop コマンドを使って hdfsd を実行するこ...
% ${HADOOP_HOME}/bin/hadoop -cp ${CLASSPATH} iumfs.hdfs....
$HADOO_HOME は Hadoop がインストールされているディレクト...
$CLASSPATH には最低でも以下の4つをパスを指定する必要があ...
+ hdfsd.jar ファイルスのパス(ダウンロードファイルに含ま...
+ iumfs-daemon-core-xx.jar (ダウンロードファイルに含まれ...
+ hadoop-core-xxx.jar ファイルのパス ファイル(hadoop の...
+ hadoop の設定ファイルが置いてあるディレクトリ のパス
実行例:
$ hadoop -cp "./cmd/hdfsd.jar:./cmd/lib/iumfs-daemon-cor...
/usr/local/hadoop/hadoop-core-1.0.2.jar" iumfs.hdfs.Main
> ※ 一般ユーザでも起動できるはずですが、もし権限不足で iu...
また、[[java.util.Logger:http://java.sun.com/javase/ja/6/...
デバッグ実行例:
$ hadoop -Djava.util.logging.config.file=cmd/log.prop -...
/usr/local/hadoop/conf:/usr/local/hadoop/hadoop-core-1.0...
2012/04/30 12:10:50 iumfs.ControlDevicePollingThread run
詳細レベル (低): Successfully open device.
2012/04/30 12:10:50 iumfs.ControlDevicePollingThread run
詳細レベル (低): Started
2012/04/30 12:10:50 iumfs.ControlDevicePollingThread run
詳細レベル (低): Successfully open device.
2012/04/30 12:10:50 iumfs.ControlDevicePollingThread run
詳細レベル (低): Started
2012/04/30 12:10:50 iumfs.ControlDevicePollingThread run
詳細レベル (低): Successfully open device.
2012/04/30 12:10:50 iumfs.ControlDevicePollingThread run
詳細レベル (低): Started
2012/04/30 12:10:50 iumfs.ControlDevicePollingThread run
詳細レベル (低): Successfully open device.
2012/04/30 12:10:50 iumfs.ControlDevicePollingThread run
詳細レベル (低): Started
:
※ 表示の都合上、途中で改行しています。
** ファイルシステムのマウント [#i7948cdf]
iumfs ファイルシステムのマウントには通常の mount(1M) コマ...
マウント時にはファイルシステムタイプとして iumfs を指定し...
使い方:
# /usr/sbin/mount -F iumfs hdfs://name_node/base_path mo...
: name_node | NameNode のホスト名
: base_path | マウントをする HDFS 上のディレクトリのパス...
: mount_point | hdfs ファイルシステムをマウントするローカ...
> ※ root 権限が必要です
以下に /mnt ディレクトリに HDFS (NameNode はnamenode.exam...
# /usr/sbin/mount -F iumfs hdfs://namenode.example.com/u...
^^^^^^^^^^^^^^^^^^^^ ^^...
NameNode ベ...
マウントの確認:
# /usr/sbin/mount
:
:
/mnt on hdfs://namenode.example.com/user/myname read/wri...
** 可能なファイル操作 [#g8e2a81e]
*** ディレクトリの移動、ディレクトリエントリの参照 [#b716...
$ cd /mnt/
$ /bin/ls
inputs
*** 各ファイルの属性情報の参照 [#saeda8b3]
$ /bin/ls -l
total 3
drwxr-xr-x 1 root root 0 May 21 23:03 ./
drwxr-xr-x 1 root root 0 May 21 23:03 ../
drwxr-xr-x 1 root root 0 May 21 23:03 in...
ファイル属性のうち、ファイルタイプ、ファイルサイズ、ファ...
*** ファイルの読み込み [#ud041f82]
$ cd inputs
$ cat file1
this is file1
this is file1
this is file1
this is file1
$
*** ファイルのコピー [#s3801688]
HDFS からローカルディスクへ
$ cp file1 /var/tmp
$
ローカルディスクから HDFSへ
$ cp /etc/hosts /mnt
** 不可能な操作 [#uc61e2ee]
open,creat,read,write,mkdir,rmdir,getdent,ulink,stat 以外...
ファイルのアクセス権の変更
$ chmod 777 file1
$ <-- エラーにはなりませんがアクセス権は変更されません
ファイルの更新日時を変更
$ <-- エラーにはなりませんがファイルの更新日は変更になり...
ファイルのオーナーを変更
$ chown nobody file1
$ <-- エラーにはなりませんがオーナーは root のママです。
** ファイルシステムのアンマウント [#t4473c5e]
hdfs ファイルシステムのアンマウントには通常の umount(1M) ...
Usage: umount mount_point
mount_point : ファイルシステムがマウントされているマ...
他のファイルシステムでもおなじですが、だれかがそのファイ...
アンマウントの成功例)
# umount /mnt
#
ファイルシステムが利用中である為にアンマウントが失敗する...
# pwd
/mnt
# umount /mnt
umount: /mnt 使用中です。
* 今後の課題 [#q8d2f3d7]
+ パフォーマンスの向上&br;最初の読み込み時に dfs の copyT...
ページ名: