2013-12-22 2 views
2

나는 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을 실행하고 있습니다.

제발 누군가에게 설명해 주시겠습니까? 왜이 문제가 해결되지 않고 어떻게 해결할 수 있습니까?

+0

'-D mapred.reduce.tasks = 0'옵션을 사용하지 않으면 다시 시도 할 수 없습니다. – zhutoulala

답변

1

방금 ​​비슷한 (간단한) 문제에서이 오류가 발생했습니다. 나를 위해, 오류는 실행 중에 python 스크립트가 죽어서 발생했습니다. 귀하의 문제와 마찬가지로, 제 스크립트는 문제의 작은 부분에 대해서는 잘 작동하는 것처럼 보였지만 전체 데이터 세트에 대해서는 Hadoop에서 작동하지 않을 수 있습니다. 이는 입력 오류로 인한 것입니다. 그래서 스크립트가 죽어가는 것은 아니지만 아마 약간의 온 전성 검사를 추가해야합니다.


길이가 부분 인인지 확인하십시오.

부분이 인 지 확인하십시오.

또한 작업 추적자로 이동하여 Hadoop의 실행을 중지시킨 정확한 오류를 볼 수 있습니다. 이것은 여러분이 기대할 수있는 파이썬 스택 트레이스를 제공하지는 않지만 여전히 도움이됩니다. 작업 추적기는 일반적으로 또한, 기계 스크립트가 그것으로 무엇을 해야할지하지 않습니다 실행 때문이었다

#!/usr/bin/env


#!/usr/bin/python


에 변경

http:// localhost : 50030/jobtracker.jsp

에서 찾을 수 있습니다. 당신이 나에 대해 정의되지 않았습니다하지만 /usr/lib/hadoop에 있었어야하는 당신의 $HADOOP_HOME에 있어야 python firstLetterMapper.py

0

hadoop-streaming-x.y.z.jar 대신 ./firstLetterMapper.py 그것을 실행 한 경우 그것은 아마뿐만 아니라 당신의 컴퓨터가 정지하게됩니다.

나는 Hadoop Streaming doc이 파이썬 예제에 대한 당신의 문제에 상당히 도움이된다고 생각합니다.

먼저 매퍼 노드에는 작성한 파이썬 파일의 사본이 필요하므로 명령 행에 file 옵션이있는 목록을 나열하십시오.
둘째, 감속기를 사용하지 않는 경우 감속기를 정의 할 필요가 없습니다.

$ hadoop jar /hadoop/hadoop-streaming-1.2.1.jar \ 
    -D mapred.reduce.tasks=0 \ 
    -input /stock -output /company_index \ 
    -mapper firstLetterMapper.py \ 
    -file /home/msknapp/workspace/stock/stock.mr/scripts/firstLetterMapper.py 

셋째 단지 파일에 env을 실행하는 것입니다 귀하의 shabang, 당신은 아마 무슨 일이 실행 0이 아닌 종료 값 때문에 당신의 매퍼를 제공하기 위해 env을 일으키는 것 그 #!/usr/bin/python 또는 #!/usr/bin/env python

로 변경해야 ~ 30 초 동안 시도 2로 재 시도하고 약 10 분 후

관련 문제