Ali-HBase的SQL实践与改进

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

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

为什么需要SQL?
1

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

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

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

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

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

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

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

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

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

物联网场景也非常典型,读写相对比较简单,但是数据量特别大,而且写得很快。在这种情况下,存储的成本以及写的吞吐能力、扩容能力HBase比较擅长。在吞吐成本这块,我们采用冷热分离存储以及压缩算法降低成本。
HBase SQL的场景基本上都是HBase自己的场景,海量的数据、线性扩展等等,但是HBase有了查询的语意,从而拓展了HBase的业务边界。
Ali-Hbase SQL
11

为了支持这些场景,我们在HBase做了很多的优化和改进,在HBase本身我们针对阿里的场景做了很多性能和功能上的变革。在稳定性方面,我们做了很多工作,能够让HBase久经双十一沙场。Ali-HBaseSQL与Phoenix在功能补齐、功能增强、数据导入导出方面有所改善。Phoenix本身需要人去指定一个索引表,我们把这个事情自动化了,同时增强了可以访问多张索引表的能力,数据可以在各个系统之间产生流动。
性能优化
目标是将简单请求的性能优化到极致,与对应的HBase Native API性能差距小于5%。单行读写的场景下,SQL和HBase API的差距很明显。
客户端的元数据缓存,元数据:列名、数据类型、表属性、索引信息等等。元数据更新策略:并不是每次都刷新元数据,我们做了周期性的刷新,通过版本号的方式来识别是不是最新的,如果不是最新的就更新一版,这是优化UPSERT的缓存更新策略。

12

SELECT优化,我们会根据油壶请求的大小来合理选择适用,这个选择对性能影响非常大,因为我们的目标是优化简单的请求,优化一点点在用户那边的体现都是非常明显的。我们并不是分析型的场景,并不需要数据的预取,做到这些事情以后读的性能已经跟HBase Select比较接近了。
此外,阿里云上的SQL,从其他的RDBMS迁移至云HBase。
未来的工作
未来一定是支持列名映射,支持ImmutableDataEncoding,我们现在正在调研,在大宽表的情况下能够节省1/3—1/2的存储空间。但是有一个限制,这个数据只能写下去,不能改。我们要优化功能都需要让用户去申请SQL的客户端,这是非常恶心的事情;支持query server mode和瘦客户端,解决了产品不断迭代的问题,用户不需要升级也可以享受到我们的改进;支持分布式Sequence,最终我们也要把SQL的能力做到分布式;可选的索引一致性,异步全局二级索引,有些场景下用户不需要强一致性,比如说日志,最终在1分钟之内一致就OK了,所以我们做一个异步的全局更新,更新成本也进一步降低了。
原文链接请添加链接描述
本文为云栖社区原创内容,未经允许不得转载。

原文地址:http://blog.51cto.com/13876536/2154035

时间: 2024-10-03 11:50:20

Ali-HBase的SQL实践与改进的相关文章

大数据时代数据库-云HBase架构&生态&实践

摘要: 2018第九届中国数据库技术大会,阿里云高级技术专家.架构师封神(曹龙)带来题为大数据时代数据库-云HBase架构&生态&实践的演讲.主要内容有三个方面:首先介绍了业务挑战带来的架构演进,其次分析了ApsaraDB HBase及生态,最后分享了大数据数据库的实际案例. 2018第九届中国数据库技术大会,阿里云高级技术专家.架构师封神(曹龙)带来题为大数据时代数据库-云HBase架构&生态&实践的演讲.主要内容有三个方面:首先介绍了业务挑战带来的架构演进,其次分析了A

SQL 实践和技巧 <2>

转自   http://i.cnblogs.com/EditPosts.aspx?opt=1 几个小技巧   (1)||的使用: select ‘(‘||phone[1,3]||’)’phone[5,12], from customer where customer_num=106; Result:(415)389-8789 (2)TRIM的使用:select trim(fname) from customer; 删除前导和后继空格. select trim(leading ‘1’ from p

phoenix——提供hbase的sql操作的框架

phoenix——提供hbase的sql操作的框架 2014年01月06日 ⁄ hadoop及周边, hbase ⁄ 共 364字 ⁄ 字号 小 中 大 ⁄ 1条评论 ⁄ 阅读 1,522 views 次 是什么? hbase提供了海量数据的毫秒级查询.可见,hbase是个非常好的实时查询框架,缺点就是查询功能非常薄弱,仅限于通过行键查询.今天看到一个框架phoenix(直译做凤凰),非常美丽的框架,他提供了HBase的sql访问功能,可以使用标准的JDBC API操作去创建表.插入记录.查询数

【SQL实践】其他常用SQL汇总

[SQL实践]其他常用SQL汇总 1.联表更新 update students stu inner join course on course.STUDENT_ID=stu.id set stu.name=course.ID

常见得SQL实践

1)select * from table where state!=0 and state!=1  not in/not exists这样的尽量不要出现在搜索语句中 可以改为  select * from order where state in(2,3); 2)前导模糊查询是不能够使用索引的 select * from table desc like '%XX'; 然而非前导模糊查询可以是: select * from table where desc like 'XX%': 3)数据区分不

基于HBase的时间序列数据库(改进)

基本知识: 期望:1.利用高效的行.列键组织数据存储方式和使用平滑的数据持久策略缓解集群压力 2.利用zookeeper保障数据一致性(选举Leader) 提高性能的技术:数据压缩.索引技术.实体化视图 zookeeper 监控HRegionServer,保存Root Region实际地址,HMaster物理地址,减轻分布式应用从头开发协作服务的负担 HMaster管理HRegionServer负载均衡 日志根据Hadoop的SequenceFile存储 HBase主要处理实际数据文件和日志文件

hbase使用SQL查询

因为需要统计hbase中某个特定列不为空的行数,我寻思有没有支持直接用SQL查询的,查找了下,发现有两个可以支持:一个是apache phoenix,一个是Cloudera的Impala.如果用Impala,需要使用Cloudera的hadoop发行版.

HBase导入SQL Server数据库数据

在先前的几篇随笔中已经介绍了Hadoop.Zookeeper.Hbase的分布式框架搭建方案,目前已经搭建完成了一个包含11个节点的分布式集群.而对于HBase数据库的使用仅限于测试性质的增删改查指令,为了进一步熟悉分布式框架的使用,本文介绍将已有的数据从关系型数据库SQL Server中导入到HBase中的方法. 要完成从关系型数据库到HBase数据的迁移,我们需要使用Sqoop工具,Sqoop是Apache的一个独立项目,设计目的即是在Hadoop(Hive)和传统数据库(MySQL.pos

Alex 的 Hadoop 菜鸟教程: 第21课 不只是在HBase中用SQL:Phoenix

声明 本文基于 Centos6.x + CDH5.x 什么是Phoenix Phoenix的团队用了一句话概括Phoenix:"We put the SQL back in NoSQL" 意思是:我们把SQL又放回NoSQL去了!这边说的NoSQL专指HBase,意思是可以用SQL语句来查询Hbase,你可能会说:"Hive和Impala也可以啊!".但是Hive和Impala还可以查询文本文件,Phoenix的特点就是,它只能查Hbase,别的类型都不支持!但是也