美文网首页
DataX Vs Sqoop

DataX Vs Sqoop

作者: 踏雪寻梅4149 | 来源:发表于2017-09-06 20:28 被阅读0次

DataX

https://github.com/alibaba/DataX/wiki/DataX-all-data-channels
支持的数据源:

  • 更侧重于业务数据库之间的数迁移
  • 目前还只看到是 standalone 模式
  • 使用方便,迁移任务的定义也比较灵活,但是目前只有一种数据源到另一种数据源的迁移。
  • 对于大数据 hdfs 的支持不是很好。明显没有利用到 hdfs 的 locality 特性读写数据。
  • 但是 reader 和 writer 接口定义非常灵活,也可以自己扩展
  • transformation 好像还没有实现
  • 支持分库分表的数据库

源码解读:

  • 入口:Engine
    关键:JobContainer 和 TaskGroupContainer
  • 如何调度:
  • Reader的任务切分:
    RangeSplit:会根据参数job.setting.speed.channel来最终确定每个表改分成几个task。简单的说,假如 channel 设置的是4,你的分库分表的总 table 为2,则每张表会获得2个 splittask。
  • Writer 的任务切分:跟 reader 保持一致。

Sqoop2

值得借鉴的:

  • commandline客户端入口 shell->SqoopShell: 用的是groovysh
  • API Client入口:实际上是 web api (json 格式)
  • 调度和执行引擎:
  • Repository:底层如何适应多种db的设计
  • partition:
    • 数字类型:Range
    • 日期类型:本质上也是 Range
    • 字符类型:利用 java unicode 将任意字符转换成对应的 codepoint, 变成BigDecimal 比较大小, 非常巧妙的设计

基础:

字符串:
hash:TODO

  • 编码:任何一种语言,内存之间数据都不要考虑编码,当与外界发生交换和读取时,需要考虑外界文件的编码,再解码并成 unicode。
    java,python 内存里面都是 unicode 编码,只有当需要存储或传输时则需要不同的编码,甚至包括压缩的(为了时空考虑)。所以内存大小和保持成文本大小通常肯定是不一样的。
    http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

  • 大端小端问题:跟编码无关,主要是 cpu不同型号,主要影响大于 byte 的任意数据的操作,cpu 从内存中取出数据后,是该先读高端还是低端或者从其他地方读取数据后,放入内存高端还是低端地址。
    主要需要注意的是是不同操作系统之家不同语言的数据传输。
    对于 java 不用处理。网络传输时大端的,java 也是大端。
    对于下面这种情况,A 端 C 则需要出来。
    操作系统 A(小端)C<->网络传输(大端)->操作系统 B(大端)java
    http://blog.chinaunix.net/uid-12707183-id-2919249.html
    网络层协议规定了网络层是大端的,所以小端方在发送前或接受后都需要做相应的转换。
    http://www.cnblogs.com/fuchongjundream/p/3914770.html

Spark JDBC

目前只支持 Long partition

相关文章

网友评论

      本文标题:DataX Vs Sqoop

      本文链接:https://www.haomeiwen.com/subject/sqyvjxtx.html