首页 > 解决方案 > 当 Spark 执行器中抛出异常时会发生什么?

问题描述

我正在使用一个 spark 结构化流式传输作业,mapPartitions它连接到 mongo 客户端并使用 mongo 中的数据丰富来自 kafka 的流数据。有时,mongo 无法连接,并且我在其中一个执行程序任务中遇到异常。但是这项工作并没有停止,它还停止消费来自 kafka 的数据。它进入挂起状态。

目前,我正在做平常的事情,

try{

//enrich data

} catch {
  case e: Exception => {
     e.printStackTrace()
     sys.exit(0)
  }
} finally {
  //close mongo connection
}

如果我在执行程序中抛出异常,驱动程序是否捕获异常?此外,是否有更好的方法来处理此类连接异常,以便执行程序在重新连接后重新启动。

标签: mongodbapache-spark

解决方案


在 Spark 和 Hadoop 中分别设置以下配置进行重试

spark.task.maxFailures

yarn.resourcemanager.am.max-attempts

重试后,异常将返回给驱动程序。

此外,挂起状态可能是您的 mongo 客户端等待超时。请参阅下文以设置更短的超时属性

https://api.mongodb.com/python/current/api/pymongo/mongo_client.html#pymongo.mongo_client.MongoClient


推荐阅读