AWS Задание Glue Spark не масштабируется при разделении DataFrame - PullRequest
0 голосов
/ 08 мая 2020

Я разрабатываю сценарий задания Glue Spark с использованием конечной точки разработки Glue, для которой выделено 4 DPU. Согласно документации Glue 1 DPU соответствует 2 исполнителям, и каждый исполнитель может запускать 4 задачи. 1 DPU зарезервирован для ведущего, а 1 исполнитель - для драйвера. Теперь, когда моя конечная точка разработки имеет 4 DPU, я ожидаю, что будет 5 исполнителей и 20 задач.

Скрипт, который я разрабатываю, загружает 1 миллион строк с использованием соединения JDB C. Затем я объединяю раздел из миллиона строк в 5 разделов и записываю его в корзину S3, используя параметр maxRecordsPerFile = 100000. Весь процесс занимает 34 секунды. Затем я меняю количество разделов на 10, и задание снова выполняется в течение 34 секунд. Итак, если у меня есть 20 задач, почему скрипту требуется столько же времени для завершения с большим количеством разделов?

Изменить: я начал выполнять скрипт с фактическим заданием, а не с конечной точкой разработки. Я установил количество рабочих на 10 и тип рабочего на стандартный. Глядя на показатели, я вижу, что у меня всего 9 исполнителей вместо 17, и только 1 исполнитель что-то делает, а остальные бездействуют.

Код:

...

df = spark.read.format("jdbc").option("driver", job_config["jdbcDriver"]).option("url", jdbc_config["url"]).option(
    "user", jdbc_config["user"]).option("password", jdbc_config["password"]).option("dbtable", query).option("fetchSize", 50000).load()

df.coalesce(17)

df.write.mode("overwrite").format("csv").option(
    "compression", "gzip").option("maxRecordsPerFile", 1000000).save(job_config["s3Path"])

...

1 Ответ

1 голос
/ 08 мая 2020

Это, скорее всего, ограничение открываемых подключений к вашему источнику данных jdb c, слишком мало подключений снижает параллелизм, слишком сильно может обременить вашу базу данных. Увеличьте степень параллелизма, настроив параметры здесь .

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

Чтобы размер ваши DPU правильно, я бы предложил связать spark-ui , это могло бы помочь сузить, где все время тратится, и фактическое распределение вашего задачи при просмотре DAG.

...