在Spark执行器中引发异常时会发生什么?

时间:2019-11-27 07:29:48

标签: mongodb apache-spark

我有一个火花结构化的流作业,我正在使用mapPartitions,它正在连接到mongo客户端,并用mongo中的数据丰富来自kafka的流数据。有时,mongo无法连接,并且在执行程序任务之一中出现异常。但是,这项工作不会停止,但也会停止使用kafka中的数据。它进入挂起状态。

当前,我正在照常进行

try{

//enrich data

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

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

1 个答案:

答案 0 :(得分:1)

分别在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