2012-06-03 2 views
1

단일 노드에서 hadoop 1.0.1을 사용하고 있으며 Python 2.7을 사용하여 탭으로 구분 된 파일을 스트리밍하려고합니다. Michael Noll의 단어 카운트 스크립트를 hadoop/python을 사용하여 실행할 수는 있지만 매우 단순한 매퍼 (mapper)와 감속기 (reducer)를 사용하여 파일을 복제하는 것은 불가능합니다. 여기지도/축소 작업 중 하둡 스트리밍 오류가 발생합니다.

import sys 

for line in sys.stdin: 
    line = line.strip() 
    print '%s' % line 

감속기 것 :

1 857774.000000 
2 859164.000000 
3 859350.000000 
... 

리눅스에서 맵퍼 및 감속기 잘 작동 :

cat input.txt | python mapper.py | sort | python reducer.py > a.out 

import sys 

for line in sys.stdin: 
    line = line.strip() 
    print line 

여기에 입력 파일의 일부 여기 매퍼입니다

하지만 I chmod 이후에 apper 및 감속기, HDFS에 입력 파일을 이동하고 있다는 걸 확인하고 실행

12/06/03 10:19:11 INFO streaming.StreamJob: map 0% reduce 0% 
12/06/03 10:20:15 ERROR streaming.StreamJob: Job not successful. Error: # of failed Map Tasks exceeded allowed limit. FailedCount: 1. LastFailedTask: task_201206030550_0003_m_000001 
12/06/03 10:20:15 INFO streaming.StreamJob: killJob... 
Streaming Job Failed! 

모든 아이디어 : 나는 다음과 같은 오류가

bin/hadoop jar contrib/streaming/hadoop-*streaming*.jar -file mapperSimple.py -mapper mapperSimple.py -file reducerSimple.py -reducer reducerSimple.py -input inputDir/* -output outputDir 

를? 감사.

답변

3

파이썬 파일에 shebang/hashbang 헤더가 있습니까? 귀하의 문제는 Java가 매퍼 (mapper) 파이썬 파일을 실행할 때 os가 파일을 실행하도록 요청하고 shebang/hashbang 표기법이 없으면 파일을 실행하는 방법을 알지 못한다는 것입니다.

cat input.txt | ./mapper.py | sort | ./reducer.py > a.out 
+0

감사합니다. Chris. 내 두뇌는 항상 주석 기호가있는 행을 무시하므로 결국 20 시간을 소비하여 코드를 자르고 생각할 수있는 모든 변형을 시도합니다. 매우 감사. – user1106278

0

에서 :

#!/usr/bin/python 
import sys 

for line in sys.stdin: 
    line = line.strip() 
    print '%s' % line 

쉘은 파이썬 인터프리터로 파일을 실행 알고 확인하기 위해 명령 줄에서이 시도 : 나는 또한 파일이 실행 권한 (chmod a+x mapperSimple.py)으로 표시되도록 것 Chris White Answer에 덧붙여서, shebang 헤더는 다음과 같아야합니다.

#!/usr/bin/env python 

기본적으로 python2.7을 사용합니다.

#!/usr/bin/env python3 

를 사용하지 마십시오 : 당신은 python3을 사용하려는 경우, 당신이 사용할 수있는

#!/usr/bin/python 

는 대부분의 컴퓨터에 실패하기 때문에 .. 내 포함 **** 한숨 ****

자세한 내용은 Answer을 확인하십시오.

관련 문제