大数据异构环境数据同步工具DataX 与Sqoop 之比较

作者:

从接触DataX起就有一个疑问,它和Sqoop到底有什么区别,昨天部署好了DataX和Sqoop,就可以对两者进行更深入的了解了。

两者从原理上看有点相似,都是解决异构环境的数据交换问题,都支持oracle,mysql,hdfs,hive的互相交换,对于不同数据库的支持都是插件式的,对于新增的数据源类型,只要新开发一个插件就好了,

但是只细看两者的架构图,很快就会发现明显的不同

DataX架构图

  • Job: 一道数据同步作业
  • Splitter: 作业切分模块,将一个大任务与分解成多个可以并发的小任务.
  • Sub-job: 数据同步作业切分后的小任务
  • Reader(Loader): 数据读入模块,负责运行切分后的小任务,将数据从源头装载入DataX
  • Storage: Reader和Writer通过Storage交换数据
  • Writer(Dumper): 数据写出模块,负责将数据从DataX导入至目的数据地

Sqoop架构图

DataX 直接在运行DataX的机器上进行数据的抽取及加载。
而Sqoop充分里面了map-reduce的计算框架。Sqoop根据输入条件,生成一个map-reduce的作业,在Hadoop的框架中运行。
从理论上讲,用map-reduce框架同时在多个节点上进行import应该会比从单节点上运行多个并行导入效率高。而实际的测试中也是如此,测试一个Oracle to hdfs的作业,DataX上只能看到运行DataX上的机器的数据库连接,而Sqoop运行时,4台task-tracker全部产生一个数据库连接。调起的Sqoop作业的机器也会产生一个数据库连接,应为需要读取数据表的一些元数据信息,数据量等,做分区。
Sqoop现在作为Apache的顶级项目,如果要我从DataX和Sqoop中间选择的话,我想我还是会选择Sqoop。而且Sqoop还有很多第三方的插件。早上使用了Quest开发的OraOop插件,确实像quest说的一样,速度有着大幅的提升,Quest在数据库方面的经验,确实比旁人深厚。
  • Transfer highly clustered data more than five times faster than with Sqoop alone
  • Avoid scalability issues that can occur with Sqoop when data has no primary key or is not stored in primary key order
  • Reduce CPU by up to 80 percent and IO time by up to 95 percent
  • Prevent disruption to concurrently running Oracle workload
  • Get free use of Data Transporter for Hive, a Java command-line utility that allows you to execute a Hive query and insert the results into an Oracle table
在我的测试环境上,一台只有700m内存的,IO低下的oracle数据库,百兆的网络,使用Quest的Sqoop插件在4个并行度的情况下,导出到HDFS速度有5MB/s ,这已经让我很满意了。相比使用原生Sqoop的2.8MB/s快了将近一倍,sqoop又比DataX的760KB/s快了两倍。
另外一点Sqoop采用命令行的方式调用,比如容易与我们的现有的调度监控方案相结合,DataX采用xml 配置文件的方式,在开发运维上还是有点不方便。
附图1.Sqoop with Quest oracle connector

评论

9 条对“大数据异构环境数据同步工具DataX 与Sqoop 之比较”的回复

  1. wuchang 的头像

    DataX好久没更新了,文档也不齐全

    1. fanta 的头像
      fanta

      哥们,问下啊。这个的速率能提高吗?比如导入个上G的文件时间岂不更久啊?谢啦!

      1. dean 的头像
        dean

        可以提高啊,性能主要是取决于oracle。sqoop本身成为瓶颈的可能不大。

    2. fanta 的头像
      fanta

      麻烦问下你的hadoop版本是clouder版本的吗

      1. dean 的头像
        dean

        是的。是CDH4的。

    3. icesword 的头像
      icesword

      sqoop能否支持关系型数据库之间导入导出呢?

      1. dean 的头像
        dean

        没有直接支持。传统间的还是用传统的ETL工具吧。

  2. word 的头像
    word

    dean,你好,请问用Sqoop把数据从Oracle导入到Hbase,Sqoop是用jdbc来实现数据转移的,如果TB级别的数据量迁移jdbc链接应该不稳定吧,Sqoop是否支持TB级别的数据量?

    1. dean 的头像
      dean

      确实不太稳定。如果是oracle。肯定会快照过旧了。。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.