Я использую 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, чтобы всегда создавать реплику файлов на одном узле?