Error de sincronización de datos de Oozie con la tarea MYSQL: el host'XXX 'está bloqueado debido a muchos errores de conexión

0 fenómeno 

Al sincronizar datos con sqoop, el registro muestra una falla en la tarea sqoop, pero en el lado de visualización de datos, se encuentra que los datos en la tabla mysql han sido importados. Para analizar la razón en un nivel más profundo, observé el hilo de registro específico y encontré que el contenido del error era: Causado por: java.sql.SQLException: null, mensaje del servidor: "Host '10 .9.4.41 'está bloqueado debido a muchos errores de conexión; desbloquee con'mysqladmin flush-hosts '". Los detalles se muestran en la captura de pantalla siguiente:

registro de sqoop:

 

Lado de mysql: los datos reales se han exportado después de que se informa el error

Verifique los registros específicos en hilo de la siguiente manera:

2020-12-11 19:36:40,014 INFO [AsyncDispatcher event handler] org.apache.hadoop.mapreduce.v2.app.job.impl.TaskAttemptImpl: Diagnostics report from attempt_1607676423534_0062_m_000002_0: Error: java.io.IOException: java.sql.SQLException: null,  message from server: "Host '10.9.4.41' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'"
	at org.apache.sqoop.mapreduce.ExportOutputFormat.getRecordWriter(ExportOutputFormat.java:79)
	at org.apache.hadoop.mapred.MapTask$NewDirectOutputCollector.<init>(MapTask.java:647)
	at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:767)
	at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
	at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:170)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.Subject.doAs(Subject.java:422)
	at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1866)
	at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:164)
Caused by: java.sql.SQLException: null,  message from server: "Host '10.9.4.41' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'"
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
	at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1112)
	at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2488)
	at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2521)
	at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2306)
	at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:839)
	at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
	at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:421)
	at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:350)
	at java.sql.DriverManager.getConnection(DriverManager.java:664)
	at java.sql.DriverManager.getConnection(DriverManager.java:247)
	at org.apache.sqoop.mapreduce.db.DBConfiguration.getConnection(DBConfiguration.java:302)
	at org.apache.sqoop.mapreduce.AsyncSqlRecordWriter.<init>(AsyncSqlRecordWriter.java:78)
	at org.apache.sqoop.mapreduce.ExportOutputFormat$ExportRecordWriter.<init>(ExportOutputFormat.java:95)
	at org.apache.sqoop.mapreduce.ExportOutputFormat.getRecordWriter(ExportOutputFormat.java:77)
	... 8 more

2 Análisis de causas y soluciones

La misma ip se conecta incorrectamente a la base de datos varias veces en un corto período de tiempo, lo que hace que el número de conexiones incorrectas supere el valor máximo establecido (max_connection_errors) y bloquee la solicitud de la IP actual a la base de datos.

Luego de conocer el motivo específico, nos dirigimos a la base de datos MYSQL para realizar las siguientes operaciones:

  • (1) vaciar hosts (borrar caché)
  • (2) Modifique el número de max_connection_errors y establezca el valor un poco más grande. Por ejemplo: 100000

Si necesita una solución permanente, debe modificar el valor del atributo correspondiente en el archivo de configuración de MYSQL.

punto importante:

Cuando el cliente se conecta al tiempo de espera del servidor (más que connect_timeout ), el servidor registrará un error en el cliente. Cuando el número de errores alcance max_connect_errors , el cliente se bloqueará. Por lo tanto, de acuerdo con la empresa, intente establecer este valor lo más grande posible. El valor predeterminado de mysql es 10 , y podemos establecerlo en un valor mayor de acuerdo con las necesidades específicas. Aquí se establece en 100000. (No el mayor cuanto mejor, cuanto mayor sea el ataque, menor será la seguridad)

De acuerdo con lo anterior, elegimos la siguiente configuración en nuestro entorno de producción, y elegimos según la situación:

entre ellos

  • connect_timeout: 600000
  • max_connect_errors: 100000

 

 

 

Supongo que te gusta

Origin blog.csdn.net/godlovedaniel/article/details/111053438
Recomendado
Clasificación