Как стать автором
Обновить

Комментарии 11

Эх, эту инфу бы в Issue в Apache Jira, чтобы наконец PySpark научился сам за собой все корректно убирать. А не оставлять свои глобалы на глобалах

в процессе обработки данных источника вполне может быть ряд промежуточных Spark-задач, которые не нуждаются в использовании такого количества ресурсов

Чем в таком кейсе не подошёл dynamic allocation?

И что помешало разбить процесс на несколько задач (на уровне оркестратора)?

Ну, dynamic allocation это строго про число executors. Если ресурсы это память - то динамической аллокацией это не решается.

Задачи на уровне оркестратора - это всегда сложности интеграции по сравнению с кусками кода одной программы. Они конечно решаются, но это лишний геморрой. Ну т.е. обычно при таком способе у вас вместо взаимодействия по API получается обмен файлами, который далеко не всегда удобен (не говоря уже про такие простые вещи, что эти файлы нужно за собой подчищать и т.п.).

Ну вот скажем, простой пример - если оркестратор Oozie, то задача может записать key-value результат, именуемый data, при помощи которого можно передавать что-то между задачами. Это API, пусть и примитивный.

Но вот проблема - если задача завершается ошибкой, то Oozie считает, что data не будет.

Но ведь задача же может завершиться ошибкой, проделав часы работы, и какие-то результаты у нее все равно будут (я уже не говорю, что в случае Yarn нам бы не мешало как-то сохранить applicationId для последующего анализа, почему оно вообще упало, или скажем код возврата Spark, чтобы понять, что ему скажем памяти не хватило).

Помимо прочего, после завершения JVM-процесса драйвера необходимо корректно завершить все открытые соединения с ним. Для этого достаточно вызвать метод shutdown() у экземпляра класса JavaGateway

А нельзя просто shutdown позвать без всех извращений с ручной отправкой команд?

py4j начнет бросаться исключениями на все последующие команды

Хотелось бы, но нет. Фактически, shutdown() лишь закрывает сокет и разрушает связь между PVM и JVM процессами. При всём этом JVM процесс продолжает функционировать...

Сложная тема, чтобы представить как оно работает в случае cluster mode или spark submit (не будет ли каких-то side effect от перезапуска драйвера), нужно как минимум понимать как взаимодействуют yarn/driver/applicationmaster.

С cluster mode это и не нужно, там драйвер уже запущен с готовым SparkContext, и перезаписать параметры он не может

Зарегистрируйтесь на Хабре, чтобы оставить комментарий