Есть ли способ получить информативные ошибки из сценариев Python в потоковой передаче Hadoop?

Я использую Python с потоковой передачей Hadoop. Несмотря на тщательное модульное тестирование, ошибки неизбежно появляются. Когда они случаются, это сообщение об ошибке — это все, что выдает Hadoop:

java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1
    at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:362)
    at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:576)
...

Сообщение очень бесполезно для отладки.

Есть ли способ получить информативные ошибки из скриптов Python в потоковой передаче Hadoop?


person Abe    schedule 03.09.2012    source источник
comment
Вы нашли решение ?   -  person pratiklodha    schedule 22.06.2016


Ответы (1)


если у вас есть доступ к средству отслеживания заданий для кластера, в котором вы работаете, вы можете получить доступ к stderr/stdout сценария, найдя задание и выполнив поиск невыполненных задач.

person Paul M    schedule 03.09.2012
comment
Где именно мне смотреть? Я запускаю свой собственный кластер на EC2, но либо он не сообщает stderr/stdout, либо я ищу не в том месте. - person Abe; 04.09.2012
comment
Знаете ли вы IP-адрес и/или имя хоста узла, на котором вы используете средство отслеживания заданий для своего кластера? Обычно вы можете просто получить к нему доступ через браузер на порту 50030, хотя брандмауэры иногда блокируют этот порт. Другой вариант: если вы знаете узел, на котором данная задача не удалась, вы можете подключиться к этому узлу по sssh и просмотреть журналы своих заданий. Точный каталог будет зависеть от того, какой пакет Hadoop вы используете. - person Paul M; 04.09.2012
comment
Я могу войти в систему отслеживания вакансий через порт: 50030. Я вижу страницу администрирования, страницы вакансий и даже страницы задач, но журналы не загружаются. - person Abe; 04.09.2012
comment
Возможно проблема в брандмауэре. Вы можете получить доступ к журналам через ssh, войдя в узел, на котором выполнялись неудачные задачи. Расположение зависит от вашей ОС и используемого вами дистрибутива, но вы можете проверить /var/logs/hadoop или что-то в этом роде. В противном случае, если у вас есть администратор, вы можете поговорить с ним. Другая вещь, которую вы можете сделать, если вы можете воссоздать, - это просто запустить сценарии Python, такие как канал unix, над образцом ввода. Обычно это выглядит примерно так: «кошачий ввод | python mapper.py | сортировать | Редуктор Python.py'. Это поможет вам выявить ошибки на уровне приложения, но не проблемы с вашим кластером. - person Paul M; 04.09.2012