hadoop-streaming:当mapred.reduce.tasks = 1时,reducer似乎没有运行

时间:2012-07-30 23:08:37

标签: python hadoop mapreduce hadoop-streaming

我正在通过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时 我看到两个文件part-00000part-00001两个文件都有一行0

  • D mapred.reduce.tasks=1-reduce 'cat'时 行为与reduce没有做任何事情相同

  • 当我运行cat file | python AttibuteMax.py 8时 我得到868

这意味着D mapred.reduce.tasks=0cat file | python AttributeMax.py 8也没有产生相同的输出(但它们应该,对吧?)

当输入数据也相同时,会导致行为差异的原因是什么?

更新1

  • D mapred.reduce.tasks=0时 我看到4个文件part-00000part-00001part-00002part-00002分别为单行268,706,348,868
  • 当我运行$ cat ~/Downloads/hadoop/input/apat63_99.txt | python ../../../src/main/python_scripts/AttributeMax.py 8 | cat 时,我确实看到所需的输出为868

2 个答案:

答案 0 :(得分:1)

设置mapred.reduce.tasks=0时是否获得预期的输出?如果您使用-reducer 'cat'指定mapred.reduce.tasks=1,该怎么办?关于流式传输的一个好处是你可以使用管道从命令行非常有效地测试它:

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

但似乎你的应用没有产生任何输出。

答案 1 :(得分:0)

不确定确切的答案,但对我来说,一旦我在集群上运行具有更好存储的机器,它就运行良好:)