编译 datax

datax 是阿里巴巴官方开源的一个数据同步工具,可以用于诸多数据源之间的同步,并且使用简单、效率高。

datax 官方有提供编译好的版本,可以直接下载,但是其中包含有 BUG。

我最近遇到的一个问题是,当从 MongoDB 同步数据到传统的结构化数据库时(如MySQL),会出现字段无法对齐的情况。

举个例子。比如 MongoDB 中存在这样的一个 Collection:

当同步到 mysql 后,会变成这样:

明显的,它只是按顺序来映射到目标端,而并没有按字段名来做匹配。

问题的解决:重新编译datax

直接从 github 中下载 datax 的源码,本来我想只编译它的 mongodbreader 插件,但是一直报错,后来想想应该是要整个源码编译才行。

cd 到 datax 目录内之后,官方提供了编译命令:

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

直接编译是会出错的,会报几个依赖找不到,这是因为源码中的 pom.xml 文件里面设置的 maven 依赖使用的是旧版本,会有问题,所以需要一一修改。

要修改的地方有 3 个:

odpsreader/pom.xmlodpswriter/pom.xml

<dependency>
    <groupId>com.aliyun.odps</groupId>
    <artifactId>odps-sdk-core</artifactId>
    <version>0.20.7-public</version>
</dependency>

otsstreamreader/pom.xml

<dependency>
    <groupId>com.aliyun.openservices</groupId>
    <artifactId>tablestore-streamclient</artifactId>
    <version>1.0.0</version>
</dependency>

修改完后,再执行打包命令:

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

最终看到BUILD SUCCESS就表明打包成功了。生成的目标文件在datax/target/目录下

参考:

[1]. MongoDB 读取数据写入hdfs,丢失字段
[2]. odps依赖包确实导致无法编译
[3]. otsstreamreader插件pom依赖编译报错
[4]. DataX userGuide

posted @ 2019-07-24 14:05  东围居士  阅读(638)  评论(0编辑  收藏  举报