Как скопировать файлы из S3 в Amazon EMR HDFS? - PullRequest
26 голосов
/ 20 сентября 2011

Я запускаю куст поверх EMR, и мне нужно скопировать некоторые файлы во все экземпляры EMR.

Один из способов, который я понимаю, это просто копировать файлы в локальную файловую систему на каждом узле, другой - копировать файлы в HDFS, однако я не нашел простого способа прямого копирования из S3 в HDFS..

Как лучше всего это сделать?

Ответы [ 3 ]

27 голосов
/ 23 сентября 2011

лучший способ сделать это - использовать команду distcp Hadoop.Пример (на одном из узлов кластера):

% ${HADOOP_HOME}/bin/hadoop distcp s3n://mybucket/myfile /root/myfile

Это скопирует файл с именем myfile из корзины S3 с именем mybucket в /root/myfile в HDFS.Обратите внимание, что в этом примере предполагается, что вы используете файловую систему S3 в «родном» режиме;это означает, что Hadoop видит каждый объект в S3 как файл.Если вместо этого вы используете S3 в режиме блокировки, вы должны заменить s3n на s3 в примере выше.Для получения дополнительной информации о различиях между собственным S3 и блочным режимом, а также подробности о приведенном выше примере см. http://wiki.apache.org/hadoop/AmazonS3.

Я обнаружил, что distcp - очень мощный инструмент.Помимо возможности использовать его для копирования большого количества файлов в S3 и из него, вы также можете выполнять быстрые копии от кластера к кластеру с большими наборами данных.Вместо передачи всех данных через один узел distcp использует несколько узлов параллельно для выполнения передачи.Это значительно ускоряет distcp при передаче больших объемов данных по сравнению с альтернативой копирования всего содержимого в локальную файловую систему в качестве посредника.

15 голосов
/ 17 декабря 2012

Теперь в Amazon есть оболочка, реализованная через distcp, а именно: s3distcp .

S3DistCp - это расширение DistCp, оптимизированное для работы сAmazon Web Services (AWS), в частности Amazon Simple Storage Service (Amazon S3).Вы используете S3DistCp, добавляя его в качестве шага в потоке работ.Используя S3DistCp, вы можете эффективно копировать большие объемы данных из Amazon S3 в HDFS, где они могут обрабатываться с помощью последующих шагов в потоке заданий Amazon Elastic MapReduce (Amazon EMR).Вы также можете использовать S3DistCp для копирования данных между корзинами Amazon S3 или из HDFS в Amazon S3

Пример Копирование файлов журнала из Amazon S3 в HDFS

Это следующееВ примере показано, как скопировать файлы журналов, хранящиеся в корзине Amazon S3, в HDFS.В этом примере опция --srcPattern используется для ограничения данных, копируемых в журналы демонов.

elastic-mapreduce --jobflow j-3GY8JC4179IOJ --jar \
s3://us-east-1.elasticmapreduce/libs/s3distcp/1.latest/s3distcp.jar \
--args '--src,s3://myawsbucket/logs/j-3GY8JC4179IOJ/node/,\
--dest,hdfs:///output,\
--srcPattern,.*daemons.*-hadoop-.*'
4 голосов
/ 07 февраля 2012

Обратите внимание, что согласно Amazon, на http://docs.amazonwebservices.com/ElasticMapReduce/latest/DeveloperGuide/FileSystemConfig.html "Amazon Elastic MapReduce - Конфигурация файловой системы", файловая система блока S3 устарела, а ее префикс URI теперь s3bfs: //, и они специально не рекомендуют использовать ее с тех пор " это может вызвать состояние гонки, которое может привести к сбою потока заданий ".

Согласно той же странице, HDFS теперь является «первоклассной» файловой системой под S3, хотя она эфемерна (исчезает, когда задания Hadoop заканчиваются).

...