Как принудительно закрыть соединения хранилища метаданных Spark Hive с mysql после остановки контекста?

Я использую Spark для запросов к Hive с последующими преобразованиями. Мое приложение Scala создает несколько приложений Spark. Новое приложение Spark создается только после закрытия SparkSession и Spark Context предыдущего приложения Spark.

Однако при остановке sc и spark соединения с Hive Metastore (Mysql) каким-то образом не уничтожаются должным образом. Для каждого приложения Spark я вижу около 5 создаваемых соединений Mysql (старые соединения все еще активны!). В конце концов, Mysql начинает отклонять новые соединения после 150 открытых соединений. Как я могу заставить spark закрыть соединения хранилища метаданных Hive с Mysql (после spark.stop() и sc.stop())?

Примечание. Я использовал Spark 2.1.1. Я использую Thriftserver Spark вместо HiveServer. Итак, я не думаю, что пользовался сервисом Hive Metastore.


person rohitsd    schedule 15.08.2017    source источник
comment
1. Вы можете увеличить лимит в 150 соединений в MySQL. 2. Spark не подключается к MySQL напрямую; он подключается к службе Metastore, которая подключается к своей реляционной БД через пул соединений (либо BoneCP, либо DBCP, насколько я помню). 3. существует известная ошибка, связанная с утечками соединения (следовательно, утечками памяти) в коде Metastore при использовании с BoneCP и MySQL, которая была исправлена ​​совсем недавно, поэтому проверьте версию Hive и настройку Hive.   -  person Samson Scharfrichter    schedule 15.08.2017
comment
Я могу поднять лимит в 150 подключений, но не думаю, что оставлять открытые подключения — это хороший подход. Хотел как следует починить.   -  person rohitsd    schedule 16.08.2017


Ответы (1)


У меня была похожая проблема с хранилищем метаданных hive 3.1.1, поддерживаемым MySQL. Я использую переменную wait_timeout для получения соединений, неактивных более 10 минут. По умолчанию 8 часов.

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

Это не похоже на «правильное» решение, но оно позволяет нашей системе функционировать.

person Dave Richardson    schedule 08.04.2020