调用sc.stop()后Spark任务仍处于RUNNING状态,关联Hive Metastore问题
SparkContext已停止但SparkApplication在K8s上仍显示RUNNING(关联Hive Metastore)
问题描述
运行多个PySpark工作流后,已调用sc.stop()终止SparkContext,日志明确打印出SparkContext成功停止的信息:
22/09/03 00:37:17 INFO SparkUI: Stopped Spark web UI at http://bonfireoni-job-5158c78300c5b4fa-driver-svc.spark.svc:4040 22/09/03 00:37:17 INFO KubernetesClusterSchedulerBackend: Shutting down all executors 22/09/03 00:37:17 INFO KubernetesClusterSchedulerBackend$KubernetesDriverEndpoint: Asking each executor to shut down 22/09/03 00:37:17 WARN ExecutorPodsWatchSnapshotSource: Kubernetes client has been closed. 22/09/03 00:37:17 INFO MapOutputTrackerMasterEndpoint: MapOutputTrackerMasterEndpoint stopped! 22/09/03 00:37:17 INFO MemoryStore: MemoryStore cleared 22/09/03 00:37:17 INFO BlockManager: BlockManager stopped 22/09/03 00:37:17 INFO BlockManagerMaster: BlockManagerMaster stopped 22/09/03 00:37:17 INFO OutputCommitCoordinator$OutputCommitCoordinatorEndpoint: OutputCommitCoordinator stopped! 22/09/03 00:37:17 INFO SparkContext: Successfully stopped SparkContext
但执行sparkctl list命令时,对应的SparkApplication始终处于RUNNING状态,无法自动转为COMPLETED。经排查,该问题仅在启用Hive Metastore集成时出现,不使用Hive Metastore则无此异常。
排查与解决方向
- 强制关闭Hive Metastore客户端:添加Spark配置参数,确保Driver停止时自动关闭Hive客户端,避免资源泄漏:
spark.sql.hive.metastore.closeClient=true spark.hadoop.hive.metastore.client.socket.timeout=30s - 手动清理Driver Pod:确认无残留任务后,手动删除Driver Pod触发状态更新:
kubectl delete pod <driver-pod-name> -n <spark-namespace> - 检查Spark Operator状态同步日志:查看Spark Operator的运行日志,确认是否存在状态上报失败的报错信息。
- 升级Spark版本:旧版本Spark在Hive Metastore与K8s状态交互上可能存在bug,升级至3.3.x及以上稳定版本可修复部分已知问题。
- 代码中显式关闭Hive客户端:在PySpark工作流结束后,添加代码显式关闭Hive Metastore客户端:
# 在sc.stop()后添加以下代码 spark._jvm.org.apache.hadoop.hive.metastore.HiveMetaStoreClient.close()
内容的提问来源于stack exchange,提问作者Pablo Beltran
相关产品推荐
相关产品推荐

