2017-03-27 6 views
1

mapreduce로 매우 간단한 작업을 실행하려고합니다.hadoop, python, 코드 127로 서브 프로세스가 실패했습니다.

mapper.py :

#!/usr/bin/env python 
import sys 
for line in sys.stdin: 
    print line 

내 txt 파일 :

hadoop jar /usr/lib/hadoop-0.20-mapreduce/contrib/streaming/hadoop-streaming-2.6.0-mr1-cdh5.8.0.jar \ 
-input /user/cloudera/In/test.txt \ 
-output /user/cloudera/test \ 
-mapper /home/cloudera/Documents/map.py \ 
-file /home/cloudera/Documents/map.py 

오류 :

INFO mapreduce.Job: Task Id : attempt_1490617885665_0008_m_000001_0, Status : FAILED 
Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 127 
    at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:325) 
    at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:538) 
    at org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:130) 
    at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:61) 
    at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:34) 
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453) 
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343) 
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:415) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1693) 
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158) 
,536,913 작업을 실행하는

qwerty 
asdfgh 
zxc 

명령 줄

이 문제를 해결하고 코드를 실행하는 방법은 무엇입니까? 내가 cat /home/cloudera/Documents/test.txt | python /home/cloudera/Documents/map.py를 사용하는 경우 그것은

잘 작동 !!!!! 내 * 평 파일 문제

뭔가를 업데이트합니다. 나는 github 'tom white hadoop book'에서 파일을 복사했으며 모든 것이 잘 작동한다.

그러나 나는 이유가 무엇인지 이해할 수 없다. 사용 권한 및 문자 세트 (잘못된 것이 아니라면)가 아닙니다. 그 밖의 무엇을 할 수 있는가?

답변

0

-mapper 인수에서 클러스터 노드에서 실행하려면 명령을 설정해야합니다. 따라서 /home/cloudera/Documents/map.py 파일이 없습니다. 당신이 -files 옵션을 통과 파일은 단순히 이런 식으로 사용할 수 있도록, 작업 디렉토리에 배치되지 않은 : ./map.py

내가 권한이 파일에 설정을 기억하지 않으므로이있는 경우에는 권한을 사용 실행 그것은 python map.py

그래서 전체 명령은

hadoop jar /usr/lib/hadoop-0.20-mapreduce/contrib/streaming/hadoop-streaming-2.6.0-mr1-cdh5.8.0.jar \ 
-input /user/cloudera/In/test.txt \ 
-output /user/cloudera/test \ 
-mapper "python map.py" \ 
-file /home/cloudera/Documents/map.py 
그대로