0

私は基本的な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-00000part-00001両方のファイルに 1 行 0 がある場合

  • whenD 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-00000part-00001part-00002およびpart-000021 行でそれぞれ 268、706、348、868 が表示される場合
  • 実行すると、$ cat ~/Downloads/hadoop/input/apat63_99.txt | python ../../../src/main/python_scripts/AttributeMax.py 8 | cat 目的の出力が次のように表示されます868
4

2 に答える 2

1

設定したときに期待される出力が得られますmapred.reduce.tasks=0か? で指定する-reducer 'cat'mapred.reduce.tasks=1?ストリーミングの優れた点の 1 つは、パイプを使用してコマンドラインから非常に効果的にテストできることです。

cat input | python mapper.py | sort | python reducer.py

しかし、あなたのアプリは出力を生成していないようです。

于 2012-07-30T23:53:06.900 に答える
0

正確な答えはわかりませんが、私にとっては、ストレージが優れているマシンでクラスターで実行すると、問題なく動作しました:)

于 2012-07-31T17:08:16.257 に答える