AWS EMR не может найти файл Mapper из S3 Bucket - такого файла или каталога нет - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь запустить следующую команду

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 мог получить доступ к файлу для использования в качестве преобразователя.

...