Я пытаюсь запустить следующую команду
hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar -files s3://foobar/hadoop-samples/wordSplitter.py -input s3://foobar/hadoop-samples/input -output s3://foobar/wordcount/output/ -mapper wordSplitter.py -reducer aggregate -verbose
Но Hadoop не может найти файл wordSplitter.py
.Я получаю следующую ошибку:
Caused by: java.io.IOException: Cannot run program "/mnt/yarn/usercache/hadoop/appcache/application_1116934618409_1114/container_1116934618409_1114_01_000018/./wordSplitter.py": error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at org.apache.hadoop.streaming.PipeMapRed.configure(PipeMapRed.java:208)
... 23 more
Я попытался изменить команду действия, чтобы добавить полный путь к файлу wordSplitter.py
в S3, нравится это
hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar -files s3://foobar/hadoop-samples/wordSplitter.py -input s3://foobar/hadoop-samples/input -output s3://foobar/wordcount/output/ -mapper s3://foobar/hadoop-samples/wordSplitter.py -reducer aggregate -verbose
Но я получил ту же ошибку:
Caused by: java.io.IOException: Cannot run program "s3://foobar/hadoop-samples/wordSplitter.py": error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at org.apache.hadoop.streaming.PipeMapRed.configure(PipeMapRed.java:208)
... 23 more
Эта команда действия сработала, когда я использовал общедоступное расположение AWS для wordSplitter.py
следующим образом
hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar -files s3://elasticmapreduce/samples/wordcount/wordSplitter.py -input s3://elasticmapreduce/samples/wordcount/input -output s3://foobar/wordcount/output/ -mapper wordSplitter.py -reducer aggregate -verbose
Но я не могу продолжать использовать общедоступное местоположение AWS s3://elasticmapreduce/samples/wordcount/wordSplitter.py
Мне нужно сейчас получить файл из моего личного хранилища и по какой-то причине он не может получить файл из моего личного хранилища.
ОБНОВЛЕНИЕ:
Я нашел на этом форуме разработчиков AWS , и я действительно сохранил скрипт python на моем компьютере с Windows перед загрузкой его на S3, но я удалил файл и скопировал его израсположение источника в моей корзине S3 напрямую для решения проблемы, упомянутой на форуме, с помощью следующей команды aws s3 cp s3://elasticmapreduce/samples/wordcount/wordSplitter.py s3://foobar/hadoop-samples/wordSplitter.py
, но это не решило проблему, которую я вижу.Я все еще получаю ту же ошибку.(Обратите внимание, я выполнил команду aws s3 cp
из своего кластера EMR (я ssh в поле и выполнил команду)).
ОБНОВЛЕНИЕ 2:
EMR Cluster может найти файл wordSplitter.py
с помощью команды hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar -files s3://foobar/hadoop-samples/wordSplitter.py -input s3://foobar/hadoop-samples/input -output s3://foobar/wordcount/output/ -mapper wordSplitter.py -reducer aggregate -verbose
, когда я удаляю свои настройки SecurityConfiguration из кластера EMR.Мне нужно сохранить мои настройки SecurityConfiguration , хотя я не уверен, что мне нужно сделать с моей корзиной S3, чтобы кластер EMR мог получить доступ к файлу для использования в качестве преобразователя.