UNIXというものに触れ始めてからようやく4ヶ月程度たちました.
なぜこんなことになったかというと結局ちまたで話題のHadoopのせいです.
tipsなどが日本語でまとまってあまり見当たらないのでやっていることはまとめておきます.
まずはhadoop ファイルシステム(fs)のシェルコマンドをまとめ.
Hadoop fs -*
・ファイル表示 -ls, -lsr
$ hadoop fs -ls Found 1 items drwxr-xr-x - hadoop supergroup 0 2010-11-05 11:28 /user/hadoop/tera_1000 $ hadoop fs -ls /user/kimura/ Found 5 items drwxr-xr-x - hadoop supergroup 0 2010-12-06 15:31 /user/output drwxr-xr-x - hadoop supergroup 0 2010-12-06 16:27 /user/output1 drwxr-xr-x - hadoop supergroup 0 2010-12-06 17:29 /user/output2 drwxr-xr-x - hadoop supergroup 0 2010-12-07 09:38 /user/output3 drwxr-xr-x - hadoop supergroup 0 2010-12-07 09:41 /user/output4 $ hadoop fs -lsr /user/output1/ drwxr-xr-x - hadoop supergroup 0 2010-12-06 16:27 /user/output1/_logs drwxr-xr-x - hadoop supergroup 0 2010-12-06 16:27 /user/output1/_logs/history -rw-r--r-- 2 hadoop supergroup 17010 2010-12-06 16:27 /user/output1/_logs/history/c1-m01_1291256668975_job_xxxxx_conf.xml -rw-r--r-- 2 hadoop supergroup 27483 2010-12-06 16:27 /user/output1/_logs/history/c1-m01_1291256668975_job_xxxxx_hadoop_testディレクトリを指定することで見れる. -lsrは再帰的なファイル表示.
いちいちhadoop fs -ls ディレクトリ名として打たないといけない(tabも効かないorz) このシーンでは
-lsrはけっこう便利である.
・ファイル操作:移動, コピー, 削除 ;mv, cp, rm...
$ hadoop fs -mv /user/output1 /user/test1 $ hadoop fs -ls /user/ Found 5 items drwxr-xr-x - hadoop supergroup 0 2010-12-06 15:31 /user/output drwxr-xr-x - hadoop supergroup 0 2010-12-06 17:29 /user/output2 drwxr-xr-x - hadoop supergroup 0 2010-12-07 09:38 /user/output3 drwxr-xr-x - hadoop supergroup 0 2010-12-07 09:41 /user/output4 drwxr-xr-x - hadoop supergroup 0 2010-12-06 16:27 /user/test1 $ hadoop fs -rm /user/test1.txt Deleted hdfs://xxxx/user//test1.txt $ hadoop fs -rmr /user/test1 Deleted hdfs://xxxx/user/test1このへんはUNIXの普通のファイルシステムの操作と同じである. -rmrはディレクトリの削除.
質問なしでいっきにディレクトリを消されるので注意.
hadoop MapReduceのように, outputのディレクトリを勝手に作られてしまう操作では,
テストするたびにディレクトリがどんどんできていくので, テスト実行してディレクトリ丸ごと削除は便利である.
・ファイル中身表示: -cat, -tail
$ hadoop fs -cat /user/test1.txt test $ hadoop fs -tail /public/itpro/log_finish.txt P/1.1" 200 4780 110.0.215.26 - - [28/Jan/2010:11:59:47 +0900] "GET /article/COLUMN/20090403/327762/?ST=lin-os&P=1 HTTP/1.1" 200 24872 110.0.134.240 - - [28/Jan/2010:11:59:48 +0900] "GET /article/COLUMN/20060228/231125/ HTTP/1.0" 200 24213 110.0.188.192 - - [28/Jan/2010:11:59:53 +0900] "GET /linux/backnum/199912/article/article_corel.shtml HTTP/1.1" 200 21881 110.0.169.231 - - [28/Jan/2010:11:59:54 +0900] "GET /article/COLUMN/20060224/230573/?ST=oss HTTP/1.1" 200 82220 110.0.163.203 - - [28/Jan/2010:11:59:54 +0900] "GET /article/COLUMN/20060227/230729/?ST=oss HTTP/1.1" 200 27778 110.0.147.216 - - [28/Jan/2010:11:59:58 +0900] "GET /article/COLUMN/20060227/230691/?ST=oss HTTP/1.1" 200 25140 110.0.169.231 - - [28/Jan/2010:11:59:58 +0900] "GET /article/COLUMN/20060227/230896/?ST=oss HTTP/1.1" 200 38033 110.0.169.231 - - [28/Jan/2010:12:00:00 +0900] "GET /article/COLUMN/20060227/230875/?ST=oss HTTP/1.1" 200 41170 110.0.85.59 - - [28/Jan/2010:12:00:00 +0900] "GET /article/COLUMN/20060228/231082/ HTTP/1.1" 200 27409-head などはないが, -tailでファイル後ろ1kB分を表示する. 軽くみたいときに便利.
ペタ, テラ級のインプットに対し, いきなりプログラムを実行するのは無駄なので,
hadoop fs -cat xxx | head -100 > sampleinput.txtなどでサンプルインプットを作ってから実行を推奨. UNIXでパイプで結果を渡すことはできるので.
あと, 余談だがhadoop fs コマンドラインでは*(アスタリスク)が効く.
・ディスク容量, ファイルサイズ表示: -du -df
$ hadoop fs -df Filesystem Size Used Avail Use% / 11597229867008 4592012775424 6422221864960 39% $ hadoop fs -du /user/ Found 6 items 44492 hdfs://xxxx/user/output 44502 hdfs://xxxx/user/output2 88556 hdfs://xxxx/user/output3 88531 hdfs://xxxx/user/output4 44493 hdfs://xxxx/user/test1 5 hdfs://xxxx/user/test1.txt
・ファイル転送: -copyToLcal, -get, -copyFromLocal, -put
$ hadoop fs -copyToLocal /user/test1.txt ~/workspace/test $ ls test test1.txt $ hadoop fs -get /user/test1.txt ~/workspace/test $ ls test test1.txt $ hadoop fs -copyFromLocal test1.txt /user/ $ hadoop fs -ls /user/ Found 5 items drwxr-xr-x - hadoop supergroup 0 2010-12-06 15:31 /user/output drwxr-xr-x - hadoop supergroup 0 2010-12-06 17:29 /user/output2 drwxr-xr-x - hadoop supergroup 0 2010-12-07 09:38 /user/output3 drwxr-xr-x - hadoop supergroup 0 2010-12-07 09:41 /user/output4 -rw-r--r-- 2 hadoop supergroup 5 2010-12-07 10:35 /user/test1.txt $ hadoop fs -put test1.txt /user/ $ hadoop fs -ls /user/ Found 6 items drwxr-xr-x - hadoop supergroup 0 2010-12-06 15:31 /user/output drwxr-xr-x - hadoop supergroup 0 2010-12-06 17:29 /user/output2 drwxr-xr-x - hadoop supergroup 0 2010-12-07 09:38 /user/output3 drwxr-xr-x - hadoop supergroup 0 2010-12-07 09:41 /user/output4 drwxr-xr-x - hadoop supergroup 0 2010-12-06 16:27 /user/test1 -rw-r--r-- 2 hadoop supergroup 5 2010-12-07 10:06 /user/test1.txt
-copyToLocal, -getはhdfsからファイルを現在のクライアントのローカルへコピーする.
逆に-copyFromLocal, -putはローカルからhdfsへコピーする.
・その他
あとchmod等色々あるが, 基本的にUNIXのコマンドはhadoop fs -*とすれば使えることが多い.
コマンド一覧は以下のとおり.
$hadoop fs [~] Usage: java FsShell [-ls] [-lsr ] [-df [ ]] [-du [-s] [-h] ] [-dus ] [-count[-q] ] [-mv ] [-cp ] [-rm [-skipTrash] ] [-rmr [-skipTrash] ] [-expunge] [-put ... ] [-copyFromLocal ... ] [-moveFromLocal ... ] [-get [-ignoreCrc] [-crc] ] [-getmerge [addnl]] [-cat ] [-text ] [-copyToLocal [-ignoreCrc] [-crc] ] [-moveToLocal [-crc] ] [-mkdir ] [-setrep [-R] [-w] ] [-touchz ] [-test -[ezd] ] [-stat [format] ] [-tail [-f] ] [-chmod [-R] PATH...] [-chown [-R] [OWNER][:[GROUP]] PATH...] [-chgrp [-R] GROUP PATH...] [-help [cmd]] Generic options supported are -conf specify an application configuration file -D use value for given property -fs specify a namenode -jt specify a job tracker -files specify comma separated files to be copied to the map reduce cluster -libjars specify comma separated jar files to include in the classpath. -archives specify comma separated archives to be unarchived on the compute machines.
>>apache hadoopの公式ページ
http://hadoop.apache.org/common/docs/r0.18.3/hdfs_shell.html
も参考に.
hadoopの仕組み, MapReduce, その他のモジュールについてもまた別途書いていきたいと思います.
0 件のコメント:
コメントを投稿