mongodb - 当 Spark 执行器中抛出异常时会发生什么?
问题描述
我正在使用一个 spark 结构化流式传输作业,mapPartitions
它连接到 mongo 客户端并使用 mongo 中的数据丰富来自 kafka 的流数据。有时,mongo 无法连接,并且我在其中一个执行程序任务中遇到异常。但是这项工作并没有停止,它还停止消费来自 kafka 的数据。它进入挂起状态。
目前,我正在做平常的事情,
try{
//enrich data
} catch {
case e: Exception => {
e.printStackTrace()
sys.exit(0)
}
} finally {
//close mongo connection
}
如果我在执行程序中抛出异常,驱动程序是否捕获异常?此外,是否有更好的方法来处理此类连接异常,以便执行程序在重新连接后重新启动。
解决方案
在 Spark 和 Hadoop 中分别设置以下配置进行重试
spark.task.maxFailures
yarn.resourcemanager.am.max-attempts
重试后,异常将返回给驱动程序。
此外,挂起状态可能是您的 mongo 客户端等待超时。请参阅下文以设置更短的超时属性
推荐阅读
- linux - 在 bash 中使用变量复制命令
- python - 将 python 请求程序转换为对 curl 的调用
- python-3.x - 通过使用图像平面小部件混合它们来同时渲染两个体积
- google-sheets - 如何使这个查询正确?
- java - 在不知道输入数量的情况下计算最小、最大和平均输入值的最佳方法?
- apache-kafka - NiFi:从 Kafka 消费时过滤主题
- java - 如何使用 putExtra 将类实例传递给服务
- postgresql - 我如何从 PostgreSQL 中的 EXPLAIN (ANALYZE) 中知道大 O 表示法
- armadillo - 犰狳中的矩阵不对称警告过于严格
- c++ - 带有 CMake 的 QtCreator,在编辑器中错误地解析了 __cplusplus 值