Я новый пользователь Spark Streaming и Spark. Во время своих тестов я заметил, что одна ошибка в потоке приводит к сбою всего потокового приложения.
Для большей ясности позвольте мне объяснить на примере. Предположим, что представленное приложение потребляет целочисленный поток, например 15, 10, 21, 12, ...
. Но этот поток может по ошибке содержать некоторые нецелочисленные строки (например, 15, 10, 21, 12, foo, 32, ...
). Если в моем коде есть ошибка и предполагается, что все элементы данных являются целыми числами, тогда он вызовет исключение при обработке строки foo
в потоке.
В таком случае движок Spark повторяет выполнение задачи по умолчанию 3 раза (вы можете проверить документацию по конфигурации для параметра spark.task.maxFailures
). Затем, после всех неудачных попыток, он прерывает процесс драйвера и, следовательно, исполнителей.
Я не уверен, что это правильное поведение. Вместо этого я думал, что текущая задача (т.е. выполнение частичных данных) или пакет (т.е. набор элементов данных, считанных из потока) будет отброшен. Итак, драйвер обработает оставшийся поток.
Есть идеи, почему Spark так себя ведет? Существуют ли какие-либо конфигурации, чтобы заставить двигатель игнорировать сбои и продолжать работу?
Кстати, я использую Spark в автономном режиме. Может ли в этом помочь YARN или Mesos?
Заранее спасибо.