- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
HBase2.0重新定义小对象实时存取
展开查看详情
1 . MOB HBase2.0重新定义小对象实时存取 孟庆义 阿里巴巴 中国 HBase 技术社区网站:http://hbase.group
2 . 目录 01 背景介绍 02 MOB原理及实现 03 MOB VS. 传统对象存储 04 总结与展望 中国 HBase 技术社区网站:http://hbase.group
3 . 01 背景介绍 MOB的使用场景与价值 中国 HBase 技术社区网站:http://hbase.group
4 . HBase2.0加持MOB技术,支持小对象实时存取,具 有读写强一致,低延迟,高并发等特点,并兼容所有 企业级特性如Snapshot,Replication 100KB~10MB 小于 Medium Objects 中等大小对 100KB 象 中国 HBase 技术社区网站:http://hbase.group
5 . MOB问题背景 IO 资源 写入瓶颈 放大 限制 Compaction落后导致⽂件数上升,进⽽导致flush 延迟,进⽽导致内存瓶颈,最终阻塞写⼊;同时⽂件 多副本 ECS 16核64G 5Gbps 数过多导致查询慢 WAL 高效云盘140MBps 假设⺴络IO放⼤系数=5,则实际可⽤带宽为5Gbps / Flush ECS15个挂载点 8 / 5 = 128MB/s,对于1MB对象单机能提供的 TPS=128 Compaction 中国 HBase 技术社区网站:http://hbase.group
6 . 02 MOB原理与背景 中国 HBase 技术社区网站:http://hbase.group
7 . 解决思路:降低Compaction的频率 输入 索引数据 对象数据 一天或者一周做一次合并 中国 HBase 技术社区网站:http://hbase.group
8 . 系统架构 中国 HBase 技术社区网站:http://hbase.group
9 . 写⼊路径 2 Hfiles row ts f2 (使用MOB) MOBs Memstore r1 t1 f2:b,t1=MOBValue1Length,filePath1,tag r3 t3 f2:b,t3=MOBValue3Length,filePath1,tag 3 Flush 1 HFiles (MOB) row ts f2 r1 t1 f2:b,t1=MOBValue1 LOG r3 t3 f2:b,t3=MOBValue3 中国 HBase 技术社区网站:http://hbase.group
10 . 引⽤结构 72 bytes 4 bytes = 2GB md5(start) + date+ uuid Row CF:Qualifier Timestamp MOBCellValueLength + FileName + Tags 默认MOB阈值=100KB 中国 HBase 技术社区网站:http://hbase.group
11 . 读取路径 Memstore row ts f2 r1 t1 f2:b,t1=MOBValue1 r3 t3 f2:b,t3=MOBValue3 扫描Memstore HFiles row ts f2 (使用MOB) r1 t1 f2:b,t1=MOBValue1Length,filePath1,tag Scanner r3 t3 f2:b,t3=MOBValue3Length,filePath1,tag 扫描HFile HFiles (MOB) row ts f2 r1 t1 f2:b,t1=MOBValue1 r3 t3 f2:b,t3=MOBValue3 中国 HBase 技术社区网站:http://hbase.group
12 . 合并索引⽂件 HFiles (MOB) row ts f2 (使用MOB) row ts f2 r1 t1 f2:b,t1=MOBValue1Length,filePath1,tag r1 t1 f2:b,t1=MOBValue1 r3 t3 f2:b,t3=MOBValue3Length,filePath1,tag r3 t3 f2:b,t3=MOBValue3 row ts f2 (使用MOB) row ts f2 r2 t2 f2:b,t2=MOBValue2Length,filePath2,tag r2 t2 f2:b,t2=MOBValue2 r4 t4 f2:b,t5=MOBValue4Length,filePath2,tag r4 t4 f2:b,t4=MOBValue4 Compaction Index row ts f2 (使用MOB) r1 t1 f2:b,t1=MOBValue1Length,filePath1,tag r2 t2 f2:b,t2=MOBValue2Length,filePath2,tag r3 t3 f2:b,t3=MOBValue3Length,filePath1,tag r4 t4 f2:b,t2=MOBValue4Length,filePath2,tag 中国 HBase 技术社区网站:http://hbase.group
13 . 合并MOB⽂件 HFiles (MOB) row ts f2 row ts f2 (使用MOB) HDFS对文件数量的支持存在上限 r1 t1 f2:b,t1=MOBValue1 r1 t1 …filePath1 引用 需要周期性合并小文件 r3 t3 f2:b,t3=MOBValue3 r2 t2 …filePath2 r3 t3 …filePath1 row ts f2 r4 t4 … filePath2 r2 t2 f2:b,t2=MOBValue2 r4 t4 f2:b,t4=MOBValue4 Bulkload Compaction MOB row ts f2 (使用MOB) row ts f2 r1 t1 f2:b,t1=MOBValue1Length,filePath3,tag r1 t1 f2:b,t1=MOBValue1 引用 r2 t2 f2:b,t2=MOBValue2Length,filePath3,tag r2 t2 f2:b,t2=MOBValue2 r3 t3 f2:b,t3=MOBValue3Length,filePath3,tag r3 t3 f2:b,t3=MOBValue3 r4 t4 f2:b,t2=MOBValue4Length,filePath3,tag r4 t4 f2:b,t2=MOBValue4 中国 HBase 技术社区网站:http://hbase.group
14 . MOB合并策略 分组合并 按照文件所属分区以及日期两个维度进行分区,分区内的文件进行合并 称为:PartitionedMobCompactor 默认每日合并 按天分区,小于阈值的文件参与合并,阈值默认为1028MB 周月合并 周合并,按周分区,当前周文件小于阈值的参与,其它周的文件小于7*阈值的参与 月合并,按月分区,当前周不参与,本月周小于7*阈值参与,其它月小于28*阈值的参与 中国 HBase 技术社区网站:http://hbase.group
15 . MOB缓存 文件句柄缓存 hbase.mob.file.cache.size = 1000 LRU cache MOB对象缓存 复用BlockCache 中国 HBase 技术社区网站:http://hbase.group
16 . 使用方式 Shell访问 hbase> create 't1', {NAME => 'f1', IS_MOB => true, MOB_THRESHOLD => 102400} hbase> alter ‘t1’, {NAME => ‘f1’, IS_MOB => true, MOB_THRESHOLD => 102400} Java API HColumnDescriptor hcd = new HColumnDescriptor(“f”); hcd.setMobEnabled(true); hcd.setMobThreshold(102400L); 中国 HBase 技术社区网站:http://hbase.group
17 . 03 MOB VS. 传统对象存储 中国 HBase 技术社区网站:http://hbase.group
18 . 回顾对象存储 模型 API KV 结构 支持前缀扫描,获取符合条件的Keys 一组KV组成的集合成为Bucket 通过Key获取对象 缺少灵活性 检索能力弱 访问协议 计费模式 REST 按请求次数计费 简洁,语言无关 请求频率越高成本越高 消耗更多的链接和网络带宽 Bug可能引发计费灾难 中国 HBase 技术社区网站:http://hbase.group
19 . 云HBase与对象存储对比 对象存储 云HBase 建模能力 KV KV,表格,稀疏表 查询能力 前缀查询 前缀查询 过滤器 索引 性能 优 优,特别对小对象有更低 的延迟;在复杂查询场景 下,比对象存储有10倍以 上的性能提升 成本 按流量,请求次数计费, 托管式,在高并发,高吞 适合访问频率低的场景 吐场景有更低的成本 扩展性 优 优 适用对象范围 通用 <10MB 中国 HBase 技术社区网站:http://hbase.group
20 . 从一条SQL开始 用户表T:包含三个属性S1、S2、S3 属性的大小为50bytes左右,包含一个对象数据Object从100KB~10MB S1 S2 S3 Object 查询 select Object from T where S1 = xxx and S2 > yyy and S3 < zzz 中国 HBase 技术社区网站:http://hbase.group
21 . 对象存储方案 设计逻辑表为:S1+S2+S3 => Object,将S1、S2、S3组合成一个key 优势: // 对象存储支持前缀检索,按“S1 = xxx and S2 > yyy”查找元数据 List keys = GetBucket(key >= xxx+yyy) • 读写强一致 • 支持水平扩展 // 用户需要自己写代码实现对S3属性列的条件过滤 filterByS3(keys, zzz) 劣势: • 实时性差,一次请求要查询N次服务器 // 依次读取出Object • 检索能力不足,仅支持key的前缀检索 for(key : keys) { GetObject(key); • 当属性列增多,特别是动态增加的情况下,对 // do something 象存储很难支持(key会变得非常复杂) } 中国 HBase 技术社区网站:http://hbase.group
22 . MySQL+对象存储 优势: • 检索能力强 List references = select reference from T where S1 = xxx • 支持存储结构化数据 and S2 > yyy and S3 < zzz 劣势: // 依次读取出Object • 实时性差,一次请求要查询N次服务器 for(Key : references) { • 读写存在不一致问题 GetObject(key); • 不支持动态列 //do something } • 运维复杂 中国 HBase 技术社区网站:http://hbase.group
23 . HBase MOB Rowkey 普通列 普通列 S1+S2 S3 Object 优势: • 实时查询,延迟低 Scan scan = new Scan(); • 读写强一致 scan.setStartKey(S1+S2); // 按S1+S2前缀查询 • 检索能力强 scan.setFilter(S3); // 利用Filter过滤S3 • 支持存储结构化数据 scan.addColumn(Object); // 返回Object列 • 支持动态列 List objects = T.scan(scan); // 一次查询即返回所有结果 • 支持水平扩展 • 易于维护 中国 HBase 技术社区网站:http://hbase.group
24 . 各方案对比 对象存储 MySQL+对象存储 HBase MOB 读写强一致 Y N0 Y 查询能力 弱 强 强 查询响应时间 高 高 低 运维成本 低 高 低 水平扩展 Y Y Y 中国 HBase 技术社区网站:http://hbase.group
25 . 04 总结与展望 中国 HBase 技术社区网站:http://hbase.group
26 . HBase2.0重新定义小对象实时存取 HBase2.0重新定义了小对象实时存取的业务访问方式,不再是索引+对象的多次查询,提供简洁的 一体化解决方案。具有访问延迟低,读写强一致,检索能力强,水平易扩展等关键能力;并且具 备动态列,多版本等灵活的功能;最后一体化的解决方案简化了用户端的代码,也减少了服务端 的运维成本。 中国 HBase 技术社区网站:http://hbase.group
27 . 后续发展 整合OSS 将冷数据归档到OSS,优化成本 提升MOB合并能力 目前由Master执行,考虑改为分布式 独立配置 MOB可以采用不同于主体表的压缩,编码,块大小等配置 中国 HBase 技术社区网站:http://hbase.group
28 . THANK YOU When a cigarette falls in love with a match,it is destined to be hurt.When a cigarette falls in love with a match,it is destined to be hurt. 中国 HBase 技术社区网站:http://hbase.group
29 . 加入我们;另外,阿里云提供云 HBase 技术支持,欢迎扫描下面二维码。 HBase 技术社区公众号 社区管理员 阿里云 HBase 技术支持 中国 HBase 技术社区网站:http://hbase.group