【问题标题】:How to force close Spark Hive metastore connections to mysql after stopping context?停止上下文后如何强制关闭与 mysql 的 Spark Hive 元存储连接?
【发布时间】: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


【解决方案1】:

我有一个类似的问题,有一个由 MySQL 支持的 hive 3.1.1 元存储。我正在使用 wait_timeout 变量来获取超过 10 分钟处于非活动状态的连接。默认为 8 小时。

https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_wait_timeout

这感觉不是一个“合适”的解决方案,但它可以让我们的系统正常运行。

【讨论】:

    猜你喜欢
    • 2014-01-23
    • 1970-01-01
    • 2015-01-17
    • 2017-09-17
    • 2023-03-14
    • 2015-11-18
    • 2019-08-15
    • 2012-11-03
    • 2016-06-18
    相关资源
    最近更新 更多