2011-04-22 7 views
0

님이 hadoop에서 알고리즘을 구현하려고합니다. 은 내가 하둡의 코드의 일부를 실행하려고하지만, 작업을 스트리밍 내가 있는지 잘 모릅니다hadoop에서 스트리밍 작업이 실패했습니다.

#!/usr/bin/env python 
import sys 
import itertools 
for line in sys.stdin: 
    input_key, input_value=line.split(' ',1) 
    input_key = input_key.strip() 
    input_value = input_value.strip() 
    input_key = int(input_key) 
    input_value = float(input_value) 
    print str(input_key)+' '+str(input_value) 

$ /home/hadoop/hadoop/bin/hadoop jar contrib/streaming/hadoop-*-streaming.jar -file /home/hadoop/hadoop/PR/mapper.py -mapper mapper.py -file /home/hadoop/hadoop/PR/reducer.py -reducer reducer.py -input pagerank/* -output PRoutput6 

packageJobJar: [/home/hadoop/hadoop/PR/mapper.py, /home/hadoop/hadoop/PR/reducer.py, /home/hadoop/hadoop/tmp/dir/hadoop-hadoop/hadoop-unjar7101759175212283428/] [] /tmp/streamjob6286075675343269479.jar tmpDir=null 

11/04/23 01:03:24 INFO mapred.FileInputFormat: Total input paths to process : 1 

11/04/23 01:03:24 INFO streaming.StreamJob: getLocalDirs(): [/home/hadoop/hadoop/tmp/dir/hadoop-hadoop/mapred/local] 

11/04/23 01:03:24 INFO streaming.StreamJob: Running job: job_201104222325_0021 

11/04/23 01:03:24 INFO streaming.StreamJob: To kill this job, run: 

11/04/23 01:03:24 INFO streaming.StreamJob: /home/hadoop/hadoop/bin/../bin/hadoop job -Dmapred.job.tracker=localhost:54311 -kill job_201104222325_0021 

11/04/23 01:03:24 INFO streaming.StreamJob: Tracking URL: http://localhost:50030/jobdetails.jsp?jobid=job_201104222325_0021 

11/04/23 01:03:25 INFO streaming.StreamJob: map 0% reduce 0% 

11/04/23 01:03:31 INFO streaming.StreamJob: map 50% reduce 0% 

11/04/23 01:03:41 INFO streaming.StreamJob: map 50% reduce 17% 

11/04/23 01:03:56 INFO streaming.StreamJob: map 100% reduce 100% 

11/04/23 01:03:56 INFO streaming.StreamJob: To kill this job, run: 

11/04/23 01:03:56 INFO streaming.StreamJob: /home/hadoop/hadoop/bin/../bin/hadoop job -Dmapred.job.tracker=localhost:54311 -kill job_201104222325_0021 

11/04/23 01:03:56 INFO streaming.StreamJob: Tracking URL: http://localhost:50030/jobdetails.jsp?jobid=job_201104222325_0021 

11/04/23 01:03:56 ERROR streaming.StreamJob: Job not Successful! 

11/04/23 01:03:56 INFO streaming.StreamJob: killJob... 

Streaming Job Failed! 

mapper.py

#!/usr/bin/env python 
import sys 
import itertools 

def ipsum(input_key,input_value_list): 
    return sum(input_value_list) 

n= 20 # works up to about 1000000 pages 
i = {} 
for j in xrange(n): i[j] = [1.0/n,0,[]] 
j=0 
u=0 
for line in sys.stdin: 
    if j<n: 
    i[j][1]=int(line) 
    j=j+1 

    if j > n: 
    if line != "-1\n": 
     i[u][2] = line.split(',') 
    else: 
     i[u][2]=[] 
    u=u+1 
for j in xrange(n): 
    if i[j][1] != 0: 
    i[j][2] = map(int,i[j][2])  

intermediate=[] 
for (input_key,input_value) in i.items(): 
    if input_value[1] == 0: intermediate.extend([(1,input_value[0])]) 
    else: intermediate.extend([]) 
grp = {} 
for key, group in itertools.groupby(sorted(intermediate),lambda x: x[0]): 
    grp[key] = list([y for x, y in group]) 
iplist = [ipsum(intermediate_key,grp[intermediate_key]) for intermediate_key in grp] 
inter=[] 
for (input_key,input_value) in i.items(): 
    if input_value[1] == 0: inter.extend([(input_key,0.0)]+[(outlink,input_value[0]/input_value[1]) for outlink in input_value[2]]) 
    else: inter.extend([]) 

for value in inter: 
    value1 = value[0] 
    value2 = value[1] 
    print '%s %s' % (value1,value2) 

reducer.py 실패 오류는 내 코드 또는 hadoop 구성에 ...를 사용하여 코드를 실행할 수 있었기 때문에$ cat /home/hadoop/hadoop/PR/pagerank/input.txt | python /home/hadoop/hadoop/PR/mapper.py | 정렬 | python /home/hadoop/hadoop/PR/reducer.py

도움을 주시면 감사하겠습니다. 감사합니다.

답변

0

내 생각 엔 데이터가 열쇠 일 수 있습니다. 문자열 또는 유사한 문제로 플로트를 전송하면 로컬 테스트 데이터에 나타나지 않는 실제 데이터가 벙벙 할 수 있습니다. 아마도 예외 처리 또는 어설 션으로 해결할 수 있습니다.

0

작업 정보 페이지 url을 출력에서 ​​확인하십시오. 귀하의 경우, 로컬 호스트 : 50030/jobdetails.jsp 작업 ID = job_201104222325_0021은 "실패 매퍼"열의 수와 "마지막 8킬로바이트"(또는 무엇이든) 링크를 기록하고 볼에

클릭 (대부분의 가능성이) 당신이 타격중인 파이썬 예외.

관련 문제