2012-07-30 95 views
0

我通過hadoop-streamingHadoop的流:減速似乎並沒有被運行時,mapred.reduce.tasks = 1

運行的基本Map Reduce程序的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% 

但這並沒有取得任何進展,只是在後臺繼續運行。它似乎不工作,我該如何解決這個問題?

UPDATE

  • D mapred.reduce.tasks=0 我看到兩個文件part-00000part-00001文件既有一行0

  • D mapred.reduce.tasks=1-reduce 'cat' 行爲是一樣的,如果減少是不做任何事

  • 當我運行cat file | python AttibuteMax.py 8
    我得到868

這意味着D mapred.reduce.tasks=0cat file | python AttributeMax.py 8也不會產生相同的輸出(但他們應該吧?)

的會是什麼行爲會造成的差異當輸入數據也是一樣的?

UPDATE 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

回答

1

你是否得到了當您設置mapred.reduce.tasks=0時的預期輸出?如果用mapred.reduce.tasks=1指定-reducer 'cat',該怎麼辦?一個關於流媒體的巧妙的事情是,你可以使用管道命令行很有效的測試:

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

但它似乎是您的應用程序不產生任何輸出。

+0

@保羅你好,我想你說的是什麼,併發布了更新,讓我知道你認爲會導致這個問題?非常感謝 – daydreamer 2012-07-31 13:00:22

+0

嗯......你確定你的本地磁盤上的「文件」與你傳遞給流式作業的輸入相同嗎?如果你做了像「hadoop fs -text | python AttributeMax.py 8」 – 2012-07-31 13:07:11

+0

我剛加了'UPDATE 1',好像地圖工作正常現在 – daydreamer 2012-07-31 13:09:48

0

不能確定確切的答案,但對我來說,一旦我跑它具有更好的存儲設備集羣,它只是工作得很好:)

相關問題