福利: 国际顶级盛会 HBaseCon Asia 2018 将于 8 月在北京举行, 目前正免费开放申请中, 更多详情参考 https://yq.aliyun.com/promotion/631
如果你对大数据存储, 分布式数据库, HBase 等感兴趣, 欢迎加入我们, 一起做最好的大数据在线存储, 职位参考及联系方式: https://maimai.cn/job?webjid=1heZGIyM4&srcu=1aOrffoj1&src=app&fr=my_jobsrecruit_job
摘要: 第九届中国数据库技术大会, 阿里巴巴技术专家孟庆义对阿里 HBase 的数据管道设施实践与演进进行了讲解. 主要从数据导入场景, HBase Bulkload 功能, HImporter 系统, 数据导出场景, HExporter 系统这些部分进行了讲述.
直播视频请点击
PPT 下载请点击
精彩视频整理:
数据导入场景
生意参谋
生意参谋是一种为商家服务, 帮助商家进行决策和运营的数据产品. 如在淘宝或天猫上开一家店, 生意参谋会提供店里每天进入的流量, 转化率, 客户的画像和同行业进行对比这些数据属于什么位置. 商家可以根据流量分析, 活动分析和行业分析去进行决策. 可以根据平时日志, 点击量和访问量, 数据库把数据通过实时的流处理写入 HBase. 有一部分写到离线系统里, 定期做一些清洗和计算再写入 HBase, 然后供业务去查询 HBase.
蚂蚁风控
在蚂蚁上任何一笔交易支付都会调用风控, 风控主要是去看这次交易是否属于同一个设备, 是否是经常交易的地点, 以及交易的店铺信息. 它必须在 100ms-200ms 把风险做完, 风控是根据长期的历史信息, 近期历史的信息和实时的信息三个方向做综合考量. 用户的输入会实时的写入 HBase, 同时这个实时的信息增量也会导入到离线系统里面, 离线系统会定期的对数据进行计算, 计算的数据结果会作为历史或近期历史再写回 HBase, 一个支付可能会调百十次的风控, 而且需要在百毫秒内进行返回.
数据导入需要解决的问题
2013 年刚刚开始做数据导入的时候面临的更多的是功能需求性的问题, 现在需要考虑的是导入的周期性调度, 异构数据源多, 导入效率高和多集群下的数据一致性的问题. 前两个问题更适合由平台化去解决, HBase 的数据导入更关注的是导入效率和多集群下的数据的一致性.
什么是 Bulkload?Bulkload 有什么功能?
Bulkload 使用的是一种新的结构 LSM Tree 进行写入更新, 其结构如上图所示. 使用 Application code 进行数据写入, 数据会被写入到 MemStore,MemStore 在 HBase 里是一个跳表, 可以把它看成一个有序的列表, 并不断往里面插入数据. 当数据达到一定量时就会启动 flush 对数据进行编码和压缩, 并写成 HFile.HFile 是由索引块和数据块组成的文件结构, 其特点是只读性, 生成 HFile 之后就不可改了. 当用户进行读取数据的时候, 就会从三个 HFile 和一个 MemStore 进行查找进行读取. 这个结构的优化就是就把随机的写变成了有序的写. Bulkload 就可以把上千上万条数据在毫秒内加入到 HBase 里. 所以 Bulkload 的优势如下:
高吞吐
不需要 WAL
避免 small compaction
支持离线构建
Bulkload 的导入结构如上图所示, 数据来源于数仓, 首先根据 HBase 的分区规则对数据进行分区和排序. 然后会生成 Partition Data, 需要写一个 HBase 插进去. 同步中心就会调动一个作业, 作业内部会有很多的 tasks, 每个 task 独立的执行把文件读出, 写到 HDFS 上, 形成一个 HFile 文件. 当把所有文件写完, 同步中心就会调 Bulkload 指令到 HBase, 把所有的 HFile 一次性的 load 进去.
以前采用的是多集群导入的方法, 但是多集群导入有很多缺点如下:
很难保证多个任务同时完成, 导致一定时间窗口内数据不一致
调度后的运行环境不一致
网络延迟不一致
失败重试
集群部署对业务不透明的缺点:
需要配置多个任务
集群迁移需要重新配置任务
为了保证数据的一致性, 采用了逻辑集群导入法.
逻辑集群的流程如上图所示, 首先进行分区合并, 然后进行双数据流处理, 把流分别写到 Active 和 Backup 里, 当 Active 和 Backup 的 HFile 文件写完后执行 Bulkload. 因为 Bulkload 是毫秒级别的, 所以能实现一致性.
多任务和逻辑集群的差别比较如下:
多任务模式: 需要重复配置, 是不透明的, 很难保证一致性, 分区排序
需要执行两次, 编码压缩两次.
逻辑集群模式: 配置一次, 迁移无感知, 在一致性上达到毫秒级, 分区排序是执行一次, 但分区数量变多, 编码压缩一次.
随着业务做得越来越大, 这种导入就会遇到新的线上问题, 如扩展性, 资源利用率, 研发效率, 监控等.
什么是 HImporter 系统?
HImporter 是用于辅助数据同步的中间层, 他会把所有 HFile 的构建, 加载逻辑下沉到 HImporter 层.
HImporter 所处的位置如上图所示.
HImporter 的优势
分布式水平扩展, 同一个作业的不同任务可以调度到 HImporter 的不同 worker 节点
提高资源利用率, 将压缩等 CPU 密集操作下降到 HImporter
快速迭代, HImporter 的运维和迭代与同步中心独立
独立监控, HImporter 可按照自己的需求实现监控
HImporter 功能迭代
功能迭代主要包括表属性感知, 保证本地化率, 支持轻量计算和安全隔离. 其中表属性感知就是感知特性, 并保证特征不会变, 主要包括, 混合存储, 新压缩编码, 表级别副本数; 保证本地化率是将 Hfile 写入到分区所在服务器, 保证本地化率和存储特性, 对一些 rt 敏感的业务效果明显; 支持轻量计算就是支持 MD5, 字符串拼接等函数; 安全隔离是避免对外暴露 HDFS 地址, 支持 Task 级别重试.
数据导出场景
菜鸟联盟
菜鸟联盟的场景如上图所示. 一个物流详情会传到 HBase,HBase 会传到数据仓库, 数据仓会产生报表, 然后去训练路由算法.
淘宝客服
淘宝客服的一个退款应用场景如上图. 这是一个逆向链接, 把退款, 纠纷, 退款物流, 退款费用等实时的写入到 HBase 里, HBase 会实时的写入 queue 里, blink 流系统会消费 queue 产生一些数据会返回到 HBase,blink 输出会支撑智能服务, 客户监控等.
增量数据导出需要解决的问题
增量数据导出需要解决的问题主要是离线数据的 T+1 处理特点, 吞吐量 , 实时性, 主备流量切换等.
早期的方案是会周期性的从 HDFS 里把所有的日志罗列出来, 然后对日志进行排序会产生一个有序的时间流. 取 work 里同步时间最短的作为最终的同步时间. 这种方案具有对 NN 节点造成很大压力, 无法应对主备切换, 日志热点处理能力低等问题.
HExporter 系统
HExporter1.0 如上图所示, HExporter1.0 优势主要有主备流量切换不影响数据导出, 能够识别数据来源, 过滤非原始数据; 独立的同步时间流, 能够保障数据按有序时间分区 Dump 到数据仓库; 复用 HBase replication 框架, 能够降低开发工作量, 复用 HBase 的监控, 运维体系.
HExporter1.0 优化主要包括以下五点:
减少拓扑网络中的数据发送, 备库避免向 Exporter 发送重复数据;
远程辅助消化器, 空闲的机器帮助消化热点;
避免发送小包, HExporter 在接收到小包后, 等待一段时间再处理;
同步通道配置隔离, 实时消费链路和离线消费链路可以采用不同的配置;
数据发送前压缩.
HExporter1.0 的问题是业务写入流量产生高峰, 离线出现同步延迟; HBase 升级速度慢. 然后我们就有了以下解决思路, 离线同步的资源可以和在线资源隔离, 利用离线大池子可以削峰填谷; Exporter 的 worker 是无状态的, 如果把所有逻辑都放在 Exporter, 那么升级, 扩容会简单快速. 然后就产生了 HExporter2.0.
HExporter2.0 如上图所示
总结
ALiHBase 数据通道的导入和导出都是添加了中间层, 中间层的核心价值易扩展, 可靠性高, 迭代快和稳定. 因为采用分布式水平扩展更易扩展; 采用自主识别主备切换, 封装对 HBase 访问更可靠; 采用架构解耦, 快速迭代使迭代速度更快; 因为无状态, 节点对等所以更加稳定.
来源: https://yq.aliyun.com/articles/618589