Подтвердить что ты не робот

Как скопировать файлы с S3 на Amazon EMR HDFS?

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

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

Каков наилучший способ сделать это?

4b9b3361

Ответ 1

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

% ${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 и из него, вы также можете выполнять быстрые копии кластера с кластерами с большими наборами данных. Вместо того, чтобы выталкивать все данные через один node, distcp использует несколько узлов параллельно для выполнения передачи. Это значительно ускоряет передачу distcp при передаче больших объемов данных по сравнению с альтернативой копирования всего в локальную файловую систему в качестве посредника.

Ответ 2

Теперь у 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-.*'

Ответ 3

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

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