张小白DataX踩坑记(一)
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下的:
再来执行:
安装错误?我这个下的就是你们马爸爸做好的包啊。还要什么安装。。。
张小白无奈地闭上眼睛——就这样吧。明天再说!
(未完待续)
- 点赞
- 收藏
- 关注作者
评论(0)