Size: a a a

2021 December 07

CO

Chern Oleksander in Moscow Spark
Глаза боятся, руки из жопы но я не сдаюсь ))
источник

ЕГ

Евгений Глотов... in Moscow Spark
Видимо для таких случаев как раз
источник

ЕГ

Евгений Глотов... in Moscow Spark
Но он работает x2 времени
источник

CO

Chern Oleksander in Moscow Spark
у меня спарк 3.1
источник

ЕГ

Евгений Глотов... in Moscow Spark
В принципе сортировка с совместным партицированием сложная операция
источник

A

ANatoly in Moscow Spark
В общем, если кому интересно, проблему с временной папкой решил через управление (создание, удаление) временной папкой через Python (tempfile). Но вот то, что новые сессии берут конфиги от предыдущих сессий, это я пока не знаю как решить. Перегружать ядро jupyter не подходит, т.к. теряются все вычисления, а мне нужно в рамках одного python процесса всё выполнить. Единственная гипотеза, парсить параметр sun.java.command и его менять.
источник

k

kvadratura in Moscow Spark
я не совсем понимаю, почему это проблема. можете в двух словах описать свой workflow? и зачем вам много сессий в одном кернеле? (как я понял)
источник

k

kvadratura in Moscow Spark
почему у вас теряются вычисления? можно же их сохранить паркетом на диск / хдфс / что там у вас
источник

A

ANatoly in Moscow Spark
Как к компьютеру вернусь, опишу ситуацию
источник

A

ANatoly in Moscow Spark
У меня такой пайплайн, качаю данные из hive и перевожу их в pandas для дальнейшей работы - это одна сессия, далее происходит несколько этапов без запуска Спарк, после этого запускаю распределённый оптимизатор гиперпараметров - это вторая сессия, ещё несколько этапов на чистом питоне, и потом записываю результаты пайплайна обратно в hive. Собственно говоря, я бы всё на одной сессии делал, но вот время между активностями Спарка будет довольно долгим, т.е. ресурсы будут заняты, а по факту ничего не исполняется. Хотел обойтись малой кровью, чтобы не переписывать пайплайн и остановиться на 3-х разных сессиях, но подозреваю, что так не получается.
источник

ММ

Максим Мартынов... in Moscow Spark
Решается переводом spark.dynamicAllocation.enabled в true и установкой в spark.dynamicAllocation.minExecutors минимального числа executors, которое нужно постоянно сохранять привязанными к текущей сессии (обычно можно хоть в й выставить).

Остальные после достижения spark.dynamicAllocation.executorIdleTimeout будут освобождены, их смогут использовать другие сессии. Если minExecutors=1, то ресурсы будет занимать фактически только драйвер.

Но executor'ы освобождаются только в том случае, если на них ничего не закэшировано.
источник

A

ANatoly in Moscow Spark
Пробовал с только с этой spark.dynamicAllocation.enabled конфигурацией запускать, но оптимизатор в некоторых случаях не запускался и нужно смотреть, что у него под капотом, может он и кеширует что-то. Вроде, решалась через тюнинг других конфигов, но точно каких не скажу, нужно будет над логами посидеть.
Всем спасибо за советы, попробую на одной сессии с динамической аллокацией выехать!
источник

ЕГ

Евгений Глотов... in Moscow Spark
Кешированные данные тоже выгружаются, там другой таймаут
источник

ЕГ

Евгений Глотов... in Moscow Spark
А минэкзекуторс случаем 0 не ставили?
источник

ЕГ

Евгений Глотов... in Moscow Spark
С 0 не всегда стартует
источник

ЕГ

Евгений Глотов... in Moscow Spark
По крайней мере в спарк 2.3-
источник

A

ANatoly in Moscow Spark
Нет, конфиг состоял из одного параметра spark.dynamicAllocation.enabled, true
источник

ЕГ

Евгений Глотов... in Moscow Spark
Ну этого маловато)
источник

ЕГ

Евгений Глотов... in Moscow Spark
Там 5 штук параметров
источник

A

ANatoly in Moscow Spark
Ну похоже настал момент, когда нужно углубиться в динамическую аллокацию, а то до этого обычно на статической сессии всё запускал
источник