Получение данных в и из Elastic MapReduce HDFS - PullRequest
3 голосов
/ 09 октября 2011

Я написал программу Hadoop, которая требует определенной компоновки в HDFS, а затем мне нужно получить файлы из HDFS.Он работает на моей установке Hadoop с одним узлом, и мне не терпится заставить его работать с 10-ю узлами в Elastic MapReduce.

То, что я делал, выглядит примерно так:

./elastic-mapreduce --create --alive
JOBID="j-XXX" # output from creation
./elastic-mapreduce -j $JOBID --ssh "hadoop fs -cp s3://bucket-id/XXX /XXX"
./elastic-mapreduce -j $JOBID --jar s3://bucket-id/jars/hdeploy.jar --main-class com.ranjan.HadoopMain --arg /XXX

Это асинхронно, но когда работа завершена, я могу сделать это

./elastic-mapreduce -j $JOBID --ssh "hadoop fs -cp /XXX s3://bucket-id/XXX-output"
./elastic-mapreduce -j $JOBID --terminate

Так что пока этот своего рода работает, но он неуклюжий и не тот, который я хотел бы.Есть ли более чистый способ сделать это?

Спасибо!

Ответы [ 2 ]

9 голосов
/ 12 октября 2011

Вы можете использовать distcp, который будет копировать файлы в качестве задания mapreduce

# download from s3
$ hadoop distcp s3://bucket/path/on/s3/ /target/path/on/hdfs/
# upload to s3
$ hadoop distcp /source/path/on/hdfs/ s3://bucket/path/on/s3/

Это позволяет использовать весь кластер для параллельного копирования с s3.

(примечание:завершающие косые черты в каждом пути важны для копирования из каталога в каталог)

0 голосов
/ 16 апреля 2014

@ mat-kelcey, ожидает ли команда distcp, что файлы в S3 имеют минимальный уровень разрешений? По какой-то причине я должен установить уровни разрешений файлов "Открыть / Загрузить" и "Просмотр разрешений" для "Все", чтобы файлы были доступны из начальной загрузки или скриптов шага.

...