медленный s3Distcp при копировании с s3 на hdfs

Я использую s3disctcp для копирования 31 16 886 файлов (300 ГБ) с S3 в HDFS, и мне потребовалось 4 дня, чтобы просто скопировать 10 48 576 файлов. Я убил задание, и мне нужно понять, как я могу сократить это время или что я делаю неправильный.

s3-dist-cp --src s3://xml-prod/ --dest hdfs:///Output/XML/

Это на машине AWS EMR.


person Priyanka O    schedule 27.02.2017    source источник
comment
Ну, я использовал более крупный экземпляр EMR, m4.4xlarge. S3 и EMR находились в одном регионе.   -  person Priyanka O    schedule 27.02.2017
comment
у меня было то же наблюдение, что и в этом посте здесь -›stackoverflow.com/questions/38462480/   -  person Priyanka O    schedule 27.02.2017


Ответы (2)


Проблема в HDFS и ее низкой производительности при работе с большим количеством маленьких файлов. Рассмотрите возможность объединения файлов перед помещением их в HDFS. groupby вариант команды s3distcp предоставляет один из способов сделать это.

person Denis    schedule 28.02.2017
comment
Спасибо за ответ Денис. Я не уверен, что объединение этих файлов будет хорошей идеей, поскольку мне нужно использовать эти отдельные файлы через приложение Spark, которое будет выбирать необходимые столбцы из каждого из этих отдельных XML-файлов и сохранять их в формате паркета. Может быть, если у вас есть какие-то другие идеи, это тоже было бы хорошо. Каждый отдельный файл похож на строку/запись. Спасибо - person Priyanka O; 28.02.2017
comment
Похоже, что способ хранения данных в корзинах S3 может потребовать переосмысления. Например, поскольку с файлом можно обращаться как с записью, почему бы не сгруппировать все 3 миллиона файлов в значительно меньшее количество файлов? Здесь JSON может работать достаточно хорошо, см., например. stackoverflow.com/questions/16906010/ - person Denis; 01.03.2017
comment
Привет, Денис, это действительно большие файлы XML, и мне нужно только подмножество данных. подход, который вы предложили, интересен, но дело в том, что мне все еще нужно загрузить файлы локально в EC2 или EMR, чтобы продолжить работу над ним. Команда AWS CLI ненадежна, так как иногда некоторые файлы не загружаются, и вам нужно запустить отдельный скрипт bash, чтобы получить эти отсутствующие файлы. Сейчас я изучаю установку S3, чтобы убедиться, что это простой и быстрый подход. - person Priyanka O; 03.03.2017

Почему бы не сделать весь процесс частью единого конвейера приложений? Таким образом, вам не нужно хранить множество небольших промежуточных файлов в HDFS.

S3 File Reader --> Анализатор XML --> Выбрать обязательные поля --> Parquet Writer (один файл с политикой ротации)

person ashwin111    schedule 10.03.2017