datax3.0的使用及datax-web可视化工具

datax3.0在linux下配置并部署datax-web可视化工具教程

转载大佬博文:[https://blog.csdn.net/yuanzelin8/article/details/124386639](https://blog.csdn.net/yuanzelin8/article/details/124386639)

本文章主是把线上mysql同步到线下mysql中

DataX下载地址

datax源码地址

一、DataX 简介
DataX 是阿里云 DataWorks 数据集成 的开源版本,主要就是用于实现数据间的离线同步。 DataX 致力于实现包括关系型数据库(MySQL、Oracle 等)、HDFS、Hive、ODPS、HBase、FTP 等 各种异构数据源(即不同的数据库) 间稳定高效的数据同步功能。

在这里插入图片描述
为了 解决异构数据源同步问题,DataX 将复杂的网状同步链路变成了星型数据链路,DataX 作为中间传输载体负责连接各种数据源;
当需要接入一个新的数据源时,只需要将此数据源对接到 DataX,便能跟已有的数据源作为无缝数据同步。
1.DataX3.0 框架设计
DataX 采用 Framework + Plugin 架构,将数据源读取和写入抽象称为 Reader/Writer 插件,纳入到整个同步框架中。

在这里插入图片描述  


角色    作用

2022-04-24 17:21:04.845 [job-0] INFO  JobContainer - 
任务启动时刻                    : 2022-04-24 17:20:54
任务结束时刻                    : 2022-04-24 17:21:04
任务总计耗时                    :                 10s
任务平均流量                    :          253.91KB/s
记录写入速度                    :          10000rec/s
读出记录总数                    :              100000
读写失败总数                    :                   0


2.DataX3.0 核心架构
DataX 完成单个数据同步的作业,我们称为 Job,DataX 接收到一个 Job 后,将启动一个进程来完成整个作业同步过程。DataX Job 模块是单个作业的中枢管理节点,承担了数据清理、子任务切分、TaskGroup 管理等功能。

在这里插入图片描述
DataX Job 启动后,会根据不同源端的切分策略,将 Job 切分成多个小的 Task (子任务),以便于并发执行。
接着 DataX Job 会调用 Scheduler 模块,根据配置的并发数量,将拆分成的 Task 重新组合,组装成 TaskGroup(任务组)
每一个 Task 都由 TaskGroup 负责启动,Task 启动后,会固定启动 Reader --> Channel --> Writer 线程来完成任务同步工作。
DataX 作业运行启动后,Job 会对 TaskGroup 进行监控操作,等待所有 TaskGroup 完成后,Job 便会成功退出(异常退出时 值非 0)


DataX 调度过程:

首先 DataX Job 模块会根据分库分表切分成若干个 Task,然后根据用户配置并发数,来计算需要分配多少个 TaskGroup;
计算过程:Task / Channel = TaskGroup,最后由 TaskGroup 根据分配好的并发数来运行 Task(任务)


二、使用 DataX 实现数据同步
准备工作:

JDK(1.8 以上,推荐 1.8)
Python(2,3 版本都可以)
Apache Maven 3.x(Compile DataX)(手动打包使用,使用 tar 包方式不需要安装)

主机名操作系统IP 地址软件包
线上210CentOS 7.9182.169.212.210
线下192CentOS 7.9192.168.88.192jdk-8u181-linux-x64.tar.gz datax.tar.gz


安装 JDK:下载地址(需要创建 Oracle 账号)

下载jdk解压到/usr/local/java/


    
    
  1. #解压jdk到指定目录
  2. tar -zxvf jdk-8u161-linux-x64.tar.gz -C /usr/local/java/

 

配置jdk环境变量

vi /etc/profile


    
    
  1. export JAVA_HOME = /usr /local /java /jdk 1.8.0_ 161
  2. export PATH =$JAVA_HOME /bin:$PATH
  3. export CLASSPATH =.:$JAVA_HOME /lib /dt.jar:$JAVA_HOME /lib /tools.jar
  4. export CANAL_SERVER_HOME = /usr /local /canal /deployer
  5. export PATH =$CANAL_SERVER_HOME /bin:$PATH
  6. [root@ 192 ~]# source /etc /profile
  7. [root@ 192 ~]# java -version
  8. java version "1.8.0_161"
  9. Java(TM) SE Runtime Environment (build 1.8.0_ 161-b 12)
  10. Java HotSpot(TM) 64- Bit Server VM (build 25.161-b 12, mixed mode)
  11. [root@ 192 ~]# javac #能显示java信息表示安装jdk按装成功

因为 CentOS 7 上自带 Python 2.7 的软件包,所以不需要进行安装

1.Linux 上安装 DataX 软件


    
    
  1. [root@ 192 ~]# wget http: / /datax-opensource.oss-cn-hangzhou.aliyuncs.com /datax.tar.gz
  2. [root@ 192 ~]# tar zxf datax.tar.gz -C /usr /local /
  3. [root@ 192 ~]# rm - rf /usr /local /datax /plugin / * /._ * # 需要删除隐藏文件 (重要)
  • 当未删除时,可能会输出:[/usr/local/datax/plugin/reader/._drdsreader/plugin.json] 不存在. 请检查您的配置文件.

验证: 


    
    
  1. [root@ 192 ~]# cd /usr /local /datax /bin
  2. [root@ 192 ~]# python datax.py .. /job /job.json # 用来验证是否安装成功

 输出:


    
    
  1. 2022- 04- 24 17: 21: 04.845 [job- 0] INFO JobContainer -
  2. 任务启动时刻 : 2022- 04- 24 17: 20: 54
  3. 任务结束时刻 : 2022- 04- 24 17: 21: 04
  4. 任务总计耗时 : 10s
  5. 任务平均流量 : 253.91KB /s
  6. 记录写入速度 : 10000rec /s
  7. 读出记录总数 : 100000
  8. 读写失败总数 : 0

 能显示出来表示验证成功

2.通过 DataX 实 MySQL 数据同步

生成 MySQL 到 MySQL 同步的模板: 


    
    
  1. #输出mysql配置模版
  2. [root@ 192 bin]# python /usr /local /datax /bin /datax.py -r mysqlreader -w mysqlwriter > /usr /local /datax /job /mysql 2mysql.json
  3. #根据模板编写 mysql 2mysql.json文件
  4. {
  5. "job": {
  6. "content": [
  7. {
  8. "reader": {
  9. "name": "mysqlreader",
  10. "parameter": {
  11. "column": [ "id", "name"], # "*"表示所有字段
  12. "connection": [
  13. {
  14. "jdbcUrl": [ "jdbc:mysql://x.x.x.210:3306/mytest"],
  15. "table": [ "user"]
  16. }
  17. ],
  18. "password": "root",
  19. "username": "root"
  20. }
  21. },
  22. "writer": {
  23. "name": "mysqlwriter",
  24. "parameter": {
  25. "column": [ "id", "name"],
  26. "connection": [
  27. {
  28. "jdbcUrl": "jdbc:mysql://192.168.88.192:3306/mytest",
  29. "table": [ "user"]
  30. }
  31. ],
  32. "password": "root",
  33. "username": "root",
  34. "writeMode": "insert"
  35. }
  36. }
  37. }
  38. ],
  39. "setting": {
  40. "speed": {
  41. "channel": "6"
  42. }
  43. }
  44. }
  45. }

验证: 


    
    
  1. [root@ 192 job]# python /usr /local /datax /bin /datax.py mysql 2mysql.json
  2. 2022- 04- 24 17: 39: 03.445 [job- 0] INFO JobContainer -
  3. 任务启动时刻 : 2022- 04- 24 17: 38: 49
  4. 任务结束时刻 : 2022- 04- 24 17: 39: 03
  5. 任务总计耗时 : 14s
  6. 任务平均流量 : 0B /s
  7. 记录写入速度 : 0rec /s
  8. 读出记录总数 : 3
  9. 读写失败总数 : 0

三、DataX-WEB 安装部署

1.IDEA编译打包
下载链接:https://pan.baidu.com/s/13a8nIpz6FL8y4fdE94trjQ
提取码:data
备注:官方提供的版本tar版本包
https://pan.baidu.com/s/13yoqhGpD00I82K4lOYtQhg 提取码:cpsk

2.解压安装包
在选定的安装目录,解压安装包

[root@192 ~]# tar -zxvf datax-web-2.1.2.tar.gz -C /usr/local/dataxweb
    
    

3.登录msyql建库

为接下来一键安装部署准备,这里我建的库是dataxweb(自己定义就好,前后保持一致)

mysql> create database dataxweb;

    
    

4.执行一键安装脚本
进入解压后的目录,找到bin目录下面的install.sh文件,如果选择交互式的安装,则直接执行 


    
    
  1. [root@ 192 dataxweb]# cd bin /
  2. [root@ 192 bin]# pwd
  3. /usr /local /dataxweb /bin
  4. [root@ 192 bin]# . /install.sh

 然后按照提示操作即可。包含了数据库初始化,如果你的服务上安装有mysql命令,在执行安装脚本的过程中则会出现以下提醒:


    
    
  1. Scan out mysql command, so begin to initalize the database
  2. Do you want to initalize database with sql: [{INSTALL_PATH} /bin /db /datax-web.sql]? (Y /N)y
  3. Please input the db host( default: 127.0.0.1):
  4. Please input the db port( default: 3306):
  5. Please input the db username( default: root):
  6. Please input the db password( default: ): root
  7. Please input the db name( default: dataxweb)

按照提示输入数据库地址,端口号,用户名,密码以及数据库名称,大部分情况下即可快速完成初始化。

 如果服务上并没有安装mysql命令,则可以取用目录下/bin/db/datax-web.sql脚本去手动执行,完成后修改相关配置文件


    
    
  1. vi modules /datax-admin /conf /bootstrap.properties
  2. #Database
  3. DB_HOST = 127.0.0.1
  4. DB_PORT = 3306
  5. DB_USERNAME =root
  6. DB_PASSWORD =root
  7. DB_DATABASE =dataxweb

按照具体情况配置对应的值即可。
在交互模式下,对各个模块的package压缩包的解压以及configure配置脚本的调用,都会请求用户确认,可根据提示查看是否安装成功,如果没有安装成功,可以重复尝试; 如果不想使用交互模式,跳过确认过程,则执行以下命令安装

./bin/install.sh --force

    
    

4.其他配置

4.1邮件服务

在项目目录:modules/datax-admin/bin/env.properties 配置邮件服务(可跳过)


    
    
  1. MAIL_USERNAME = ""
  2. MAIL_PASSWORD = ""

此文件中包括一些默认配置参数,例如:server.port,具体请查看文件。

4.2指定PYTHON_PATH的路径


    
    
  1. vim modules /datax-executor /bin /env.properties
  2. ### 执行datax的python脚本地址
  3. PYTHON_PATH = /usr /local /datax /bin /datax.py
  4. ### 保持和datax-admin服务的端口一致;默认是 9527,如果没改datax-admin的端口,可以忽略
  5. DATAX_ADMIN_PORT =

 此文件中包括一些默认配置参数,例如:executor.port,json.path,data.path等,具体请查看文件。

5.启动服务

5.1一键启动所有服务


    
    
  1. [root@ 192 dataxweb]# cd /usr /local /dataxweb /
  2. [root@ 192 dataxweb]# . /bin /start-all.sh

中途可能发生部分模块启动失败或者卡住,可以退出重复执行,如果需要改变某一模块服务端口号,则:

vi ./modules/{module_name}/bin/env.properties

    
    

 找到SERVER_PORT配置项,改变它的值即可。 当然也可以单一地启动某一模块服务:

./bin/start.sh -m {module_name}

    
    

 module_name可以为datax-admin或datax-executor

5.2一键停止所有服务 


    
    
  1. [root@ 192 dataxweb]# cd /usr /local /dataxweb /
  2. [root@ 192 dataxweb]# . /bin /stop-all.sh

 当然也可以单一地停止某一模块服务:

./bin/stop.sh -m {module_name}

    
    

5.3查看服务(注意!注意!)

在Linux环境下使用JPS命令,查看是否出现DataXAdminApplication和DataXExecutorApplication进程,如果存在这表示项目运行成功


    
    
  1. 如果项目启动失败,请检查启动日志:
  2. modules /datax-admin /bin /console.out
  3. 或者
  4. modules /datax-executor /bin /console.out

四、DataX-WEB 运行

1.前端界面

部署完成后,在浏览器中输入 http://ip:port/index.html 就可以访问对应的主界面(ip为datax-admin部署所在服务器ip,port为为datax-admin 指定的运行端口9527)

输入用户名 admin 密码 123456 就可以直接访问系统 

2.datax-web API

datax-web部署成功后,可以了解datax-web API相关内容,网址: http://ip:port/doc.html

五、DataX-WEB 运行日志
部署完成之后,在modules/对应的项目/data/applogs下(用户也可以自己指定日志,修改application.yml 中的logpath地址即可),用户可以根据此日志跟踪项目实际启动情况

如果执行器启动比admin快,执行器会连接失败,日志报"拒绝连接"的错误,一般是先启动admin,再启动executor,30秒之后会重连,如果成功请忽略这个异常。

六、DataX-WEB 实操

1.查看执行器

查看web界面是否有注册成功的执行器,另外执行器可以根据需要改名称。

 2.创建项目

 

 3.任务模板构建

3.2路由策略:当执行器集群部署时,提供丰富的路由策略,包括:
FIRST(第一个):固定选择第一个机器;
LAST(最后一个):固定选择最后一个机器;
ROUND(轮询):依次分配任务;
RANDOM(随机):随机选择在线的机器;
CONSISTENT_HASH(一致性HASH):每个任务按照Hash算法固定选择某一台机器,且所有任务均匀散列在不同机器上。
LEAST_FREQUENTLY_USED(最不经常使用):使用频率最低的机器优先被选举;
LEAST_RECENTLY_USED(最近最久未使用):最久为使用的机器优先被选举;
FAILOVER(故障转移):按照顺序依次进行心跳检测,第一个心跳检测成功的机器选定为目标执行器并发起调度;
BUSYOVER(忙碌转移):按照顺序依次进行空闲检测,第一个空闲检测成功的机器选定为目标执行器并发起调度;
阻塞处理策略:调度过于密集执行器来不及处理时的处理策略;
- 单机串行:调度请求进入单机执行器后,调度请求进入FIFO队列并以串行方式运行;
- 丢弃后续调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,本次请求将会被丢弃并标记为失败;
- 覆盖之前调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,将会终止运行中的调度任务并清空队列,然后运行本地调度任务;
增量增新建议将阻塞策略设置为丢弃后续调度或者单机串行
设置单机串行时应该注意合理设置重试次数(失败重试的次数*每次执行时间<任务的调度周期),重试的次数如果设置的过多会导致数据重复,例如任务30秒执行一次,每次执行时间需要20秒,设置重试三次,如果任务失败了,第一个重试的时间段为1577755680-1577756680,重试任务没结束,新任务又开启,那新任务的时间段会是1577755680-1577758680

3.3任务类型
先选择DataX任务,后续配置完详细任务后可以更改3.4其它
可以根据需求填写

3.4其它

4.数据源配置

根据不同数据源,配置参数。

 

 

 5.任务构建

构建reader

 这里没按上面操作生成映射,直接使用任务管理->添加手动配置


    
    
  1. {
  2. "job": {
  3. "content": [
  4. {
  5. "reader": {
  6. "name": "mysqlreader",
  7. "parameter": {
  8. "username": "root",
  9. "password": "root",
  10. "column": [
  11. "*"
  12. ],
  13. "where": " save_time >= FROM_UNIXTIME(${lastTime}) and save_time < FROM_UNIXTIME(${currentTime})",
  14. "splitPk": "id",
  15. "connection": [
  16. {
  17. "table": [
  18. "uc_op_amazon_api_store_download"
  19. ],
  20. "jdbcUrl": [
  21. "jdbc:mysql://x.x.x.210:3306/test_system"
  22. ]
  23. }
  24. ]
  25. }
  26. },
  27. "writer": {
  28. "name": "mysqlwriter",
  29. "parameter": {
  30. "writeMode": "insert",
  31. "username": "root",
  32. "password": "root",
  33. "column": [
  34. "*"
  35. ],
  36. "connection": [
  37. {
  38. "jdbcUrl": "jdbc:mysql://192.168.88.192:3306/mytest?useUnicode=true&characterEncoding=utf8",
  39. "table": [
  40. "uc_op_amazon_api_store_download"
  41. ]
  42. }
  43. ]
  44. }
  45. }
  46. }
  47. ],
  48. "setting": {
  49. "speed": {
  50. "channel": 6
  51. }
  52. }
  53. }
  54. }

    
    
  1. -DstartId = '%s' -DendId = '%s'
  2. # 表名
  3. uc_op_business_ reports
  4. #主键
  5. id
  6. #id自增配置条件

 "where": " id>= ${startId} and id<= ${endId}",

入库前 清表

"preSql": [
              "truncate table uc_op_dynnamic_ad_api_day"
            ],

 

问题1:

配置远程数据源过程中出现异常,提示远程210不能连接

Code:[MYSQLErrCode-02], Description:[数据库服务的IP地址或者Port错误,请检查填写的IP地址和Port或者联系DBA确认IP地址和Port是否正确。如果是同步中心用户请联系DBA确认idb上录入的IP和PORT信息和数据库的当前实际信息是一致的]. - 具体错误信息为:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet successfully received from the server was 174 milliseconds ago. The last packet sent successfully to the server was 174 milliseconds ago. 

把./datax-admin/lib/mysql-connector-java-5.1.47.jar替换成mysql-connector-java-5.1.49.jar好了

问题2:

2022-04-28 16:00:08.872 [New I/O server worker #1-3] ERROR c.a.otter.canal.server.netty.handler.SessionHandler - something goes wrong with channel:[id: 0x31df79de, /211.103.136.38:44900 => /x.x.x.210:11111], exception=java.io.IOException: Connection reset by peer
    at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
    at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)
    at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
    at sun.nio.ch.IOUtil.read(IOUtil.java:192)
    at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)
    at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:322)
    at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:281)
    at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:201)
    at org.jboss.netty.util.internal.IoWorkerRunnable.run(IoWorkerRunnable.java:46)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748) 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DataX Web是在DataX之上开发的分布式数据同步工,提供简单易用的操作界面,降低用户使用DataX的学习成本,缩短任务配置时间,避免配置过程中出错。用户可通过页面选择数据源即可创建数据同步任务,RDBMS数据源可批量创建数据同步任务,支持实时查看数据同步进度及日志并提供终止同步功能,集成并二次开发xxl-job可根据时间、自增主键增量同步数据。 任务"执行器"支持集群部署,支持执行器多节点路由策略选择,支持超时控制、失败重试、失败告警、任务依赖,执行器CPU.内存.负载的监控等等。后续还将提供更多的数据源支持、数据转换UDF、表结构同步、数据同步血缘等更为复杂的业务场景。 DataX Web安装环境: Language: Java 8(jdk版本建议1.8.201以上) Python2.7(支持Python3需要修改替换datax/bin下面的三个python文件,替换文件在doc/datax-web/datax-python3下) Environment: MacOS, Windows,Linux Database: Mysql5.7 DataX Web功能特点: 1、通过Web构建DataX Json; 2、DataX Json保存在数据库中,方便任务的迁移,管理; 3、Web实时查看抽取日志,类似Jenkins的日志控制台输出功能; 4、DataX运行记录展示,可页面操作停止DataX作业; 5、支持DataX定时任务,支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效; 6、调度采用中心式设计,支持集群部署; 7、任务分布式执行,任务"执行器"支持集群部署; 8、执行器会周期性自动注册任务, 调度中心将会自动发现注册的任务并触发执行; 9、路由策略:执行器集群部署时提供丰富的路由策略,包括:第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移、忙碌转移等; 10、阻塞处理策略:调度过于密集执行器来不及处理时的处理策略,策略包括:单机串行(默认)、丢弃后续调度、覆盖之前调度; 11、任务超时控制:支持自定义任务超时时间,任务运行超时将会主动中断任务; 12、任务失败重试:支持自定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试; 13、任务失败告警;默认提供邮件方式失败告警,同时预留扩展接口,可方便的扩展短信、钉钉等告警方式; 14、用户管理:支持在线管理系统用户,存在管理员、普通用户两种角色; 15、任务依赖:支持配置子任务依赖,当父任务执行结束且执行成功后将会主动触发一次子任务的执行, 多个子任务用逗号分隔; 16、运行报表:支持实时查看运行数据,以及调度报表,如调度日期分布图,调度成功分布图等; 17、指定增量字段,配置定时任务自动获取每次的数据区间,任务失败重试,保证数据安全; 18、页面可配置DataX启动JVM参数; 19、数据源配置成功后添加手动测试功能; 20、可以对常用任务进行配置模板,在构建完JSON之后可选择关联模板创建任务; 21、jdbc添加hive数据源支持,可在构建JSON页面选择数据源生成column信息并简化配置; 22、优先通过环境变量获取DataX文件目录,集群部署时不用指定JSON及日志目录; 23、通过动态参数配置指定hive分区,也可以配合增量实现增量数据动态插入分区; 24、任务类型由原来DataX任务扩展到Shell任务、Python任务、PowerShell任务; 25、添加HBase数据源支持,JSON构建可通过HBase数据源获取hbaseConfig,column; 26、添加MongoDB数据源支持,用户仅需要选择collectionName即可完成json构建; 27、添加执行器CPU、内存、负载的监控页面; 28、添加24类插件DataX JSON配置样例 29、公共字段(创建时间,创建人,修改时间,修改者)插入或更新时自动填充 30、对swagger接口进行token验证 31、任务增加超时时间,对超时任务kill datax进程,可配合重试策略避免网络问题导致的datax卡死。 32、添加项目管理模块,可对任务分类管理; 33、对RDBMS数据源增加批量任务创建功能,选择数据源,表即可根据模板批量生成DataX同步任务; 34、JSON构建增加ClickHouse数据源支持; 35、执行器CPU.内存.负载的监控页面图形化; 36、RDBMS数据源增量抽取增加主键自增方式并优化页面参数配置; 37、更换MongoDB数据源连接方式,重构HBase数据源JSON构建模块; 38、脚本类型任务增加停止功能; 39、rdbms json构建增加postSql,并支持构建多个preSq
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值