Spark mapPartitions: как избежать OOM? - PullRequest
0 голосов
/ 13 мая 2019

У меня есть такой код:

.repartition( 10 )
.rdd.mapPartitions(
  it => MyProcessor.process(it)
).count()

Кажется, что перераспределение в порядке (разумное количество строк на раздел).

Проблема в том, что у меня есть OOM, потому что задачи, примененные к каждому разделу MyProcessor , не знают о свободной памяти. Каждый процессор действительно имеет пользовательский буфер в 2 ГБ (по 2 ГБ для раздела за раз), но он не знает о потреблении памяти Spark, и я предполагаю, что из-за этого произошла ошибка OOM.

Без увеличения перераспределения, каковы соответствующие свойства конфигурации Spark для обоих:

  • оставить достаточно памяти, чтобы каждый раздел мог быть в данный момент полностью в памяти
  • оставить достаточно памяти, чтобы каждый процессор (внутри замыкания mapPartitions) мог выполнять свою работу

Проблема здесь в том, что память распределяется между Spark и пользовательским пространством. У вас есть идеи о соответствующих опциях Spark для решения проблемы? Спасибо

...