どぅーちゅいむーにー

これ、Twitterでよくね?という日々の記録かも

HDFSの基本的なメモ

Hadoopをインストール、セットアップして起動したあと、適当にいじってみる。

  • 参照

Shellコマンドで。
http://hadoop.apache.org/common/docs/current/hdfs_shell.html
HDFS自体のユーザガイド
http://hadoop.apache.org/common/docs/current/hdfs_user_guide.html

  • Shellから操作いろいろ

1)やっぱ基本はls

myhdfs1> hadoop fs -ls /
Found 2 items
drwxr-xr-x   - issei supergroup          0 2010-04-19 18:03 /home
drwxr-xr-x   - issei supergroup          0 2010-04-19 18:30 /tmp

たしか、/tmp と /home は別に作った気がする。
この結果は、myhdfs1/2/3 いずれのマシンで実行しても同じです。まぁ、そうでなくては困りますが。


2)ディレクトリを作ってみる。

myhdfs1> hadoop fs -ls /home/issei/
Found 1 items
drwxr-xr-x   - issei supergroup          0 2010-04-19 19:53 /home/issei/work
myhdfs1> hadoop fs -mkdir /home/issei/tmp
myhdfs1> hadoop fs -ls /home/issei/
Found 2 items
drwxr-xr-x   - issei supergroup          0 2010-04-20 10:30 /home/issei/tmp
drwxr-xr-x   - issei supergroup          0 2010-04-19 19:53 /home/issei/work
myhdfs1>

まぁ、一般的なShellと同じかと。


3)都合が悪いのでHDFS上のディレクトリをリネームしてみる。
まぁ、CentOS上のディレクトリ構成も /home/issei とかになっていたりすると、自分でもこんがらがいそうな気がするので、HDFS上のディレクトリ名を変更してみる。

myhdfs1> hadoop fs -ls /home
Found 1 items
drwxr-xr-x   - issei supergroup          0 2010-04-20 10:30 /home/issei
myhdfs1> ls
app  tmp  work
myhdfs1> hadoop fs -ls /home
Found 1 items
drwxr-xr-x   - issei supergroup          0 2010-04-20 10:30 /home/issei
myhdfs1> hadoop fs -mv /home/ /hdhome
myhdfs1> hadoop fs -ls /
Found 2 items
drwxr-xr-x   - issei supergroup          0 2010-04-19 18:03 /hdhome
drwxr-xr-x   - issei supergroup          0 2010-04-19 18:30 /tmp
myhdfs1> hadoop fs -ls /hdhome/issei
Found 2 items
drwxr-xr-x   - issei supergroup          0 2010-04-20 10:30 /hdhome/issei/tmp
drwxr-xr-x   - issei supergroup          0 2010-04-19 19:53 /hdhome/issei/work
myhdfs1> hadoop fs -mv /hdhome/issei /hdhome/k155e1
myhdfs1> hadoop fs -ls /hdhome/
Found 1 items
drwxr-xr-x   - issei supergroup          0 2010-04-20 10:30 /hdhome/k155e1

そんなわけで、実ファイルシステム(?)は、/home/issei/ で、HDFS上のパスは /hdhome/k155e1/ にしてみました。


4)ファイルを投入してみる。
ファイルを投入する場合、copyFromLocal とか moveFromLocal を実行して、ローカルのファイルシステムからHDFS上にコピー・移動する感じです。

myhdfs1> pwd
/home/issei/local
myhdfs1> ls
hello.txt
myhdfs1> cat hello.txt
Hello World!

This is test file for HDFS test.

で、これをHDFS上にコピーして、中身を確認(cat)してみる。

myhdfs1> pwd
/home/issei/local
myhdfs1> ls
hello.txt
myhdfs1> hadoop fs -ls /hdhome/k155e1/tmp
myhdfs1> hadoop fs -copyFromLocal hello.txt /hdhome/k155e1/tmp
myhdfs1> hadoop fs -ls /hdhome/k155e1/tmp
Found 1 items
-rw-r--r--   2 issei supergroup         48 2010-04-20 10:42 /hdhome/k155e1/tmp/hello.txt
myhdfs1> hadoop fs -cat /hdhome/k155e1/tmp/hello.txt
Hello World!

This is test file for HDFS test.

myhdfs1>

以上、ローカルファイルシステムからのコピーと、cat の使い方、という感じ。


5)で、実際のファイルシステム上はどうなっているのか?
まだ、細かいところまで調べきれていないのですが、ファイルは /tmp/hadoop-ユーザID/ あたりに保存されます。まぁ、他にも /tmp 以下にファイルはあるのですが。
今回(ユーザIDはissei)の場合、怪しいところをたどっていくとこんな感じになりました。

myhdfs1> ls /tmp/hadoop-issei
hadoop-issei/                       hadoop-issei-namenode.pid
hadoop-issei-datanode.pid           hadoop-issei-secondarynamenode.pid
hadoop-issei-jobtracker.pid         hadoop-issei-tasktracker.pid
myhdfs1> ls /tmp/hadoop-issei/
dfs  mapred
myhdfs1> ls /tmp/hadoop-issei/
dfs  mapred
myhdfs1> ls /tmp/hadoop-issei/dfs/
data  name  namesecondary
myhdfs1> ls /tmp/hadoop-issei/dfs/data/
current  detach  in_use.lock  storage  tmp
myhdfs1> ls /tmp/hadoop-issei/dfs/data/current/
VERSION                             blk_101486462659419571             subdir0
blk_-137371469502402326             blk_101486462659419571_1080.meta   subdir1
blk_-137371469502402326_1055.meta   blk_1505310026847830224            subdir10
blk_-1949842581763971189            blk_1505310026847830224_1035.meta  subdir11
blk_-1949842581763971189_1072.meta  blk_1746935554941452270            subdir12
... この間にたくさんのファイル ...
blk_-869827101370329721_1079.meta   blk_912974557086589529             subdir8
blk_-9022076184702837969            blk_912974557086589529_1076.meta   subdir9
blk_-9022076184702837969_1075.meta  dncp_block_verification.log.curr
myhdfs1>

実際にどのサーバにファイルが保存されているのか?については、また追って調べてみたいと思っています。


6)まとめ?
HDFSをShellで操作するという点については、こんなところかと。
Unix Shellを使っている人にとってはあまり違和感ない感じですね。
あとは HDFS File System Shell Guide↓でどのようなことができるかは把握できると思います。
http://hadoop.apache.org/common/docs/current/hdfs_shell.html
hadoop fs -ls とかを hdls とか alias 定義しておけば、もっと楽になる感じかと。


そんなわけで、本エントリはこんなところで。