Ali-HBase的SQL实践与改进

2017云栖大会Hbase专场,阿里巴巴技术专家天穆带来Ali-HBase的SQL实践与改进的演讲。本文主要从为什么需要SQL开始谈起,进而讲解了SQL on Hbase,接着着重分享了Ali-Hbase SQL的优化与改进,最后对未来进行了展望。

以下是精彩内容整理:

为什么需要SQL?

时间序列数据的存取:按照时间顺序追加新记录,按照时间范围查询数据,查询结果按时间倒排。我们数据是按照时间产生的,最新写的数据一定写在表头,在分布式情况下所有操作都落在表头,这台服务器必然会成为热点。

Hash散列

解决写热点问题就是打散、随机分布,任何一个操作都可以随机地放在表格里面。这带来一个新的问题,整个表不是有序,一旦时间有序就会产生写热点。

分桶

我们需要做一些折中,也就是分桶,我们对它做一个取模的操作,任何一次操作都可以落在随机的“桶”里面,数据在桶内是有序的,可以按照时间范围来查询。代价是范围查询时必须并发查所有桶。在查完所有桶以外需要进行一次合并。

我们来查时间范围,先查第一个分桶,再查第二个和第三个分桶,得到了70、60、50的结果。分桶方案其实在一定程度上提升了读的性能。

基于HBase Native api的实现

现在说的场景是经过高度抽象的场景,实际的场景不可能这么简单,即使在简单的场景下就需要做这么多事情。我们HBase API要想用好Hbase就需要很多额外的事情,需要写非常多的代码。学习成本也是非常高的,如果想很精准地使用是需要有技巧的,很多东西都要靠经验,用户在利用HBase API的时候要付出很高的学习成本和开发成本。大部分的HBase用户都会遇到这些类似的问题,而且每个用户都需要了解怎么去解决这些问题,使用了HBase API以后可以对自己的业务做到完全地把控。

SQL on HBase

为什么HBase API这么难用,说到底就是太底层了,提供“原语级别的操作。我们希望能够降低用户的接入门槛,能够低成本低接入Hbase,怎么做这件事情?阿里HBase大部分场景都是比较简单的,并且有共性,所以我们希望能够引用中间层,大部分人都能够用到。中间层就是SQL,SQL能够替代API成为HBase的默认户接口。

基于Phoenix的SQL ON HBase解决方案,Phoenix就是针对HBase来设计的,而且Phoenix在HBase之间也可以结合得非常好,这也是我们选择Phoenix的一个主要原因。

支付宝智能搜索dump平台

支付宝智能搜索Dump平台,左边的数据源是各种各样的业务数据库,可能是MYSQL,可能是HBase的,对业务数据库的变更操作会同步到HBase集群里面很多张维表里面,对维表生成宽表。对于HBase来讲,这个场景除了实时写之外还有很大的全量导入。读是通过很多的全局二级索引,经常变更的索引表。因为搜索的业务,用户的需求经常发生变更,这样对应我们的索引表发生变更,虽然有一些成本,但是相比MYSQL来讲,这个变更的成本是可以接受的。因为业务增长比较快,所以线性扩容也是关键点。

商品报表

商品报表是另外一套吞吐型的业务,它也有实时的全量写,而且也需要二级索引来生成多维报表。这个报表的场景跟DUMP场景不一样,这个单表比较大,在我们业务里面最大的表在压缩之后有80个TB。

物联网设备信息存储

物联网场景也非常典型,读写相对比较简单,但是数据量特别大,而且写得很快。在这种情况下,存储的成本以及写的吞吐能力、扩容能力HBase比较擅长。在吞吐成本这块,我们采用冷热分离存储以及压缩算法降低成本。

HBase SQL的场景基本上都是HBase自己的场景,海量的数据、线性扩展等等,但是HBase有了查询的语意,从而拓展了HBase的业务边界。

Ali-Hbase SQL

为了支持这些场景,我们在HBase做了很多的优化和改进,在HBase本身我们针对阿里的场景做了很多性能和功能上的变革。在稳定性方面,我们做了很多工作,能够让HBase久经双十一沙场。Ali-HBaseSQL与Phoenix在功能补齐、功能增强、数据导入导出方面有所改善。Phoenix本身需要人去指定一个索引表,我们把这个事情自动化了,同时增强了可以访问多张索引表的能力,数据可以在各个系统之间产生流动。

性能优化

目标是将简单请求的性能优化到极致,与对应的HBase Native API性能差距小于5%。单行读写的场景下,SQL和HBase API的差距很明显。

客户端的元数据缓存,元数据:列名、数据类型、表属性、索引信息等等。元数据更新策略:并不是每次都刷新元数据,我们做了周期性的刷新,通过版本号的方式来识别是不是最新的,如果不是最新的就更新一版,这是优化UPSERT的缓存更新策略。

SELECT优化,我们会根据油壶请求的大小来合理选择适用,这个选择对性能影响非常大,因为我们的目标是优化简单的请求,优化一点点在用户那边的体现都是非常明显的。我们并不是分析型的场景,并不需要数据的预取,做到这些事情以后读的性能已经跟HBase  Select比较接近了。

此外,阿里云上的SQL,从其他的RDBMS迁移至云HBase。

未来的工作

未来一定是支持列名映射,支持ImmutableDataEncoding,我们现在正在调研,在大宽表的情况下能够节省1/3—1/2的存储空间。但是有一个限制,这个数据只能写下去,不能改。我们要优化功能都需要让用户去申请SQL的客户端,这是非常恶心的事情;支持query

server

mode和瘦客户端,解决了产品不断迭代的问题,用户不需要升级也可以享受到我们的改进;支持分布式Sequence,最终我们也要把SQL的能力做到分布式;可选的索引一致性,异步全局二级索引,有些场景下用户不需要强一致性,比如说日志,最终在1分钟之内一致就OK了,所以我们做一个异步的全局更新,更新成本也进一步降低了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,915评论 2 89
  • “无论贫穷还是富贵,无论疾病还是健康,我都愿意和你一生一世,永不分离。”结婚的时候每个人都会对伴侣许下这样一辈子的...
    眼睛睁_闫老湿阅读 316评论 8 1
  • 世钧与曼桢又见面了,世钧还想做些事情,让彼此能够重新在一起,弥补年轻时的遗憾,曼桢没有这么乐观 我们再也回不去了今...
    绿水荡漾景天然阅读 759评论 3 2
  • 一花一树一菩提,婆娑下凡染春泥。 方雅脱俗隐竹里,轻连绝糸简别离。 纷乱薄裹融珀琥,滋养新芽寄痕泪。 繁花散尽空归...
    _皆非阅读 196评论 0 1