问题描述
如下是我遇到的问题:通过截图展示部分错误信息
原因分析:
通过查看DataX-web中的日志管理的日志信息,得到如下信息:
2023-10-05 13:19:50.025 [job-0] WARN DBUtil - test connection of [jdbc:mysql://node:3306/nshop] failed, for Code:[DBUtilErrorCode-10], Description:[连接数据库失败. 请检查您的 账号、密码、数据库名称、IP、Port或者向 DBA 寻求帮助(注意网络环境).]. - 具体错误信息为:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.. 2023-10-05 13:19:50 [AnalysisStatistics.analysisStatisticsLog-53] 2023-10-05 13:19:50.027 [job-0] ERROR RetryUtil - Exception when calling callable, 异常Msg:DataX无法连接对应的数据库,可能原因是:1) 配置的ip/port/database/jdbc错误,无法连接。2) 配置的username/password错误,鉴权失败。请和DBA确认该数据库的连接信息是否正确。 2023-10-05 13:19:50 [AnalysisStatistics.analysisStatisticsLog-53] java.lang.Exception: DataX无法连接对应的数据库,可能原因是:1) 配置的ip/port/database/jdbc错误,无法连接。2) 配置的username/password错误,鉴权失败。请和DBA确认该数据库的连接信息是否正确。
通过检查以上可能出现的错误:
- 通过验证,也不是数据库的用户名和密码错误,并且数据库中是存在对应的数据库的,已不是没有对应数据库的问题。
- 配置的ip/port/database/jdbc连接驱动没有问题,在测试连接时是可以进行连接的,所以错误应该不是驱动配置引起的。
通过检查以上可能出现的错误并没有解决执行器执行任务失败的问题。
[root@node ~]# cd /usr/local/datax-web-2.1.2/
[root@node datax-web-2.1.2]# ls
bin modules packages README.md userGuid.md
[root@node datax-web-2.1.2]# cd modules/
[root@node modules]# ls
datax-admin datax-executor
[root@node modules]# cd datax-executor/
[root@node datax-executor]# ls
bin conf data json lib logs
[root@node datax-executor]# cd bin
[root@node bin]# ls
configure.sh console.out datax-executor.sh env.properties
[root@node bin]# cat console.out
这里需要注意的是:通常情况下,一般遇到问题,需要查看日志时,会有两个方向:
一个是登录有关的日志信息,查看datax-admin/bin/console.out;
另一个则是与任务执行有关的执行器日志信息,通过查看datax-executor/bin/console.out
这里因为是任务执行时出了错误,所以选择查看datax-executor/bin/console.out
- 通过查看DataX-web安装路径下的执行器的日志发现如下问题:
- 发现上述问题后,通过查阅官方资料等信息,终于直到问题所在
- 读取mysql中的数据是通过JDBC连接驱动进行读取的,因此需要使用对应的jar包依赖
- 原来是由于mysql版本的问题导致的,我这里使用的是mysql-8.0.26,而DataX中的读(reader)和写(writer)这两个插件中的mysql版本却是mysql-5.1.34版本的,导致在注册信息有误,所以连接数据库失败。
解决方案:
只需要将mysql中的依赖jar包放入到对应的DataX读(reader)和写(writer)这两个插件中对应的mysqlreader和mysqlwriter中的libs路径下,并删除原有的5.1.34版本的依赖即可。
$DATAX_HOME/plugin/reader/mysqlreader/libs
$DATAX_HOME/plugin/writer/mysqlwriter/libs
当然,为了方便,也可以将mysql中的依赖包放入到 $DataX_HOME/lib路径下,又省事又方便的,但是个人选择,不推荐这样。尽量使用上述方式。
注意:我这里是从mysql读到hdfs写,所以并不需要使用将mysqlwriter中的mysql依赖jar包进行替换,只需要将读插件中的mysql依赖jar包进行替换。但是,为了避免后续需要使用写时再出现同样的错误,这里我就统一都替换了。
[root@node reader]# ls
cassandrareader ftpreader hbase11xreader mongodbreader odpsreader ossreader otsstreamreader rdbmsreader streamreader
drdsreader hbase094xreader hdfsreader mysqlreader oraclereader otsreader postgresqlreader sqlserverreader txtfilereader
[root@node reader]# cd mysqlreader/libs/
[root@node libs]# ls
commons-collections-3.0.jar commons-math3-3.1.1.jar fastjson-1.1.46.sec01.jar logback-classic-1.0.13.jar plugin-rdbms-util-0.0.1-SNAPSHOT.jar
commons-io-2.4.jar datax-common-0.0.1-SNAPSHOT.jar guava-r05.jar logback-core-1.0.13.jar slf4j-api-1.7.10.jar
commons-lang3-3.3.2.jar druid-1.0.15.jar hamcrest-core-1.3.jar mysql-connector-java-5.1.34.jar
[root@node libs]# cp /root/mysql-connector-java-8.0.26.jar ./
[root@node libs]# ls
commons-collections-3.0.jar commons-math3-3.1.1.jar fastjson-1.1.46.sec01.jar logback-classic-1.0.13.jar mysql-connector-java-8.0.26.jar
commons-io-2.4.jar datax-common-0.0.1-SNAPSHOT.jar guava-r05.jar logback-core-1.0.13.jar plugin-rdbms-util-0.0.1-SNAPSHOT.jar
commons-lang3-3.3.2.jar druid-1.0.15.jar hamcrest-core-1.3.jar mysql-connector-java-5.1.34.jar slf4j-api-1.7.10.jar
[root@node libs]# rm -rf mysql-connector-java-5.1.34.jar
[root@node libs]# ls
commons-collections-3.0.jar commons-math3-3.1.1.jar fastjson-1.1.46.sec01.jar logback-classic-1.0.13.jar plugin-rdbms-util-0.0.1-SNAPSHOT.jar
commons-io-2.4.jar datax-common-0.0.1-SNAPSHOT.jar guava-r05.jar logback-core-1.0.13.jar slf4j-api-1.7.10.jar
commons-lang3-3.3.2.jar druid-1.0.15.jar hamcrest-core-1.3.jar mysql-connector-java-8.0.26.jar
[root@node libs]# cd /usr/local/datax/plugin/writer/mysqlwriter/libs
[root@node libs]# ls
commons-collections-3.0.jar commons-math3-3.1.1.jar fastjson-1.1.46.sec01.jar logback-classic-1.0.13.jar plugin-rdbms-util-0.0.1-SNAPSHOT.jar
commons-io-2.4.jar datax-common-0.0.1-SNAPSHOT.jar guava-r05.jar logback-core-1.0.13.jar slf4j-api-1.7.10.jar
commons-lang3-3.3.2.jar druid-1.0.15.jar hamcrest-core-1.3.jar mysql-connector-java-5.1.34.jar
[root@node libs]# cp /root/mysql-connector-java-8.0.26.jar ./
[root@node libs]# rm -rf mysql-connector-java-5.1.34.jar
[root@node libs]# ls
commons-collections-3.0.jar commons-math3-3.1.1.jar fastjson-1.1.46.sec01.jar logback-classic-1.0.13.jar plugin-rdbms-util-0.0.1-SNAPSHOT.jar
commons-io-2.4.jar datax-common-0.0.1-SNAPSHOT.jar guava-r05.jar logback-core-1.0.13.jar slf4j-api-1.7.10.jar
commons-lang3-3.3.2.jar druid-1.0.15.jar hamcrest-core-1.3.jar mysql-connector-java-8.0.26.jar
最有别忘了重启DataX-web。
[root@node datax-web-2.1.2]# ./bin/stop-all.sh
2023-10-05 14:30:56.214 [INFO] (51761) Try to Stop Modules In Order
2023-10-05 14:30:56.237 [INFO] (51769) ####### Begin To Stop Module: [datax-admin] ######
2023-10-05 14:30:56.248 [INFO] (51777) load environment variables
2023-10-05 14:30:56.672 [INFO] (51777) Killing DATAX-ADMIN (pid 11240) ...
2023-10-05 14:30:56.678 [INFO] (51777) Waiting DATAX-ADMIN to stop complete ...
2023-10-05 14:30:59.336 [INFO] (51777) DATAX-ADMIN stop success
2023-10-05 14:30:59.346 [INFO] (52104) ####### Begin To Stop Module: [datax-executor] ######
2023-10-05 14:30:59.356 [INFO] (52112) load environment variables
2023-10-05 14:30:59.801 [INFO] (52112) Killing DATAX-EXEXUTOR (pid 11533) ...
2023-10-05 14:30:59.806 [INFO] (52112) Waiting DATAX-EXEXUTOR to stop complete ...
2023-10-05 14:31:02.302 [INFO] (52112) DATAX-EXEXUTOR stop success
[root@node datax-web-2.1.2]# ./bin/start-all.sh
2023-10-05 14:31:36.189 [INFO] (53831) Try To Start Modules In Order
2023-10-05 14:31:36.199 [INFO] (53839) ####### Begin To Start Module: [datax-admin] ######
2023-10-05 14:31:36.209 [INFO] (53847) load environment variables
2023-10-05 14:31:36.542 [INFO] (53847) /usr/local/java/bin/java
2023-10-05 14:31:36.546 [INFO] (53847) Waiting DATAX-ADMIN to start complete ...
2023-10-05 14:31:36.823 [INFO] (53847) DATAX-ADMIN start success
2023-10-05 14:31:36.851 [INFO] (54063) ####### Begin To Start Module: [datax-executor] ######
2023-10-05 14:31:36.905 [INFO] (54075) load environment variables
2023-10-05 14:31:37.576 [INFO] (54075) /usr/local/java/bin/java
2023-10-05 14:31:37.595 [INFO] (54075) Waiting DATAX-EXEXUTOR to start complete ...
2023-10-05 14:31:38.096 [INFO] (54075) DATAX-EXEXUTOR start success
[root@node datax-web-2.1.2]# jps
24212 NodeManager
54565 Jps
54008 DataXAdminApplication
23049 DataNode
22811 NameNode
23982 ResourceManager
55215 RunJar
60575 RunJar
54319 DataXExecutorApplication
最后重新执行失败的任务,就可以成功了。
以下是我执行成功任务成功的部分信息: