DataX-web将mysql中的业务数据导入到HDFS中进行存储,并映射到Hive表中

问题描述

如下是我遇到的问题:通过截图展示部分错误信息

 


原因分析:

通过查看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确认该数据库的连接信息是否正确。

通过检查以上可能出现的错误:

  1. 通过验证,也不是数据库的用户名和密码错误,并且数据库中是存在对应的数据库的,已不是没有对应数据库的问题。
  2. 配置的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 

  1. 通过查看DataX-web安装路径下的执行器的日志发现如下问题:

  2. 发现上述问题后,通过查阅官方资料等信息,终于直到问题所在
  3. 读取mysql中的数据是通过JDBC连接驱动进行读取的,因此需要使用对应的jar包依赖
  4. 原来是由于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

最后重新执行失败的任务,就可以成功了。

以下是我执行成功任务成功的部分信息:

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
DataX 是阿里巴巴集团开源的一款数据同步工具,它支持多种数据源之间的同步,包括 HiveMySQL、Oracle 等常见关系型数据库以及 HDFS、FTP 等非关系型数据源。下面介绍如何使用 DataXHiveMySQL 的表互导。 首先需要在本地和远程服务器上安装好 DataX。然后创建一个名为 job.json 的配置文件,内容如下: ``` { "job": { "content": [ { "reader": { "name": "hdfswriter", "parameter": { "path": "/user/hive/warehouse/myhive.db/myhive_table", "defaultFS": "hdfs://localhost:9000", "fileType": "orc", "column": [ "col1", "col2", "col3" ] } }, "writer": { "name": "mysqlwriter", "parameter": { "url": "jdbc:mysql://localhost:3306/test", "username": "root", "password": "123456", "table": "mysql_table", "column": [ "col1", "col2", "col3" ] } } } ], "setting": { "speed": { "channel": "3" } } } } ``` 该配置文件定义了一个数据同步任务,将 Hive 的 myhive_table 表导入MySQL mysql_table 表中。其hdfswriter 和 mysqlwriter 分别表示数据源和目标源的类型,parameter 参数定义了数据源和目标源的详细信息。column 参数定义了需要同步的列。 执行以下命令启动 DataX 任务: ``` python datax.py job.json ``` 该命令会按照配置文件的定义开始数据同步任务。在数据量较大的情况下,可以通过修改 job.json 的 speed 参数来调整数据同步的速度,以避免对源和目标服务器的负载过大。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

habit_joker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值