Как настроить Spark, чтобы избежать утечки диска сортировки?

#apache-spark

Вопрос:

У нас есть алгоритм, который в настоящее время обрабатывает данные по разделам foreachPartition . Я понимаю, что это, возможно, не лучший способ обработки данных в Spark, но, теоретически, мы должны быть в состоянии заставить его работать.

У нас возникла проблема с разливом данных Spark после sortWithinPartitions вызова с примерно 45 GB большим количеством данных в разделе. У нашего исполнителя есть 250 GB определенная память. Теоретически, в памяти достаточно места для размещения данных (если только накладные расходы Spark на сортировку не велики). И все же мы испытываем разливы. Есть ли способ точно рассчитать, сколько памяти на одного исполнителя нам потребуется, чтобы заставить его работать?

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

1. sortWithinPartitions не будет выполнять перетасовку, но какие операции вы выполняете после этого, что приводит к утечке ваших данных.. Есть ли перекос данных в наборе данных, который вы обрабатываете?

2. @NikunjKakadiya технически сейчас есть перекос, но в будущем его не будет (в настоящее время один раздел имеет 16 ГБ, другой 32 ГБ, размер остальных меньше 2 ГБ). после сортировки я просто делаю foreachPartition

3. Трудно предположить, не видя фактического кода и того, как он создает этапы и задачи в пользовательском интерфейсе spark. Но если у вашего исполнителя 250 ГБ памяти, то это вообще не должно быть проблемой, если только не происходит что-то странное.