Программа Python с sys.stdin выдает ошибку — Hadoop Streaming

Я пытаюсь изучить потоковую передачу Hadoop. Я только что написал трехстрочную программу на Python, чтобы проверить, все ли работает нормально, но застрял.

Код :

#!/usr/bin/env python

import sys

for line in sys.stdin:
    print "Inside Loop"

Команда, которую я использовал для выполнения:

hadoop jar /usr/local/hadoop/share/hadoop/tools/lib/hadoop-streaming-2.5.1.jar  -file './test.py'  -mapper './test.py' -input ./sample.txt -output ./outfile

Ошибка, которую я получаю:

Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 127
        at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:320)
        at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:533)
        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:450)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
        at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:168)
        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:1614)
        at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:163)

15/01/25 17:09:55 INFO mapreduce.Job: Task Id : attempt_1418762215449_0069_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:320)
        at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:533)
        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:450)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
        at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:168)
        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:1614)
        at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:163)

Я просто хочу проверить, могу ли я прочитать файл, хранящийся в hdfs. Я просто использую картограф, чтобы проверить это.

Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно здесь?


person Community    schedule 25.01.2015    source источник


Ответы (2)


Это проблема безопасности: обратите внимание на сообщение о UserGroupInformation

  at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1614)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:163)

Это вряд ли будет простым решением для новичка (у меня несколько лет работы с hadoop, и мне не особенно нравится устранять проблемы с разрешениями/ACL). Я рекомендую вам работать с кем-то, кто настраивал кластеры в прошлом.

person WestCoastProjects    schedule 28.01.2015
comment
Вероятно, это красная селедка. Ошибка, скорее всего, связана с ошибкой процесса сопоставления, см. мой ответ. - person kynan; 31.12.2015

Когда я получил эту ошибку, это было связано с окончанием строки CRLF вместо LF.

Вы можете это проверить.

Я нашел ответ здесь.

person dstandish    schedule 31.03.2016