张小白DataX踩坑记(一)

举报
张辉 发表于 2022/02/13 20:27:19 2022/02/13
【摘要】 记录三段不愉快的数据库迁移经历。

Alibaba DataX、Pentaho Data Integration(Kettle)、Apache Sqoop、Oracle Golden Gate、Alibaba Canel是目前流行的数据库迁移工具,它们的能力在于异构数据库之间的数据同步。在实际业务中,往往一类业务系统产生的数据,需要传递给下游系统(如数据集市、数据仓库,或其他应用系统)。数据库迁移工具就起到这样的桥梁作用。

Alibaba DataX是马爸爸推出的软件,可以实现MySQL、Oracle、OceanBase、SqlServer、Postgres、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS等数据库之间的数据同步。代码仓地址为:https://github.com/alibaba/DataX

Pentaho Data Integration在中国被称为水壶(Kettle),它是一个具备集群能力的数据库ETL工具。它的官网可能是:http://www.kettle.be/

Apache Sqoop是Apache推出的开源工具,用于从HDFS向关系型数据库互传数据。由于具备互传能力,故而也间接实现了两个关系数据库之间的数据同步。官网地址:https://sqoop.apache.org 代码仓地址为:https://github.com/apache/sqoop

Oracle Golden Gate(简称OGG)是GoldenGate推出的基于日志的关系型数据库的复制软件。GoldenGate被Oracle公司收购后改为此名。它通过抽取源数据库端的redo log 或者 archive log ,传递到目标数据库端,再解析对目的数据进行数据同步。OGG的官网地址为:https://www.oracle.com/middleware/technologies/goldengate-downloads.html

Alibaba Canel也是马爸爸推出的一款软件,它通过伪装成MySQL的slave,对MySQL的日志进行解析,传输,实现数据迁移。代码仓地址为:https://github.com/alibaba/canal


现在张小白来试用一下DataX。

打开官网地址:https://github.com/alibaba/DataX

复制git地址:

git clone https://github.com/alibaba/DataX.git

好像连不上,这个时候可以下载zip包,或者使用gitee过渡。

git clone https://gitee.com/zhanghui_china/DataX.git

浏览器打开 https://github.com/alibaba/DataX/blob/master/userGuid.md

我们来使用源码编译打包:

mvn -U clean package assembly:assembly -Dmaven.test.skip=true

。。

耐心等待打包结束。。。

好像出了问题。

再次检查系统环境要求:

原来需要Linux环境

那就用wsl环境试下:

检查java版本:

mvn -U clean package assembly:assembly -Dmaven.test.skip=true

好像是跟windows下源码编译打包报同样的错误。

尴尬了,好像玩转不下去了。

那就直接下载已经编译好的zip包试试吧。。

wget http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz

解压

tar -zxvf datax.tar.gz

先在MySQL建个表:my_user

并插入一条数据。

我们来试图将其迁移到ElasticSearch表中。

ElasticSearch环境可按照  张小白教你如何在CentOS7上安装ElasticSearch 7.16.3 https://bbs.huaweicloud.com/blogs/330012 的方式搭建。

先创建一个json文件:

{
    "job": {
        "setting": {
            "speed": {
                 "channel":10
            }
        },
        "content": [
            {
                "reader": {
                    "name": "mysqlreader",
                    "parameter": {
                        "username": "xxx",
                        "password": "xxx",
                        "column": [
                            "user_id",
                            "user_name"
                        ],
                        "connection": [
                            {
                                "table": [
                                    "my_user"
                                ],
                                "jdbcUrl": [
                                    "jdbc:mysql://xx.xx.xx.xx:3306/zhanghui"
                                ]
                            }
                        ]
                    }
                },
				"writer": {
                    "name": "elasticsearchwriter",
                    "parameter": {
                      "endpoint": "http://192.168.111.133:9200",
                      "accessId": "elastic",
                      "accessKey": "123456",
                      "index": "my_user",
                      "type": "my_user",
                      "cleanup": true,
                      "discovery": false,
                      "batchSize": 1000,
                      "splitter": ",",
                      "column": [
                        {"name": "user_id", "type": "text"},
                        {"name": "user_name","type": "text" }
                      ]
                    }
                }    
            }
            
        ]
    }
}

其中,reader段表明从mysql数据库读取,只读user_name和user_id两列数据。(上图中,真实的mysql用户名密码已经隐去)

writer段表明写入到elasticsearch,写入的index就是对应原来MySQL的表名,而index下的type,目前建议跟index保持一致即可。ES6以后在弱化type。所以我们可以认为,不同的index就可以去对应MySQL不同的表就可以了。

我们先看一下ES中的索引情况:

登录ES,切换到索引管理:

然后我们回到 wsl2的ubuntu执行以下命令:

python datax.py mysql_to_es7.json

报错了!

打开datax.py一看,很多语句写的都是print而非print()

那就得告诉DataX,我们得用python2咯?

那就用 conda建一个python 2.7.18的环境吧:

进入这个环境:

执行下试试:

奇怪,我要执行es的写入,跟 mongodbreader有啥关系?

查了下网上的解释,需要将所有下划线开头的文件全删掉。

同理删掉writer下的:

再来执行:

安装错误?我这个下的就是你们马爸爸做好的包啊。还要什么安装。。。

张小白无奈地闭上眼睛——就这样吧。明天再说!

(未完待续)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。