私は基本的なMap Reduce
プログラムを実行していますhadoop-streaming
のMap
ように見えます
import sys
index = int(sys.argv[1])
max = 0
for line in sys.stdin:
fields = line.strip().split(",")
if fields[index].isdigit():
val = int(fields[index])
if val > max:
max = val
else:
print max
私はそれを実行します
hadoop jar /usr/local/Cellar/hadoop/1.0.3/libexec/contrib/streaming/hadoop-streaming-1.0.3.jar -D mapred.reduce.tasks=1 -input input -output output -mapper '/Users/hhimanshu/code/p/java/hadoop-programs/hadoop-programs/src/main/python_scripts/AttributeMax.py 8' -file /Users/me/code/p/java/hadoop-programs/hadoop-programs/src/main/python_scripts/AttributeMax.py
Hadoop in Actionで読んだのはmapred.reduce.tasks=1
、
特定のレデューサーを指定していないため、デフォルトの IdentityReducer が使用されます。その名前が示すように、IdentityReducer は入力をそのまま出力に渡します。
コンソールを見るとわかります
12/07/30 16:01:33 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
12/07/30 16:01:33 WARN snappy.LoadSnappy: Snappy native library not loaded
12/07/30 16:01:33 INFO mapred.FileInputFormat: Total input paths to process : 1
12/07/30 16:01:34 INFO streaming.StreamJob: getLocalDirs(): [/Users/me/app/hadoop/tmp/mapred/local]
12/07/30 16:01:34 INFO streaming.StreamJob: Running job: job_201207291003_0037
12/07/30 16:01:34 INFO streaming.StreamJob: To kill this job, run:
12/07/30 16:01:34 INFO streaming.StreamJob: /usr/local/Cellar/hadoop/1.0.3/libexec/bin/../bin/hadoop job -Dmapred.job.tracker=localhost:9001 -kill job_201207291003_0037
12/07/30 16:01:34 INFO streaming.StreamJob: Tracking URL: http://localhost:50030/jobdetails.jsp?jobid=job_201207291003_0037
12/07/30 16:01:35 INFO streaming.StreamJob: map 0% reduce 0%
12/07/30 16:01:51 INFO streaming.StreamJob: map 100% reduce 0%
何の進展もなく、ただ走り続けるだけです。動作していないようですが、どうすれば修正できますか?
アップデート
D mapred.reduce.tasks=0
2 つのファイルが表示されpart-00000
、part-00001
両方のファイルに 1 行 0 がある場合when
D mapred.reduce.tasks=1
と-reduce 'cat'
動作は reduce が何もしていない場合と同じです実行する
cat file | python AttibuteMax.py 8
と868になります
これはD mapred.reduce.tasks=0
、 とcat file | python AttributeMax.py 8
も同じ出力を生成していないことを意味します (しかし、そうすべきですよね?)
入力データも同じ場合の動作の違いの原因は何ですか?
更新 1
D mapred.reduce.tasks=0
4 つのファイルpart-00000
、part-00001
、part-00002
およびpart-00002
1 行でそれぞれ 268、706、348、868 が表示される場合- 実行すると、
$ cat ~/Downloads/hadoop/input/apat63_99.txt | python ../../../src/main/python_scripts/AttributeMax.py 8 | cat
目的の出力が次のように表示されます868