Я разрабатываю сценарий задания 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"])
...