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 定義しておけば、もっと楽になる感じかと。
そんなわけで、本エントリはこんなところで。