У меня есть большое количество довольно сложных преобразований, которые я делаю в файлах источников данных CSV, от 500 000 до 2 миллионов строк. Я вижу через пользовательский интерфейс и htop, что спарк использует только 1 процессор, и он работает на 100%, поскольку создает DAG. Как только оно попадает в действие, все 48 ядер используются на 100% (как и ожидалось).
У меня проблема в том, что создание DAG занимает 10 секунд, а остальные 47 ядер простаивают. Это происходит как в локальном режиме (master = local [*]), так и в AWS EMR (master = yarn, режим клиента). Вот моя команда для местных:
spark-submit --driver-memory=60g --driver-class-path <jar> --class <class name> --conf spark.shuffle.partitions=48 --exclude-packages <exc. packages> --packages <packages>
Вот мои искры-defaults.conf
spark.sql.autoBroadcastJoinThreshold -1
spark.driver.extraJavaOptions -XX:+UseG1GC
spark.executor.extraJavaOptions -XX:+UseG1GC
Как я могу заставить создание DAG использовать более одного ядра?
На одном этапе я обнаружил ошибку SPARK-13346, из-за которой возникли проблемы с созданием DAG из-за большой родословной. Я делаю обильную контрольную точку (и сохраняется), чтобы удалить родословную - и у меня все еще есть низкая производительность.