我有一个火花结构化的流作业,我正在使用mapPartitions
,它正在连接到mongo客户端,并用mongo中的数据丰富来自kafka的流数据。有时,mongo无法连接,并且在执行程序任务之一中出现异常。但是,这项工作不会停止,但也会停止使用kafka中的数据。它进入挂起状态。
当前,我正在照常进行
try{
//enrich data
} catch {
case e: Exception => {
e.printStackTrace()
sys.exit(0)
}
} finally {
//close mongo connection
}
如果我在执行程序中抛出异常,驱动程序会捕获异常吗?此外,还有更好的方法来处理此类连接异常,例如使执行程序在重新连接后重新启动。
答案 0 :(得分:1)
分别在Spark和Hadoop中设置以下配置以进行重试
spark.task.maxFailures
yarn.resourcemanager.am.max-attempts
重试后,异常将被抛出给驱动程序。
此外,挂起状态可能是您的mongo客户正在等待超时。请参阅下面的设置较短的超时属性