1.报错信息:

  1. Initializing the schema to: 3.1.1000
  2. Metastore connection URL: jdbc:mysql://xx.xx.xx.1:3306/hive
  3. Metastore Connection Driver : com.mysql.jdbc.Driver
  4. Metastore connection User: hive
  5. Failed to get schema version.
  6. Underlying cause: java.sql.SQLException : null, message from server: "Host 'hdp02.unicom.com' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'"
  7. SQL Error code: 1129
  8. org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version.
  9. at org.apache.hadoop.hive.metastore.tools.HiveSchemaHelper.getConnectionToMetastore(HiveSchemaHelper.java:94)
  10. at org.apache.hadoop.hive.metastore.tools.MetastoreSchemaTool.getConnectionToMetastore(MetastoreSchemaTool.java:250)
  11. at org.apache.hadoop.hive.metastore.tools.MetastoreSchemaTool.testConnectionToMetastore(MetastoreSchemaTool.java:333)
  12. at org.apache.hadoop.hive.metastore.tools.SchemaToolTaskInit.execute(SchemaToolTaskInit.java:53)
  13. at org.apache.hadoop.hive.metastore.tools.MetastoreSchemaTool.run(MetastoreSchemaTool.java:446)
  14. at org.apache.hive.beeline.schematool.HiveSchemaTool.main(HiveSchemaTool.java:138)
  15. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  16. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  17. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  18. at java.lang.reflect.Method.invoke(Method.java:498)
  19. at org.apache.hadoop.util.RunJar.run(RunJar.java:318)
  20. at org.apache.hadoop.util.RunJar.main(RunJar.java:232)
  21. Caused by: java.sql.SQLException: null, message from server: "Host 'hdp02.unicom.com' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'"
  22. at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:996)
  23. at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:935)
  24. at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:924)
  25. at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1037)
  26. at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2234)
  27. at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2265)
  28. at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2064)
  29. at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:790)
  30. at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:44)
  31. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  32. at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
  33. at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
  34. at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
  35. at com.mysql.jdbc.Util.handleNewInstance(Util.java:377)
  36. at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:395)
  37. at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:325)
  38. at java.sql.DriverManager.getConnection(DriverManager.java:664)
  39. at java.sql.DriverManager.getConnection(DriverManager.java:247)
  40. at org.apache.hadoop.hive.metastore.tools.HiveSchemaHelper.getConnectionToMetastore(HiveSchemaHelper.java:88)
  41. ... 11 more

2.分析原因

同一个ip在短时间内产生太多(超过mysql数据库max_connection_errors的最大值)中断的数据库连接而导致的阻塞;

3.解决办法

方式一:提高允许的max_connection_errors数量(治标不治本)

  • ① 进入Mysql数据库查看max_connection_errors: show variables like “max_connection_errors”;
  • ② 修改max_connection_errors的数量为1000: set global max_connect_errors = 1000;
  • ③ 修改 max_connections 的数量为1000 :set global max_connections = 1000;

方式二:root登录后,直接使用 mysql> flush hosts; 命令