나는 hadoop 스트리밍을 사용하는 방법을 배우려고합니다. 나는 아주 단순한 매퍼 (mapper)와 감속기 (reducers)를 사용하지 않고있다. 프로그램을 실행할 때지도 작업의 100 %를 완료 한 다음 10 분 동안 아무 작업도하지 않고 모든지도 작업의 0 %를 완료했다고보고합니다. 나는 그것이 노드 매니저가 일을 죽여야한다는 것을 의미한다고 생각한다. 나는 과거 30 분을 기다렸는데 결코 끝나지 않습니다.Hadoop Streaming Never Finishes
hadoop 1.2.1을 사용하고 있습니다. 설명서에 hadoop 스트리밍 항아리가 포함되어 있지만, 찾을 수 없으므로, hadoop-streaming-1.2.1을 중앙 메이븐 저장소에서 다운로드했습니다. 다음은 명령 행입니다 :
[[email protected] data]$ hadoop jar /hadoop/hadoop-streaming-1.2.1.jar -D mapred.reduce.tasks=0 -input /stock -output /company_index -mapper /home/msknapp/workspace/stock/stock.mr/scripts/firstLetterMapper.py -reducer org.apache.hadoop.mapred.lib.IdentityReducer
packageJobJar: [] [/opt/hadoop-1.2.1/hadoop-streaming-1.2.1.jar] /tmp/streamjob7222367580107633928.jar tmpDir=null
13/12/22 07:04:14 WARN snappy.LoadSnappy: Snappy native library is available
13/12/22 07:04:14 INFO util.NativeCodeLoader: Loaded the native-hadoop library
13/12/22 07:04:14 INFO snappy.LoadSnappy: Snappy native library loaded
13/12/22 07:04:14 INFO mapred.FileInputFormat: Total input paths to process : 1
13/12/22 07:04:17 INFO streaming.StreamJob: getLocalDirs(): [/tmp/hadoop-msknapp/mapred/local]
13/12/22 07:04:17 INFO streaming.StreamJob: Running job: job_201312201826_0009
13/12/22 07:04:17 INFO streaming.StreamJob: To kill this job, run:
13/12/22 07:04:17 INFO streaming.StreamJob: UNDEF/bin/hadoop job -Dmapred.job.tracker=localhost:9001 -kill job_201312201826_0009
13/12/22 07:04:17 INFO streaming.StreamJob: Tracking URL: http://localhost:50030/jobdetails.jsp?jobid=job_201312201826_0009
13/12/22 07:04:18 INFO streaming.StreamJob: map 0% reduce 0%
13/12/22 07:04:44 INFO streaming.StreamJob: map 100% reduce 0%
13/12/22 07:14:44 INFO streaming.StreamJob: map 0% reduce 0%
13/12/22 07:15:09 INFO streaming.StreamJob: map 100% reduce 0%
제가 말하는 파이썬 스크립트는 매우 간단합니다. Python 2.6.6이 설치되어 있습니다. 이 스크립트는 내가 그것을 테스트 할 때 작동합니다
#!/usr/bin/env
import sys
import string
#import os
def map(instream=sys.stdin,outstream=sys.stdout):
line = instream.readline()
output=map_line(line)
outstream.write(output)
def map_line(line):
parts=string.split(line,"\t")
key=parts[0]
newkey=key[0]
newvalue=key
output=newkey+"\t"+newvalue
return output
map()
입력 파일이 아니라 짧고 간단하다, 그것은 탭 "GE \ tGeneral 전기"와 같은 라인을 구분하고 있으며, 나는 그들이 탭 확신합니다.
BTW VMWare 가상 머신의 CentOS 1.6에서 가상 분산 모드로 hadoop 1.2.1을 실행하고 있습니다.
제발 누군가에게 설명해 주시겠습니까? 왜이 문제가 해결되지 않고 어떻게 해결할 수 있습니까?
'-D mapred.reduce.tasks = 0'옵션을 사용하지 않으면 다시 시도 할 수 없습니다. – zhutoulala