【发布时间】:2018-01-22 22:49:46
【问题描述】:
我使用 Spark 来查询 Hive,然后进行转换。我的 Scala 应用程序创建了多个 Spark 应用程序。只有在关闭前一个 Spark App 的 SparkSession 和 Spark Context 后,才会创建一个新的 Spark 应用。
但是,在停止 sc 和 spark 时,与 Hive Metastore (Mysql) 的连接以某种方式未正确销毁。对于每一个 Spark 应用程序,我都可以看到大约 5 个 Mysql 连接正在创建(旧连接仍然处于活动状态!)。最终,Mysql 在打开 150 个连接后开始拒绝新连接。如何强制 spark 关闭与 Mysql 的 Hive Metastore 连接(在 spark.stop() 和 sc.stop() 之后)?
注意:我使用的是 Spark 2.1.1。我正在使用 Spark 的 Thriftserver 而不是 HiveServer。所以,我认为我没有使用过 Hive Metastore 服务。
【问题讨论】:
-
1. 您可以在 MySQL 中提高 150 个连接的限制。 2. Spark 不直接连接 MySQL;它连接到 Metastore 服务,后者通过 连接池(如果我没记错的话,可以是 BoneCP 或 DBCP)连接到它的关系数据库。 3. 与 BoneCP 和 MySQL 一起使用时,Metastore 代码中存在一个关于连接泄漏(因此内存泄漏)的已知错误,该错误最近才得到纠正,因此请检查您的 Hive 版本和 Hive 设置。跨度>
-
我可以提高 150 个连接的限制,但我认为保持打开的连接不是一个好方法。我想正确地修复它。
标签: mysql apache-spark hive metastore