У меня есть такой код:
.repartition( 10 )
.rdd.mapPartitions(
it => MyProcessor.process(it)
).count()
Кажется, что перераспределение в порядке (разумное количество строк на раздел).
Проблема в том, что у меня есть OOM, потому что задачи, примененные к каждому разделу MyProcessor , не знают о свободной памяти. Каждый процессор действительно имеет пользовательский буфер в 2 ГБ (по 2 ГБ для раздела за раз), но он не знает о потреблении памяти Spark, и я предполагаю, что из-за этого произошла ошибка OOM.
Без увеличения перераспределения, каковы соответствующие свойства конфигурации Spark для обоих:
- оставить достаточно памяти, чтобы каждый раздел мог быть в данный момент полностью в памяти
- оставить достаточно памяти, чтобы каждый процессор (внутри замыкания mapPartitions) мог выполнять свою работу
Проблема здесь в том, что память распределяется между Spark и пользовательским пространством. У вас есть идеи о соответствующих опциях Spark для решения проблемы? Спасибо