Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >datax数据流转小试牛刀

datax数据流转小试牛刀

作者头像
AsiaYe
发布于 2020-03-12 08:10:58
发布于 2020-03-12 08:10:58
1.2K00
代码可运行
举报
文章被收录于专栏:DBA随笔DBA随笔
运行总次数:0
代码可运行
datax数据流转小试牛刀

最近在做MySQL向infobright的迁移工作,用的方法是shell脚本的方法。之前听说过有datax的方法也可以做数据流转,今天下班后,就试了试datax的方法,整个过程还是比较顺利的。记录一下。

01

datax介绍

Datax是阿里的一个开源项目,项目地址放在这里:

https://github.com/alibaba/DataX

它的主要用途是数据流转,是一个易购数据源离线同步工具,所谓的异构,就是指来源不同,晚上有张图画的比较好,截取一下大家看看:

它可以将各种来源不同的数据之间进行高效稳定的同步,现在在阿里内部被广泛使用。

数据流转的过程也很简单,画成图就是下面这样:

其中,

Reader:Reader为数据采集模块,负责采集数据源的数据,将数据发送给Framework。

Writer:Writer为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。

Framework:Framework用于连接reader和writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。

目前,datax已经有了全面的插件体系,主流的RDBMS数据库、NOSQL、大数据计算系统都已经接入,其他的介绍官方文档上介绍的比较全,这里就不再赘述了,仅仅提供一张图,供参考:

02

快速上手方法

1、下载

下载的时候,需要注意,不要下载datax的源码,而是在Gtihub界面上的:

Quick Start --->DataX下载地址

此处下载datax.tar.gz的编译好的包,这样,解压一下就能用。如下图:

2、安装

tar -zxvf datax.tar.gz -C /data/

即可。

目录如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root /data/datax]#ll
total 36
drwxr-xr-x 2 root root 4096 Mar  4 17:55 bin
drwxr-xr-x 2 root root 4096 Mar  4 17:55 conf
drwxr-xr-x 2 root root 4096 Mar  6 21:24 job
drwxr-xr-x 2 root root 4096 Mar  4 17:55 lib
drwxr-xr-x 4 root root 4096 Mar  6 10:28 log
drwxr-xr-x 4 root root 4096 Mar  6 10:28 log_perf
drwxr-xr-x 4 root root 4096 Mar  4 17:55 plugin
drwxr-xr-x 2 root root 4096 Mar  4 17:55 script
drwxr-xr-x 2 root root 4096 Mar  4 17:55 tmp

3、进入plugin,该目录下有reader和writer两个文件夹,其中,reader为数据的流出端,writer为数据的流入端。每个文件夹里面包含一些模板:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root /data/datax/plugin/reader]#ll
total 68
drwxr-xr-x 3 root root 4096 Mar  4 17:55 drdsreader
drwxr-xr-x 3 root root 4096 Mar  4 17:55 ftpreader
drwxr-xr-x 3 root root 4096 Mar  4 17:55 hbase094xreader
drwxr-xr-x 3 root root 4096 Mar  4 17:55 hbase11xreader
drwxr-xr-x 3 root root 4096 Mar  4 17:55 hdfsreader
drwxr-xr-x 3 root root 4096 Mar  4 17:55 mongodbreader
drwxr-xr-x 3 root root 4096 Mar  4 18:15 mysqlreader
drwxr-xr-x 3 root root 4096 Mar  4 17:55 odpsreader
drwxr-xr-x 3 root root 4096 Mar  4 17:55 oraclereader
drwxr-xr-x 3 root root 4096 Mar  4 17:55 ossreader
drwxr-xr-x 3 root root 4096 Mar  4 17:55 otsreader
drwxr-xr-x 3 root root 4096 Mar  4 17:55 otsstreamreader
drwxr-xr-x 3 root root 4096 Mar  4 17:55 postgresqlreader
drwxr-xr-x 3 root root 4096 Mar  4 17:55 rdbmsreader
drwxr-xr-x 3 root root 4096 Mar  4 17:55 sqlserverreader
drwxr-xr-x 3 root root 4096 Mar  4 17:55 streamreader
drwxr-xr-x 3 root root 4096 Mar  4 17:55 txtfilereader

这些模板里面如同名字前缀一样,是指代的某一类数据库的配置模板,打开一个mysqlread看看其中的文件plugin_job_template.json看看:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "name": "mysqlreader",
    "parameter": {
        "username": "",
        "password": "",
        "column": [],
        "connection": [
            {
            "jdbcUrl": [],
            "table": []
            }
        ],
        "where": ""
    }
}

这就是mysql作为数据流出端需要配置的流转任务文件。当然datax在github上对于每种reader都做了说明,路径如下:

以mysql的为例,就可以在这个路径下找到mysql作为reader插件的说明文档。内容太多,我这里不再一一列举,说下目录即可:

地址:

https://github.com/alibaba/DataX/blob/master/mysqlreader/doc/mysqlreader.md

其中给了一些配置样例,然后针对每种样例还有参数说明,算是比较详细了。

最后是使用的约束限制和问题排查案例,这里不再截图。

4、上手配置

我们以MySQL到MySQL的流转为例,读完了上面的参数介绍,可以在指定的/data/datax/job文件夹中配置一个流转的任务,他是一个指定的json文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root /data/datax/job]#ll
total 12
-rwxrwxrwx 1  501   20 1587 Nov 24  2017 job.json
-rwxr-xr-x 1 root root 1926 Mar  6 21:24 mysql_202_to_203.json

我的json文件名字叫mysql_202_to_203,其中

202、203代表IP地址:

xxx.xxx.xxx.202

xxx.xxx.xxx.203

内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "job": {
        "setting": {
            "speed": {
                 "channel": 3
            },
            "errorLimit": {
                "record": 0,
                "percentage": 0.02
            }
        },#content前的部分可以按照上面的方法配置,具体参数含义可自行查询
        "content": [
            {
                "reader": {#这个是reader的开始部分
                    "name": "mysqlreader",#名称
                    "parameter": {#数据流出端的参数
                        "username": "dba_yeyz",#流出端mysql的账号
                        "password": "dba_yeyz",#流出端mysql密码
                        "column": [#要流出的数据列,为什么没有表名?在后面。
                            "id",
                            "name"
                        ],
                        "splitPk": "id",#主键
                        "connection": [#连接信息
                            {
                                "table": [#表名
                                    "test"
                                ],
                                "jdbcUrl": [#连接信息,包含IP、port、db_name
                                       "jdbc:mysql://xxxxxxxx.203:4306/test"
                                ]
                            }
                        ]
                    }
                },
               "writer": {#writer插件
                    "name": "mysqlwriter",
                    "parameter": {
                        "writeMode":"insert",#写入模式,使用insert方法插入还是使用replace方法插入
                        "username":"dba_yeyz",
                        "password":"dba_yeyz",
                        "column":[
                                 "id",
                                 "name"
                                 ],
                        "preSql":["delete from test"],#执行插入前需要执行的SQL,清空表内容
                        "connection":[#writer端的连接信息
                            { 
                           "jdbcUrl":"jdbc:mysql://xxxxxxxx:4306/yeyztest",
                           "table":[
                                     "test"
                                   ]
                            }
                         ]
                    }
                }
            }
        ]
    }
}

5、仿造数据

在202上创建表,然后插入相关数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql>>insert into test values (1,'zhangsan'),(2,'lisi');
Query OK, 2 rows affected (0.01 sec)

在203上也创建相关表,然后插入数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql--dba_admin@127.0.0.1:yeyztest 21:25:33>>select * from test;         
+----+------+
| id | name |
+----+------+
|  2 | lisi |
+----+------+
1 row in set (0.00 sec)

6、运行脚本

./datax.py ../job/mysql_202_to_203.json

当然,你可以写绝对路径。

执行完毕后,可以看到打印了相关执行内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2020-03-06 21:24:52.454 [job-0] INFO  JobContainer - 
任务启动时刻                    : 2020-03-06 21:24:41
任务结束时刻                    : 2020-03-06 21:24:52
任务总计耗时                    :                 10s
任务平均流量                    :                1B/s
记录写入速度                    :              0rec/s
读出记录总数                    :                   2
读写失败总数                    :                   0

来看203的结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql--dba_admin@127.0.0.1:yeyztest 21:25:36>>select * from test;
+----+----------+
| id | name     |
+----+----------+
|  1 | zhangsan |
|  2 | lisi     |
+----+----------+
2 rows in set (0.00 sec)

结果和我们想象的一致,202到203的同步过程中,先使用我们配置的preSql删除了203的test表,然后再导入了202的数据。

至此,完成数据同步

当然这个只是全量同步方法,增量同步的时候,需要用到datax.py当中的参数-p来透传相关增量字段参数值到job.json文件中的变量中,job.json中的文件可以使用where参数,来确定需要同步表中的哪些符合条件的内容。

此处不予以展开,有需要可以私信我要相关代码。不过自己开发起来也不是很难,大家可以尝试尝试。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
大数据平台 - 数据采集及治理
ETL基本上就是数据采集的代表,包括数据的提取(Extract)、转换(Transform)和加载(Load)。数据源是整个大数据平台的上游,数据采集是数据源与数仓之间的管道。在采集过程中针对业务场景对数据进行治理,完成数据清洗工作。
端碗吹水
2020/11/16
3.8K0
大数据平台 - 数据采集及治理
如何基于DataX做增量数据同步?
一、DataX数据同步原理二、全量同步实现三、增量同步的思考四、增量同步实现方案五、关于DataX高可用参考
叔牙
2023/06/21
6.1K0
如何基于DataX做增量数据同步?
DataX 实现 MySQL 数据,高效同步
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/07/12
4K0
DataX 实现 MySQL 数据,高效同步
datax(25):插件加载原理
大目录:xxx\DataX\target\datax\datax\plugin下分2个reader和writer目录,下面以mysql为例
全栈程序员站长
2022/08/27
1.1K0
datax(25):插件加载原理
异构数据源同步之数据同步 → DataX 使用细节
里面讲到了 DataX 的概况、框架设计、核心架构、插件体系、核心优势,由阿里出品,并在阿里内部被广泛使用,其性能、稳定都是经过了严格考验的。得益于它的框架设计
青石路
2024/06/05
2.2K0
异构数据源同步之数据同步 → DataX 使用细节
开源DataX集成可视化项目Datax-Web的使用
1、"调度中心OnLine:"右侧显示在线的"调度中心"列表, 任务执行结束后, 将会以failover的模式进行回调调度中心通知执行结果, 避免回调的单点风险;
星哥玩云
2023/04/01
9.4K0
开源DataX集成可视化项目Datax-Web的使用
【Spark数仓项目】需求八:MySQL的DataX全量导入和增量导入Hive
本需求将模拟从MySQL中向Hive数仓中导入数据,数据以时间分区。测试两种导入场景,一种是将数据全量导入,即包含所有时间分区;另一种是每天运行调度,仅导入当天时间分区中的用户数据。
火之高兴
2024/07/25
3530
java整合datax 全网最详细的教程
在resource目录下新建一个datax目录,在datax目录下新建test.json文件。
java后端指南
2021/11/01
4.1K4
java整合datax 全网最详细的教程
dataX是阿里开源的离线数据库同步工具的使用
DataX 是阿里开源的一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。
凯哥Java
2022/12/16
1.4K0
dataX是阿里开源的离线数据库同步工具的使用
大数据-数据源离线同步工具DataX的使用
DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。
码客说
2022/10/04
2K0
大数据-数据源离线同步工具DataX的使用
DataX数据同步实战案例
DataX 是阿里云DataWorks数据集成的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS 等各种异构数据源之间高效的数据同步功能。
chimchim
2022/11/13
2.3K0
DataX数据同步实战案例
datax工具在TBDS上同步数据方法
因为datax工具本身无法传入认证参数,所以若想在TBDS上使用datax同步数据则需要关闭相应的服务认证。
袁宋
2020/12/07
1.6K0
定期全备redis
首先申明我的观点,redis本身只是缓存,不适合作为数据库使用,有说微博就是拿redis当DB用的,自己去证实吧。如果非要拿redis当数据库,就不得不考虑数据丢失问题,这里讨论两种常见的可能造成数据丢失的情况。
用户1148526
2020/03/18
7400
datax实现mysql数据同步
DataX 是阿里内部广泛使用的离线数据同步工具/平台,可以实现包括 MySQL、Oracle、HDFS、Hive、OceanBase、HBase、OTS、ODPS 等各种异构数据源之间高效的数据同步功能。DataX采用了框架 + 插件 的模式,目前已开源,代码托管在github
全栈程序员站长
2022/08/30
4.5K0
datax实现mysql数据同步
pdflatex环境部署步骤Docker的基本操作
在各大平台的官方源里面应该都会有提供docker容器,因此这里我们也不过多的赘述。
不知名站长
2021/04/03
7720
pdflatex环境部署步骤Docker的基本操作
基于Docker的MindSpore安装与使用基础介绍
MindSpore是一款新一代AI开源计算框架,其特色在于:创新编程范式,AI科学家和工程师更易使用,便于开放式创新;该计算框架可满足终端、边缘计算、云全场景需求,能更好保护数据隐私;可开源,形成广阔应用生态。MindSpore的软件架构如下图所示:
DechinPhy
2021/05/21
1.6K0
datax详细介绍及使用
DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、SQL Server、Oracle、PostgreSQL、HDFS、Hive、HBase、OTS、ODPS 等各种异构数据源之间高效的数据同步功能。
Maynor
2022/03/11
12.4K0
datax详细介绍及使用
数据源管理 | 基于DataX组件,同步数据和源码分析
DataX是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。
知了一笑
2020/05/13
1.3K0
Elasticsearch索引迁移的四种方式
本文主要讲解Elasticsearch下实现索引迁移的几种方式。 #0、引言 将ES中的索引拷贝到其他ES中,或者将ES整体迁移,研究发现有两个开源的工具:elaticserch-dump和 Elasticsearch-Exporter。 除此之外,logstash在索引同步、迁移方面的作用也很大。 两工具及logstash实现迁移的介绍、安装、使用、验证效果等展示如下:
全栈程序员站长
2022/09/02
2.2K0
使用 DataX 实现 MySQL 数据的高效同步
本周赠书《性能之巅》第2版 我们公司有个项目的数据量高达五千万,但是因为报表那块数据不太准确,业务库和报表库又是跨库操作,所以并不能使用 SQL 来进行同步。当时的打算是通过 mysqldump 或者存储的方式来进行同步,但是尝试后发现这些方案都不切实际: mysqldump:不仅备份需要时间,同步也需要时间,而且在备份的过程,可能还会有数据产出(也就是说同步等于没同步) 存储方式:这个效率太慢了,要是数据量少还好,我们使用这个方式的时候,三个小时才同步两千条数据… 后面在网上查看后,发现 DataX 这
程序猿DD
2022/07/18
4.1K0
使用 DataX 实现 MySQL 数据的高效同步
相关推荐
大数据平台 - 数据采集及治理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档