ゴールデンウィークなので、前から気になっていたHadoopを下記本を参考にしつつ遊んでおります。
Hadoop徹底入門
インフラエンジニアとしてはイメージはつきました。でも、開発エンジニアとしては業務で利用する方法がイメージついてないって感じですかね。
以下サンプル動かしたときのログ。
環境はOracle Enterprise Linux 6(64bit)とHadoop 0.21.0です。
HadoopについているREADME.txtでwordcountを動かそうとしたけど、Input path does not exist: hdfs://・・・と表示される。カウントさせたいREADME.txtが見つからないようだ。
[hadoop@myhost hadoop]$ ./bin/hadoop jar hadoop-mapred-examples-0.21.0.jar wordcount README.txt /tmp/mapreduce2
11/05/05 00:06:49 INFO security.Groups: Group mapping impl=org.apache.hadoop.security.ShellBasedUnixGroupsMapping; cacheTimeout=300000
11/05/05 00:06:50 WARN conf.Configuration: mapred.task.id is deprecated. Instead, use mapreduce.task.attempt.id
11/05/05 00:06:50 WARN mapreduce.JobSubmitter: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.
11/05/05 00:06:51 INFO mapreduce.JobSubmitter: Cleaning up the staging area hdfs://localhost:54310/hadoop/mapred/staging/hadoop/.staging/job_201105041812_0017
org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: hdfs://localhost:54310/user/hadoop/README.txt
at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.listStatus(FileInputFormat.java:245)
at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.getSplits(FileInputFormat.java:271)
そもそも、hdfs://localhost:54310/user/hadoop/README.txtってどこよ。。。よくよく調べてみると、OSのファイルシステムでなく、hdfs上を見に行っているらしい。
対処1:事前に下記のようにhdfsにputしてやる
[hadoop@myhost hadoop]$ hdfs dfs -put ./README.txt /tmp
11/05/05 00:04:19 INFO security.Groups: Group mapping impl=org.apache.hadoop.security.ShellBasedUnixGroupsMapping; cacheTimeout=300000
11/05/05 00:04:19 WARN conf.Configuration: mapred.task.id is deprecated. Instead, use mapreduce.task.attempt.id
putした結果をls相当のコマンド(hdfs dfs -ls [Dir Name])でみると下記のように表示される。
[hadoop@myhost hadoop]$ hdfs dfs -ls /tmp
11/05/05 00:04:24 INFO security.Groups: Group mapping impl=org.apache.hadoop.security.ShellBasedUnixGroupsMapping; cacheTimeout=300000
11/05/05 00:04:24 WARN conf.Configuration: mapred.task.id is deprecated. Instead, use mapreduce.task.attempt.id
Found 1 items
-rw-r–r– 3 hadoop supergroup 1366 2011-05-05 00:04 /tmp/README.txt
対処2:「file:」で指定する
[hadoop@myhost hadoop]$ ./bin/hadoop jar hadoop-mapred-examples-0.21.0.jar wordcount file:/usr/local/hadoop/README.txt file:/tmp/mapreduce5
11/05/05 00:27:03 INFO security.Groups: Group mapping impl=org.apache.hadoop.security.ShellBasedUnixGroupsMapping; cacheTimeout=300000
11/05/05 00:27:03 WARN conf.Configuration: mapred.task.id is deprecated. Instead, use mapreduce.task.attempt.id
11/05/05 00:27:03 WARN mapreduce.JobSubmitter: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.
11/05/05 00:27:04 INFO input.FileInputFormat: Total input paths to process : 1
11/05/05 00:27:04 WARN conf.Configuration: mapred.map.tasks is deprecated. Instead, use mapreduce.job.maps
11/05/05 00:27:04 INFO mapreduce.JobSubmitter: number of splits:1
11/05/05 00:27:04 INFO mapreduce.JobSubmitter: adding the following namenodes’ delegation tokens:null
11/05/05 00:27:04 INFO mapreduce.Job: Running job: job_201105041812_0022
11/05/05 00:27:05 INFO mapreduce.Job: map 0% reduce 0%
11/05/05 00:27:12 INFO mapreduce.Job: map 100% reduce 0%
11/05/05 00:27:18 INFO mapreduce.Job: map 100% reduce 100%
11/05/05 00:27:20 INFO mapreduce.Job: Job complete: job_201105041812_0022
file:と書くとローカルのファイルシステムとして出力してくれるみたい。書かないとhdfs上に書く。
これからプログラミング周りとHiveを研究する予定。