Не удалось подключиться к MYSQL: соединение продолжает увеличиваться, даже если оно закрыто в коде
Я использую версию MySQL Ver 14.14 Distrib 5.7.23
У меня проблемы с запуском spark-submit, который пишет в SQL каждые 15 минут. В моем коде я сначала закрою любое текущее соединение SQL перед записью в таблицу SQL, а затем снова закрою соединение.
Мой код SQL, как показано ниже:
var connection = DriverManager.getConnection(url, "mysql", "xxxxxxxx")
if(!(connection.isClosed())){
connection.close()
}
// use SaveMode.Append to keep adding new data and specify behavior of dataframe.
try {
Class.forName(driver)
// open new connection
dfAnom.write.mode(SaveMode.Append).jdbc(url, "results_table", connectionProperties)
println(s"- $now: Data successfully sent...")
// connection = DriverManager.getConnection(url, "mysql", "P@xxxxxxxx")
connection.close()
} catch {
case unknown : Throwable => println(s"- $now: Connection Close? $connection.isClosed(). Could not connect to MYSQL")
}
Но много раз (иногда он успешно пишет в SQL) у меня появляются ошибки, которые показывают, что сервер слишком много подключений и начинает убивать задачи и теряет эти 15 минут данных.
message from server: "Too many connections"
сопровождаемая ошибкой планировщика с сотнями сообщений TaskKilled.
19/04/12 01:16:09 ERROR scheduler.TaskSetManager: Task 169 in stage 509.0 failed 4 times; aborting job
- Fri Apr 12 01:15:56 SGT 2019: Could not connect to MYSQL
19/04/12 01:16:09 WARN scheduler.TaskSetManager: Lost task 195.0 in stage 509.0 (TID 15428, bda1node04.bda.sg, executor 194): TaskKilled (Stage cancelled)
19/04/12 01:16:09 WARN scheduler.TaskSetManager: Lost task 135.0 in stage 509.0 (TID 15368, bda1node04.bda.sg, executor 194): TaskKilled (Stage cancelled)
19/04/12 01:16:09 WARN scheduler.TaskSetManager: Lost task 71.0 in stage 509.0 (TID 15304, bda1node07.bda.sg, executor 183): TaskKilled (Stage cancelled)
19/04/12 01:16:09 WARN scheduler.TaskSetManager: Lost task 105.0 in stage 509.0 (TID 15338, bda1node04.bda.sg, executor 194): TaskKilled (Stage cancelled)
19/04/12 01:16:09 WARN scheduler.TaskSetManager: Lost task 165.0 in stage 509.0 (TID 15398, bda1node04.bda.sg, executor 194): TaskKilled (Stage cancelled)
Я сделал несколько проверок на моем сервере SQL:
mysql> SHOW STATUS WHERE `variable_name` = 'Max_used_connections';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| Max_used_connections | 152 |
+----------------------+-------+
1 row in set (0.00 sec)
mysql> show status like 'Conn%';
+-----------------------------------+--------+
| Variable_name | Value |
+-----------------------------------+--------+
| Connection_errors_accept | 0 |
| Connection_errors_internal | 0 |
| Connection_errors_max_connections | 417 |
| Connection_errors_peer_address | 0 |
| Connection_errors_select | 0 |
| Connection_errors_tcpwrap | 0 |
| Connections | 189992 |
+-----------------------------------+--------+
7 rows in set (0.00 sec)
mysql> SHOW VARIABLES LIKE "max_connections";
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 151 |
+-----------------+-------+
max_used connections = 152 max_connections = 151 Я не уверен, является ли это причиной, но если это так, я не уверен, почему мой код не закрывал соединения. Еще одна мысль, которую я заметил, это то, что "Связи" продолжают расти.
Кончаются идеи. Надеюсь, что кто-то может указать мне на другую область, которую я могу исследовать, чтобы решить эту проблему.
Заранее спасибо.