HadoopのHDFS確認とサンプルプログラムの実行

前回作成したHadoop環境でHDFSの確認を行います。
その後、HDFSを使うサンプルプログラムを実行します。
参考サイト:http://archive.cloudera.com/docs/cdh3-pseudo-distributed.html

準備

inputディレクトリを作成する

$ hadoop-0.20 fs -mkdir input

作成されたか確認する

$ hadoop-0.20 fs -ls
Found 1 items
drwxr-xr-x   - root supergroup          0 2010-06-01 22:49 /user/root/input


試しに設定用のXMLファイルをHDFSへコピー

$ hadoop-0.20 fs -put /etc/hadoop-0.20/conf/*.xml input

コピーされたか確認

$ hadoop-0.20 fs -ls input
Found 6 items
-rw-r--r--   1 root supergroup       3936 2010-06-01 22:53 /user/root/input/capacity-scheduler.xml
-rw-r--r--   1 root supergroup        338 2010-06-01 22:53 /user/root/input/core-site.xml
-rw-r--r--   1 root supergroup       3032 2010-06-01 22:53 /user/root/input/fair-scheduler.xml
-rw-r--r--   1 root supergroup       4190 2010-06-01 22:53 /user/root/input/hadoop-policy.xml
-rw-r--r--   1 root supergroup        496 2010-06-01 22:53 /user/root/input/hdfs-site.xml
-rw-r--r--   1 root supergroup        213 2010-06-01 22:53 /user/root/input/mapred-site.xml

サンプルプログラムの実行

サンプルプログラムに入っている「grep」サンプルを実行

$ hadoop-0.20 jar /usr/lib/hadoop-0.20/hadoop-*-examples.jar grep input output 'dfs[a-z.]+'

実行中は以下のように出力される
ログをよく見ると、jobが二回走っている事が分かる
これはgrepが二段のMapReduceでできているから
一段目:grep-search
二段目:grep-sort

10/06/01 22:56:49 INFO mapred.FileInputFormat: Total input paths to process : 6
10/06/01 22:56:50 INFO mapred.JobClient: Running job: job_201006012248_0001
10/06/01 22:56:51 INFO mapred.JobClient:  map 0% reduce 0%
10/06/01 22:57:18 INFO mapred.JobClient:  map 33% reduce 0%
10/06/01 22:57:27 INFO mapred.JobClient:  map 66% reduce 0%
10/06/01 22:57:33 INFO mapred.JobClient:  map 100% reduce 11%
10/06/01 22:57:39 INFO mapred.JobClient:  map 100% reduce 100%
10/06/01 22:57:41 INFO mapred.JobClient: Job complete: job_201006012248_0001
10/06/01 22:57:41 INFO mapred.JobClient: Counters: 18
10/06/01 22:57:41 INFO mapred.JobClient:   Job Counters 
10/06/01 22:57:41 INFO mapred.JobClient:     Launched reduce tasks=1
10/06/01 22:57:41 INFO mapred.JobClient:     Launched map tasks=6
10/06/01 22:57:41 INFO mapred.JobClient:     Data-local map tasks=6
(途中略)
10/06/01 22:58:06 INFO mapred.JobClient:     Map output bytes=86
10/06/01 22:58:06 INFO mapred.JobClient:     Map input bytes=118
10/06/01 22:58:06 INFO mapred.JobClient:     Combine input records=0
10/06/01 22:58:06 INFO mapred.JobClient:     Map output records=4
10/06/01 22:58:06 INFO mapred.JobClient:     Reduce input records=4

実行はWeb画面でも確認できる
http://localhost:50030/

結果の確認

grepを実行すると、outputディレクトリが作成される

$ hadoop-0.20 fs -ls
Found 2 items
drwxr-xr-x   - root supergroup          0 2010-06-01 22:53 /user/root/input
drwxr-xr-x   - root supergroup          0 2010-06-01 22:58 /user/root/output

outputディレクトリの下にpart-****ファイルが作成される

$ hadoop-0.20 fs -ls output
Found 2 items
drwxr-xr-x   - root supergroup          0 2010-06-01 22:57 /user/root/output/_logs
-rw-r--r--   1 root supergroup         62 2010-06-01 22:57 /user/root/output/part-00000

出力された結果を見てみる

$ hadoop-0.20 fs -cat output/part-00000 | head
1	dfs.name.dir
1	dfs.permissions
1	dfs.replication
1	dfsadmin

4つ見つかった、と言う結果

これをWeb画面で確認する事もできる
http://localhost:50070/


※ このサンプル、連続で実行すると「FileAlreadyExistsException」でアベンドする
これはoutputディレクトリが既に作られてる事が原因
ディレクトリを削除して実行するとうまくいく

$ hadoop-0.20 fs -rmr output