Как заставить обрабатывать только одну задачу на исполнителя в Spark? - PullRequest
0 голосов
/ 29 октября 2019

Я использую Spark для обработки моих данных. Моя работа в Spark - это операция Только для карты , и я использую некоторую внешнюю библиотеку для обработки моих данных. Эта внешняя библиотека имеет ошибку утечки памяти. Когда исполнитель запускается, он успешно обрабатывает несколько файлов / разделов, но из-за этой ошибки памяти он начинает отказывать.

У меня жесткая зависимость от этой внешней библиотеки, и ошибка утечки памяти не будет исправлена ​​в ближайшее время. Итак, я ищу альтернативные варианты для запуска моей искровой работы (за счет низкой производительности)

Как я упоминал ранее, каждый исполнитель может легко обработать пару файлов / разделов, я думаю, если я смогунастроить приложение Spark на использование одного исполнителя для каждой задачи, т. е. убить исполнителя после обработки назначенного задания и создать нового исполнителя для следующего задания. Возможно, я смогу запустить свое задание.

Я хочу знать,если есть способ настроить Spark для создания нового исполнителя для каждой доступной задачи?

Я уже пытался использовать spark.dynamicAllocation.executorIdleTimeout=0, но это не создает нового исполнителя для каждой задачи.

Ответы [ 3 ]

0 голосов
/ 29 октября 2019

Может быть, есть другие способы обойти проблему (кроме исправления библиотеки)?

Как именно она течет? Если это, скажем, утечка памяти внутри объекта библиотеки, вы можете попытаться выделить объект библиотеки для раздела:

rdd.mapPartitions(iter => {
  val lib = new MyLibrary()
  iter.map(elem => lib.doSomething(elem))
})

Если это создает утечку в некоторой статической глобальной переменной, тогда вы можете попытаться загрузить, создать новуюЗагрузчик классов на раздел и загрузите библиотеку, используя этот загрузчик классов.

0 голосов
/ 29 октября 2019

Убедитесь, что вы установили spark.executor.cores=1, таким образом, будет только 1 задача (за один раз) для каждого исполнителя jvm. Но, тем не менее, будет несколько задач для каждого исполнителя, которые будут выполняться последовательно

0 голосов
/ 29 октября 2019

Нет, это невозможно и не будет иметь смысла архитектурно.

Дизайн сделан, предполагая, что все будет работать, а не то, что будут проблемы. В руководствах нет упоминания об этой возможности.

...