http://blog.csdn.net/zlm838687/article/details/74781522
hdata datax交流总结
今天和阿里云的同学就数据同步做了简要的交流,下面就交流的内容做一个总结
分片相关
- datax目前可以支持单机(standalone)和集群模式(cluster).目前开源的是单机版本。无论是单机版本还集群版本,分片都是通过datax进行。集群模式会把分片包装的taskGroup重新发给datax service, datax service会把新的taskGroup重新发给其他机器执行
- 根据算出的最大值、最小值和通道个数(相当于hdata的线程个数),可以计算出步长(step), 然后根据step,计算出各个分片的长度。
- datax split目前仅支持单一主键,且主键类型是int或者varchar类型
- 执行reader和writer最细力度的切分。需要注意到是,writer的切分结果要参照readre的结果,要达到切分后的结果数目相等,才能满足1:1的通道模型。所以这里可以将reader和writer的配置整合到一起。为了避免顺序给读写带来的长尾效应,将整合的结果shuffle掉。
- hbase的分片是通过region来实现的
- odps(他们的hadoop环境)是通过offset来实现的
- 分库分表直接在表的层面划分,各个表之间没有关系。我们交流的团队目前是没有使用canal增量同步数据的
- datax没有断点续传,分布式一个错,其他都错。datax如果某一个task失败会有重试,我们hdata目前还没有。后面hdata可以改进下,可以减少整个任务重试的成本。
流控
- datax的流控不会出现尖峰的情况。他们内部会把每次sleep的时间调整的很短。具体sleep的时间他们是根据当前流量,超出峰值的流量等因素,根据他们内部算法实现的。我们自己的hdata早前都是固定sleep一秒的, 所以会出现峰值的情况。
- 数据源的流控超过了就不再下发任务
开发平台相关
- 多租户,主账号和子账号,有多个角色(开发,运维,部署,方可,项目管理员),会有测试,预发等。
- SQL的补全是每个输入会有ajax请求到后端(odps上)做语法分析. odps会根据语法树找到和用户最匹配的sql
总结
我们做的好的地方
- datax目前的进度汇报是基于task级别的,但是task级别的进度不能真正反映整个job的进度。我们目前hdata是进程级别的。可以真正的看到这个任务total read write completedPercent的情况
- datax的限流虽然把sleep的间隔调整为毫秒级别,但是个人觉得还是会出现短暂的分值情况。我们目前的限流首先会在数据库级别做一下限流,降低数据库的压力,减少sql killer发送的频率。还有我们目前限流的算法采用类似tcp拥堵的滑动窗口算法,快速下降慢速恢复。可以将流量控制在一个平稳的数值范围内。
值的学习借鉴的地方
- hdata的分布式。大概想法是分片还是由hdata完成,然后hdata把分片的结果告诉调度,由调度进行二次分发到不同的hdata机器上进行执行
- hdata可以增加线程级别的重试。减少重跑出错任务的代价
- 当前hdata支持容忍错误的条数,不支持容忍错误百分比。后期需要把这个功能坐上。
- hdata的智能分析还不够强大。当前正在做。
- 数加的测试环境的数据都是读取线上的数据的,只不过写出的时候区分线上环境还是测试环境。我们后面做测试环境可以考虑下。