Таким образом, мы запускаем искровое задание, которое извлекает данные и выполняет обширное преобразование данных и записывает их в несколько разных файлов. Все работает нормально, но я получаю случайные огромные задержки между завершением ресурсоемкой работы и началом следующей работы.
На рисунке ниже мы видим, что задание, которое было запланировано на 17:22:02, заняло 15 минут, что означает, что я ожидаю, что следующая работа будет намечена на 17:37:02. Однако следующая работа была назначена на 22:05:59, то есть +4 часов после успешной работы.
Когда я копаюсь в следующем интерфейсе искры задания, он показывает задержку планировщика <1 сек. Поэтому я не понимаю, откуда берется эта 4-часовая задержка.
(Spark 1.6.1 с Hadoop 2)
Обновлено:
Я могу подтвердить, что ответ Дэвида ниже о том, как обрабатываются операции ввода-вывода в Spark, немного неожидан. (Имеет смысл, что запись файла по сути "собирает" за кулисами перед тем, как записывать, учитывая порядок и/или другие операции.) Но меня немного смущает тот факт, что время ввода-вывода не входит во время выполнения задания. Полагаю, вы можете увидеть его на вкладке "SQL" в пользовательском интерфейсе spark, поскольку запросы по-прежнему выполняются даже при успешном выполнении всех заданий, но вы вообще не можете в них углубиться.
Я уверен, что есть и другие способы улучшения, но для меня было достаточно двух методов:
- уменьшить количество файлов
- установите для
parquet.enable.summary-metadata
значение false