Одной из идей является расширение SparkListener и сбор метрик вокруг сбоев в любом месте (например, отправка событий в ELK).
Некоторые полезные события:
case class SparkListenerExecutorBlacklisted(
time: Long,
executorId: String,
taskFailures: Int)
extends SparkListenerEvent
case class SparkListenerExecutorBlacklistedForStage(
time: Long,
executorId: String,
taskFailures: Int,
stageId: Int,
stageAttemptId: Int)
extends SparkListenerEvent
case class SparkListenerNodeBlacklistedForStage(
time: Long,
hostId: String,
executorFailures: Int,
stageId: Int,
stageAttemptId: Int)
extends SparkListenerEvent
case class SparkListenerNodeBlacklisted(
time: Long,
hostId: String,
executorFailures: Int)
extends SparkListenerEvent
И слушатели:
def onExecutorBlacklisted(executorBlacklisted: SparkListenerExecutorBlacklisted): Unit
def onExecutorBlacklistedForStage(executorBlacklistedForStage: SparkListenerExecutorBlacklistedForStage): Unit
def onNodeBlacklistedForStage(nodeBlacklistedForStage: SparkListenerNodeBlacklistedForStage): Unit
def onNodeBlacklisted(nodeBlacklisted: SparkListenerNodeBlacklisted): Unit
Обратите внимание, что вы можете подписать слушателя с помощью контекста Spark addSparkListener
.Подробнее в этом другом потоке переполнения стека: Как реализовать настраиваемый прослушиватель / трекер заданий в Spark?
Примечание: чтобы заставить его работать с PySpark, выполните шаги, описанные в этом другом переполнении стека.нить: Как добавить SparkListener из pySpark в Python?