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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
openssl生成证书和公私钥_openssl查看证书信息
生成的文件:server_rsa_private.pem、server.csr、server_rsa_private.pem.unsecure。
全栈程序员站长
2022/11/05
2K0
生成自签名ssl证书
查看证书信息命令 openssl x509 -in myCA.crt -noout -text
Linux运维技术之路
2022/06/07
2.7K0
linux下生成https的crt和key证书
Csr 是证书请求文件,用于申请证书。在制作csr文件的时,必须使用自己的私钥来签署申,还可以设定一个密钥。
Sindsun
2019/12/11
7.2K0
PKI - 借助Nginx实现_客户端使用CA根证书签发客户端证书
通过执行这两个命令,您可以生成一个自签名的根证书,用于签发其他证书,如服务器证书、客户端证书等。
小小工匠
2024/05/26
3340
PKI - 借助Nginx实现_客户端使用CA根证书签发客户端证书
SSL 证书生成
生成CA私钥(.key)–>生成CA证书请求(.csr)–>自签名得到根证书(.crt)(CA给自已颁发的证书)。
为为为什么
2022/08/06
2.3K0
openssl 如何生成自签证书
CSR 是 Certificate Signing Request 的缩写,即证书签名请求,这不是证书,只是包含申请证书的基本信息。生成证书时要把这个提交给权威的证书颁发机构,颁发机构审核通过之后,再根据这些申请信息生成相应的证书。
BUG弄潮儿
2022/06/30
1.1K0
使用 openssl 生成证书(含openssl详解)
openssl 是目前最流行的 SSL 密码库工具,其提供了一个通用、健壮、功能完备的工具套件,用以支持SSL/TLS 协议的实现。 官网:https://www.openssl.org/source/
菲宇
2019/06/12
17.5K0
使用 openssl 生成证书(含openssl详解)
二进制安装k8s集群(2)-制作ssl证书
在上一篇文章里我们大致介绍了安装 k8s集群需要安装哪些组件以及我们的环境,在这篇文章里我们主要介绍制作ssl证书,我们以制作docker server和docker client证书为例。后面集群安装还需要很多证书,例如etcd,kube-apiserver,kubelet,harbor,kube-dashboard,nginx-ingress,tiller等等,都可以以这里作为参考。另外再额外说一下,我们后面安装docker开启了docker的tcp访问,也就是说可以远程连接操作docker,并且开启双向ssl client auth,所以在这里制作docker的server和client证书。默认docker client和docker server是通过unix sock通讯的(在同一台机器),在实际环境中要根据自己需要来决定是否开启tcp通讯。
TA码字
2020/04/01
9910
二进制安装k8s集群(2)-制作ssl证书
OpenSSL - 利用OpenSSL自签证书和CA颁发证书
秘钥操作 这个命令会生成一个1024/2048位的密钥,包含私钥和公钥。 openssl genrsa -out private.key 1024/2038                     (with out password protected)    openssl genrsa -des3 -out private.key 1024/2048    (password protected) 这个命令可以利用private.key文件生成公钥。 openssl rsa -in private.k
Aichen
2018/05/18
6.8K0
使用OpenSSL创建CA和申请证书
OpenSSL是一种加密工具套件,可实现安全套接字层(SSL v2 / v3)和传输层安全性(TLS v1)网络协议以及它们所需的相关加密标准。
星哥玩云
2022/07/31
2.8K0
使用OpenSSL创建CA和申请证书
Linux下制作HTTPS证书
openssl genrsa -out keys/RootCA.key 2048
Learning_斌
2019/09/05
6.3K0
制作PFX证书
C:\Users\wood>openssl genrsa -des3 -out root.key Generating RSA private key, 2048 bit long modulus …………………………………………………………….+++ .+++ e is 65537 (0x10001) Enter pass phrase for root.key: Verifying – Enter pass phrase for root.key:
全栈程序员站长
2022/06/26
1.3K0
openssl 证书生成
golang 1.15+版本上,用 gRPC通过TLS实现数据传输加密时,会报错证书的问题
ruochen
2021/12/06
1.7K0
利用Openssl生成证书
生成private key openssl genrsa -des3 -out ca.key 2048
全栈程序员站长
2022/10/02
6970
利用Openssl生成证书
自签名SSL证书的创建与管理
创建自签名根根证书过程:生成CA私钥(.key)-->生成CA证书请求(.csr)-->自签名得到根证书(.crt)(CA给自已颁发的证书)
行者深蓝
2024/07/14
7600
本地站点开启https
本文这里要说的是如何在本地环境搭建 https,至于说有什么用,假如你找到这了, 就说明你已经用到了. Chrome NET::ERR_CERT_COMMON_NAME_INVALID
chuchur
2022/10/25
9360
本地站点开启https
Ssl证书自动续签
生成的证书放在了/root/.acme.sh/plyx.site目录,因为这是 acme.sh 脚本的内部使用目录,而且目录结构可能会变化,所以我们不能让 Nginx 的配置文件直接读取该目录下的证书文件。
mikelLam
2022/10/31
1.5K0
k8s实践(8)--ssl安全认证配置
在一个安全的内网环境中, Kubernetes的各个组件与Master之间可以通过apiserver的非安全端口http://apiserver:8080进行访问。但如果apiserver需要对外提供服务,或者集群中的某些容器也需要访问apiserver以获取集群中的某些信息,则更安全的做法是启用HTTPS安全机制。Kubernetes提供了基于CA签名的双向数字证书认证方式和简单的基于HTTP BASE或TOKEN的认证方式,其中CA证书方式的安全性最高。本节先介绍以CA证书的方式配置Kubernetes集群,要求Master上的kube-apiserver.kube-controller-manager. kube-scheduler进程及各Node上的kubelet, kube-proxy进程进行CA签名双向数字证书安全设置
黄规速
2022/04/14
3.3K0
前后端都用得上的 Nginx 日常使用经验
最基本组成:一个 server 节点一个域名配置,要添加其他配置添加 server 节点即可
易墨
2023/11/04
1.5K0
前后端都用得上的 Nginx 日常使用经验
openssl创建CA、申请证书及其给web服务颁发证书
一、创建私有的CA 1)查看openssl的配置文件:/etc/pki/tls/openssl.cnf 2)创建所需的文件 touch /etc/pki/CA/index.txt echo 01
小小科
2018/05/04
2.3K0
openssl创建CA、申请证书及其给web服务颁发证书
相关推荐
openssl生成证书和公私钥_openssl查看证书信息
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验