Копирование s3distcp из S3 в реплику данных HDFS EMR всегда на одном узле - PullRequest
0 голосов
/ 19 мая 2018

Я использую s3distcp, чтобы скопировать набор данных 500 ГБ в мой кластер EMR.Это большой кластер r4.4x с 12 узлами, каждый с диском 750 ГБ.Он использует метку релиза EMR emr-5.13.0, и я добавляю Hadoop: Amazon 2.8.3, Ganglia: 3.7.2 и Spark 2.3.0.Я использую следующую команду для копирования данных в кластер:

s3-dist-cp --src=s3://bucket/prefix/ --dest=hdfs:///local/path/ --groupBy=.*(part_).* --targetSize=128 --outputCodec=none

Когда я смотрю на использование диска в Ganglia или в пользовательском интерфейсе namenode (порт 50070 в кластере EMR), я вижучто у одного узла большая часть его заполнена диском, а у других используется аналогичный процент.При просмотре большого количества файлов (~ 50) я вижу, что копия файла всегда появляется на полном узле.

Я использую Spark для преобразования этих данных, записи в HDFS и затем копируювернуться к S3.У меня проблемы с этим набором данных, так как мои задачи убивают.Я не уверен, что это является причиной проблемы.Мне не нужно ни копировать данные локально, ни распаковывать их.Первоначально я думал, что кодек BZIP2 не может быть разделен, и распаковка поможет получить параллелизм в моих заданиях Spark, но я ошибся, он является разделимым.Я также обнаружил команду hdfs balancer, которую я использую, чтобы перераспределить реплики и посмотреть, решает ли это мои проблемы с Spark.

Однако теперь я увидел то, что я считаю странным поведением, которое я хотел быпонять, нормально ли это для s3distcp / HDFS, чтобы всегда создавать реплику файлов на одном узле?

1 Ответ

0 голосов
/ 19 мая 2018

s3distcp - закрытый источник;Я не могу подробно комментировать его внутренности.

Когда HDFS создает реплики данных, она пытается сохранить один блок на локальном компьютере, а затем еще 2 в другом месте (при условии репликации == 3).Какой бы хост ни выполнял рабочие процессы distcp, в конечном итоге будет получена копия всего файла.Поэтому, если для копии используется только один хост, он заполняется.

FWIW, я не думаю, что вам нужно делать это distcp, если вы не можете выполнять чтение и фильтрацию данных сразу с S3, сохраняя этот результат в hdfs.Ваши искровые работники будут выполнять фильтрацию и записывать свои блоки обратно на машины, на которых работают эти работники и другие узлы в цепочке.А для недолговечных кластеров вы также можете попытаться снизить коэффициент репликации hdfs (2?), Чтобы сэкономить на данных HDFS по всему кластеру, за счет того, что у искры есть на одно место меньше для планирования работы рядом с данными

...