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

编译 datax的更多相关文章

  1. DataX的简单编译安装测试

    搭建环境:     Java > =1.6     Python>=2.6 <3     Ant     Rpmbuild     G++     编译DataX: 进入rpm文件夹 ...

  2. datax源代码编译安装

    what is DataX ? DataX是阿里巴巴集团内被广泛使用的离线数据同步工具/平台. 实现包括MySQL,SQL Server,Oracle,PostgreSQL,HDFS,Hive,HBa ...

  3. Alibaba DataX 源码编译

    Alibaba DataX 源码编译 标签(空格分隔): ETL DataX简介 设计理念 为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负 ...

  4. datax中oracleWriter

    在使用datax的oraclewriter时,由于对oracle的不熟悉,以及c++编译的不熟悉,颇费了一些周折.在此,记录一下,供再次使用的人参考. 1.oracleWriter :oracle提供 ...

  5. 异构数据源海量数据交换工具-Taobao DataX 下载和使用

    DataX介绍 DataX是一个在异构的数据库/文件系统之间高速交换数据的工具,实现了在任意的数据处理系统(RDBMS/Hdfs/Local filesystem)之间的数据交换. 目前成熟的数据导入 ...

  6. Spark记录-阿里巴巴开源工具DataX数据同步工具使用

    1.官网下载 下载地址:https://github.com/alibaba/DataX DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL.Oracle.SqlSe ...

  7. 【转】阿里出品的ETL工具dataX初体验

    原文链接:https://www.imooc.com/article/15640 来源:慕课网 我的毕设选择了大数据方向的题目.大数据的第一步就是要拿到足够的数据源.现实情况中我们需要的数据源分布在不 ...

  8. Datax官方笔记总结

    # DataX DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL.SQL Server.Oracle.PostgreSQL.HDFS.Hive.HBase.OTS. ...

  9. DataX的安装

    DataX的安装 1. 可下载tar包 https://github.com/alibaba/DataX/blob/master/userGuid.md 2. 下载源码自己编译 git clone h ...

随机推荐

  1. netcore之RabbitMQ入门

    简介 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息中间件,基于Erlang语言编写. AMQP是什么 AMQP 0-9-1(高级消息队列协议)是一种消息传递协议,它允许一致的客户端应 ...

  2. 获取oracle的建表DLL语句

    get_ddl('TABLE','表名','实例名') from dual   select dbms_metadata.get_ddl('TABLE','RMS_CITY','RMS') from ...

  3. Python—闭包和装饰器

    闭包 定义:内部函数对外部函数变量的引用,则将该函数与用到的变量称为闭包. 闭包必须满足以下三个条件: 必须有一个内嵌函数. 内嵌函数必须引用外部函数中的变量. 外部函数返回值必须是内嵌函数的引用. ...

  4. nginx是怎么处理http请求的

    nginx是怎么处理http请求的 参考:How nginx processes a request nginx first decides which server should process t ...

  5. Java学习笔记(3)--- 内部类,基本数据类型

    1.内部类(nested classes): a.定义: 内部类其实就是一个类中还包含着另外一个类,如同一个人(外部类)是由大脑.肢体.器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏: ...

  6. 谷歌浏览器安装JsonView插件

    可方便阅读json格式文件,参考https://www.jianshu.com/p/6ea9f2245f4d

  7. BASIC合集

    握手包 给你握手包,flag是Flag_is_here这个AP的密码,自己看着办吧. 提交格式:flag{WIFI密码} 破解wifi密码 丢到kali,用aircrack-ng kali有一个包含常 ...

  8. 判断101-200之间有多少个素数,并输出所有素数,方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。

    <?php$sum=0;for($i=101;$i<=200;$i++){    for($j=2;$j<=sqrt($i);$j++)    {       if($i%$j==0 ...

  9. ionic4 组件调用的坑

    我们再开发过程中很多模块做成组件,那么调用的时候则需把module.ts中的引入去掉,如下红色框框:

  10. sqlite 的去重

    1) 找到重复的记录,归类到一个新表里面 max(id) 是想要删除的record 2) 删除 delete from gallery where id in ( select theid from ...