Ошибка «Файл не найден» иногда не означает «Файл не найден», а означает «Невозможно выполнить этот сценарий».
Зная это, я решил такие проблемы, как, когда вы сталкиваетесь с проблемами (без Java) при потоковой передаче, я предлагаю вам следовать этому контрольному списку:
- Сценарии запускаются? Не начинайте - пользуйтесь переводчиком, т.е.
python myScript.py
сделать его исполняемым при запуске как ./myScript.py
так потоковая передача будет вызывать ваш скрипт.
- используйте
-verbose
, чтобы увидеть, что входит в банку, которая будет развернута в контейнере, иногда эта помощь.
- Внутри контейнеров находятся символические ссылки, а не реальные файлы.
- Файлы, которые перемещаются с помощью
-file
, не находятся в папках. -mapper folder/script.py
или -reducer folder/script.py
рассматриваются как script.py
- Контейнеры и все, что находится внутри них, удаляются после завершения задания, если вы хотите увидеть, что происходит в контейнере, переместите его в HDFS, IE: замените маппер или редуктор сценарием .sh, который выполняет работу. 1021 *
Этот контрольный список мне очень помог, надеюсь, он может пригодиться и вам.
Здесь следует классический журнал с неоднозначным сообщением об ошибке.
Это правда, программа не запускается.
Caused by: java.io.IOException: Cannot run program "/hadoop/yarn/local/usercache/root/appcache/application_1475243242823_0007/container_1475243242823_0007_01_000004/./reducer.py":
error=2, No such file or directory
Это причина лжи.
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1047)
at org.apache.hadoop.streaming.PipeMapRed.configure(PipeMapRed.java:209)
... 15 more
Читать это:
Caused by: java.io.IOException: error=2, No such file or directory
Это ложь, файл существует, если -verbose показывает его в списке упаковки.
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:187)
at java.lang.ProcessImpl.start(ProcessImpl.java:130)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1028)