您好, 访客   登录/注册

大数据环境下基于Hbase的分布式查询优化研究

来源:用户上传      作者: 杜晓东

  摘 要:大数据环境下数据库所存储的数据量呈爆炸式增长,如何保持高吞吐率并让客户得到满意的数据查询和处理结果,已经成为一个急需解决的问题。金融、电信以及互联网等行业要求企业的统计分析平台能支持分布式、高可用性和可扩展性的分布式查询环境,以便能及时高效的完成查询分析任务,做出更合理的业务决策。目前已经有很多公司在一定范围内将应用从关系数据库向Hbase进行迁移,但是大多数都是和Hadoop MapReduce或Hive结合使用,导致数据量增加后的分布式查询耗时过长,性能也随之下降。此外Hbase也有其自身的局限性,不能兼容传统数据库上的SQL应用。本文在分析了现有分布式数据库系统平台并深入研究Hbase的实现原理及高级特性的基础上,提出了基于Hbase的可扩展性查询优化方案(Hbase DSPE),即把Hbase的优点和SQL的易用性结合。这样做有助于对复杂SQL查询的优化,可以充分利用Hbase的诸多高级特性进行查询性能调优,对企业在大数据环境下从传统关系数据库向大数据平台的迁移具有现实的指导意义。
  关键词:大数据;分布式查询;Hbase;SQL解析引擎;查询优化
  中图分类号:TP311.13
  大数据(Big Data)是近年来科学研究和商业领域的新的发展方向,运用于大数据的系统可统一管理地理上分布的异构计算或存储数据,组成功能类似于大型数据库服务器但相对松散耦合的资源群体,用来解决海量数据的分布式存储和查询问题。大数据环境下分布式数据处理目前已得到广泛应用,很多世界500强软件公司或科研机构都在从事相关方面的研究与应用。
  1 大数据环境下的分布式查询
  大数据时代的分布式查询已经随处可见,金融、电信及互联网行业对大数据环境下数据库集群的响应速度、可扩展性和查询的整体性能都提出了更高的要求。由于大数据业务的多样化发展,有越来越多的业务系统的需求开始发生了变化,所以如何提高大数据环境下的数据处理及查询的效率,是目前新的研究方向。
  1.1 研究现状。海量数据的分布式查询技术目前已得到广泛应用,目前主流实现有如下三种方式:(1)传统关系型数据库分布式查询。传统关系型数据库的分布式查询主要存在于网络环境中,由于数据的分布性,关系数据库一次查询所操纵的对象可能分布于不同的网络节点中,由此带来的开销和执行速度就会与Hbase(基于列存储)不一样,并且查询优化的所考虑的因素很复杂,节点间的通信代价和分布式处理成为不可回避的问题[1]。此外,传统关系数据库在分布式查询时做了太多的事情,比如事务,B+索引等,导致关系数据库本身代码很复杂,同时对于海量数据的查询比较慢[2]。而对于很多业务场景来说,查询可能只用到数据库的部分功能,却要初始化复杂操作所要用到的代码。所以,传统关系数据库并不适用于大数据环境下的分布式查询。(2)Apache Hadoop Hive分布式查询。Hadoop Hive是一种数据分析框架,可以支持通过类似SQL语句的语法来操作Hbase中的数据。大多数企业都有对结构化查询语言(SQL)有丰富经验的员工,Hive允许这些数据库开发人员或者数据分析人员在无需了解Java编程语言或者Hbase API的情况下使用Hbase数据库。但是Hive不能完全兼容现有的关系型数据库,所以执行SQL的速度比较慢,从而导致查询效率不高。尤其是对于那些实时、简单的查询,使用Hive可能会带来很多额外的开销,如:查询的初始化、变量的转换以及其他冗余且耗时的操作。虽然目前已经有一些公司采用Hadoop Hive+Hbase对海量数据进行处理,但是实验证明对于一些简单的查询Hive在没有执行任何实质性的查询任务前已经有超过10秒的开销,包括初始化,SQL解析等[2]。(3)“NoSQL”数据库分布式查询。“Nosql”数据库的典型代表是Hadoop Hbase。Hbase已广泛应用于金融及互联网领域,支持众多业务应用程序和金融风险管理应用程序。Hbase的数据由HDFS天然的做了数据冗余,数据的可靠高己经证明了HDFS集群的安全性,以及服务于大数据的能力。而且Hbase本身的数据读写服务没有单点的限制,服务能力可以随服务器的增长而线性增长,达到几十上百台的规模[3]。但是,如果用户想迁移传统数据库到Hbase上,就必须遵循Hbase API的编码规范。这使得程序开发人员要用Hbase来提高分布式查询能力,必须针对Hbase开发相应的接口,从而增加了很多开发和维护的工作量。而且对于大多数从事分布式大数据处理的数据库管理人员(DBA)来讲,使用SQL这样易于理解的语言可以使人们能够更加轻松地使用HBase。相对于学习另一套Hbase私有API,开发人员可以使用熟悉的语言来读写数据[4]。
  1.2 Hbase分布式数据库框架。Hbase是一个稀疏的、分布的、持续多维度的排序映射数组,它模仿并提供了基于Google文件系统的Big Table数据库的所有功能[5]。Hbase的目标是处理非常庞大的表,可以用普通的计算机处理超过10亿行数据,并且有数百万列元素组成的数据表。为了提高数据可靠性和系统的健壮性,Hbase使用HDFS分布式文件系统或者Hadoop作为其存储基础,其服务器体系结构遵循简单的主从服务器架构。Hbase由一个HMaster主服务器协调一个或多个Hregion服务器组成的集群,同时也依赖于Zookeeper。在针对Hbase的应用中,涉及到角色依次为:Client,Zookeeper,HMaster,HRegionServer。他们在Hbase体系结构中各司其职并且共同提供了Hbase分布式存储及查询服务[6]。
  1.3 基于Hbase的分布式查询应用存在的问题。Hbase分布式数据库数据存储具有一定的哈希性质,非常适合处理Key/Value类型的数据以及结构稀疏的大规模数据。一次写入多次读取是Hbase数据库最大的特色,而这种特色正好满足分析系统的要求[7]。通过对Hbase分布式数据库进行的性能测试和分析,我们了解到Hbase在执行大数据量的查询任务时提交Scan的操作耗时较长,影响到了系统的处理并行任务的响应时间。不管是在客户端还是在服务器端,查询任务初始化的时间过长导致整个实时查询操作的响应时间增加,影响了Hbase数据库并行处理查询任务的能力。此外,大多数企业针对大数据应用的程序和处理逻辑都是基于传统的关系数据库上的SQL语句,所以使传统数据库在不改变其应用程序和处理逻辑的情况下迁移到大数据Hbase平台,将是未来大数据平台研究的一个全新的发展方向。   2 基于Hbase的大数据查询优化研究
  Hbase本身提供的API中,只有Scan是用来查询数据的,这使得程序开发人员要用Hbase来提高分布式查询能力,必须针对Hbase开发相应的接口,从而增加了很多开发和维护的工作量。现有的基于Hbase的SQL解决方案(如Hive等)有很多局限性,并且当数据量变大时会遇到阻碍,查询效率也随之降低[8]。所以本文的研究目标就是为了兼容以前从关系型数据库中查询数据的接口,让Hbase可以通过标准SQL语句来查询Hbase表中的数据。因此,我们需要将SQL语句转成Hbase的Scan。本文研究计划基于Hbase重新设计并实现SQL解析引擎,即在HBase上提供SQL API接口。Hbase中有一个类似MapReduce的高级分析组件名为协处理器(Coprocessor)[9]。Hbase协处理器是一套通信框架,能够在客户端向RegionServer注入代码并执行获取结果。本文的前期研究通过对Hbase协处理器的测试以及简单实验,证明这种设计方案是可以实现的。
  2.1 分布式SQL解析引擎。本文对Hbase的查询优化研究运用SQL解析引擎技术,使目前主流的分布式数据库Hbase支持企业现有的复杂数据库查询应用。基于Hbase的SQL解析引擎能够为Hbase提供企业级的分布式处理能力,可以将SQL查询任务的工作负载分配给多个分布式处理单元。同时可以将企业级分布式数据查询引入到业务分析应用中,使得用户可以基于Hbase分布式数据库集群并采用SQL编程模型来处理海量数据。
  Hbase数据库对SQL解析引擎的支持主要解决部署在现有大数据平台上的Hbase查询应用面临的性能瓶颈,以及传统关系数据库查询向大数据分布式查询平台的迁移。主要实现步骤及功能包括:(1)基于Hbase API,研究并设计符合SQL规范的SQL解析引擎,使得应用程序开发者可以应用基于Hbase SQL解析引擎的分布式查询达到与传统关系型数据库SQL相同的效果。(2)扩展Hbase协处理器API,使SQL解析引擎可以与Hbase实现无缝集成,以满足变化的的查询负载管理的要求。(3)对应用程序编程接口(API)的支持:Apache Hadoop的子项目包括Hadoop MapReduce API,Hive和Spark;利用Apache Hadoop数据访问框架来连接分布式文件系统和数据库架构,从而避免了现有数据的迁移,主要研究对HDFS,GPFS的支持。
  最后,我们还将对大数据环境下基于Hbase的分布式SQL解析引擎进行性能测试及调优。
  2.2 系统架构设计。本文的设计将基于Hbase分布式数据库,设计并实现SQL解析引擎,然后通过Hbase协处理器框架提供的API注入到Hbase服务器并且部署到HRegionServer上,作为Hbase数据查询的分布式SQL解析引擎,即:Hbase Distributed SQL Parse Engine,简称Hbase DSPE。Hbase DSPE中包含四大核心模块:(1)DSPE Client(客户端):提供基于JDBC的SQL客户端。DSPE Client部署在Hbase客户端,其封装了对JDBC的实现,同时将用户的SQL进行必要的检查,并且转换成对Hbase友好的SQL,如包含Row Key条件的Select查询语句。(2)DSPE Master(主服务器):提供分布式SQL解析引擎。DSPE Master部署在Hbase的HRegionServer上,可以将DSPE客户端提交过来的SQL查询请求进行解析,转换为一个或多个HBase能够识别的Scan或者Put操作(Schema转换,SQL schema转换为底层Hbase中数据表的Schema,通过解析SQL语句的方式实现查询或者操作Hbase的数据)。如果是查询请求,就利用Scan编排执行并获取数据,然后将获取回来的数据再根据SQL进行过滤和计算,以生成标准的JDBC结果集,返回给客户端。如果是其他请求,那么就将Hbase的操作结果返回给客户端。整个SQL语句解析与执行完成后的组装通过Hbase协处理器实现。(3)DSPE Coprocessor(协处理器):提供DSPE和Hbase集成的API,通过Hbase协处理器实现。(4)DSPE Common Interface(通用接口):提供公共基础类库以及SQL节点的Java对象。DSPE Common Interface模块也包含一些公共的基础Bean,比如用来表征一行记录的类(Record Class),DSPE Client和DSPE Master都会依赖其提供的类库以及API。
  图1是HbaseDSPE中四个主要模块的组织架构图:
  图1 DSPE中四个模块的组织架构图
  2.3 各模块详细设计:(1)DSPE客户端。DSPE Client提供了一个客户端可嵌入的JDBC驱动。因为实现了SQL语言查询,客户端可以不再使用HBase自带的Client API,而是使用DSPE Client,从而使客户端所需编写的代码量大幅度降低,同时也使Hbase API的易用性、可扩展性大大提高。DSPE Client客户端的设计主要包含以下几个部分:JDBC连接以及驱动开发,SQL提交工具,输入输出的压缩与加密,与ZooKeeper的接口等。此外,DSPE Client也会维护一些Cache来加快对Hbase的访问(使用Hbase的HMemstore),比如HRegion的位置信息。(2)DSPE主服务器。DSPE Master(主服务器)是本设计方案的核心,其中包括DSPE的核心组件SQL解析引擎。DSPE Master的设计基于Hbase API,将DSPE Client提交过来的SQL查询请求进行解析,转换为一个或多个HBase能够识别的Scan(Schema转换,SQL Schema转换为底层Hbase中数据表的Schema,通过解析SQL语句的方式实现Scan Hbase的数据),利用Scan编排执行并获取数据,然后将获取回来的数据再根据SQL进行过滤和计算,以生成标准的JDBC结果集,返回给客户端。整个SQL语句解析与执行完成后的组装通过Hbase协处理器实现。从而达到直接使用HBase API、Coprocessor协处理器与自定义过滤器以提高查询效率。DSPE Master实现的主要功能模块有:SQL解析引擎、SQL语法节点(对象)、多线程分布式查询、查询结果缓存以及对事务(Transaction)的有限支持。(3)DSPE协处理器。DSPE协处理器的实现基于Hbase 协处理器API,将DSPE Master封装成为一个Coprocessor Observer。同时,利用Coprocessor EndPoint实现元数据(Metadata)的处理(类似于Hive中对元数据的处理,主要用来做性能调优),并部署在Hbase的HRegionServer上来实现接收DSPE客户端的请求。(4)DSPE通用接口。DSPE通用接口的实现主要基于Hbase公共基础类库API,提供DSPE需要的公共基础类库以及SQL节点的Java对象。DSPE Common Interface模块也包含一些公共的基础Bean,比如用来表征一行记录的类(Record Class),DSPE Client和DSPE Master都会依赖其提供的类库以及API。此外,还采用开放式架构以支持Hadoop Hbase以外的其他规范,如Hadoop分布式文件系统(HDFS)异构开发环境以及编程模型如Spark。(5)DSPE的查询处理流程及性能测试。DSPE可以通过标注SQL语句来查询Hbase中的表数据,并且支持   为了验证Hbase DSPE在大数据环境下的查询性能,我们使用大规模的数据对Hbase DSPE进行性能测试(1000万条记录行数),并且针对Hive以及Hbase本身进行了基准比较测试。测试环境由6台机器组成Hbase集群,并且部署Hbase DSPE,同时在Hbase集群上安装Hive,使Hbase集群其同时兼做Hive集群。我们可以从表1中看出Hbase DSPE的查询性能要胜过Hive近2.5倍。
  3 结束语
  本文设计的基于Hbase的SQL解析引擎将提供与传统SQL编程模型完全兼容的分布式查询平台,并且直接使用HBase API和协处理器(Coprocessor),从而实现向外扩展的大数据分布式处理机制。通过性能测试我们可以看Hbase DSPE相对于Hive在查询性能上的优越性,并且对于同样使用了HBase API、协同处理器及自定义过滤器的Impala与OpenTSDB来说,Hbase DSPE进行相似查询的速度预期也会更快。由于使用分布式批处理查询,Hbase DSPE可支持超过1000个并发的查询任务,将大幅度提高服务器的利用率。此外,Hbase DSPE还可以应用Hbase分布式数据库的诸多高级特性,使用户对SQL查询的优化可以通过配置Hbase的各种参数来实现,而不需要进行复杂的SQL查询语句的优化。因此,基于Hbase的SQL解析引擎DSPE是值得进一步深入研究的。
  Hbase DSPE未来还计划支持如Cloudera,Spark等分布式数据库以及大数据编程模型,并且逐步在大数据领域的分布式查询应用中进行推广、应用,形成开放的DSPE API接口,努力成为公共的大数据分布式查询解决方案。
  参考文献:
  [1]张旭中.分布式数据库查询优化技术[D].电子科技大学,2003.
  [2]Jeffrey Dean,Sanjay Ghemawat.MapReduce:Simplified Data Processing on Large Clusters.Google,Inc,2004.
  [3]Lars George.“Hbase:The Definitive Guide”.1st edition,O'Reilly Media,2008.
  [4]http://hbase.apache.org/book/book.html.Apache Hbase Ref Guide.Hbase Website,2012.
  [5]李崇欣.分布式数据库HBase快照的设计与实现[D].浙江大学,2011.
  [6]Mehul Nalin Vora.Hadoop-HBase for Large-Scale Data.Innovation Labs,PERC Tata Consultancy Services(TCS)Ltd.Mumbai,India,2011.
  [7]Chongxin Li.Transforming Relational Database into HBase:A Case Study.Zhejiang University,Hangzhou,China,2011.
  [8]Hive.http://hive.apache.org.
  [9]Lars George.“Hbase:The Definitive Guide”.1st edition,O'Reilly Media,2008.
  作者简介:杜晓东(1983.09-),男,内蒙古呼和浩特人,现就职于IBM系统与科技开发中心,研发工程师,软件工程硕士学位,研究方向:云计算、大数据环境下的高性能网格计算。
  作者单位:上海大学 计算机工程与科学学院,上海 200122
转载注明来源:https://www.xzbu.com/8/view-6084437.htm