基于Elasticsearch的HBase海量数据二级索引方案
2020-03-30郭雪峰
郭雪峰
摘要:针对HBase不提供二级索引、自带Coprocessor(协作器)不稳定及海量数据检索速度较慢等问题,设计了一种新的基于Elasticsearch的HBase二级索引方案ELHBase(ElasticsearchIndexing HBase)。该方案借助Flume、Kafka、HBase及Elastic-search搭建了一套数据采集、高速解析和录入大数据处理框架,使用Flume自定义Sink采集数据同时生成相应ID存入到Kafka,通过解析技术分别把数据存储到HBase,相应ID作为索引存储到ElasticSearch。该方案在不利用Coprocessor的基础上增加了直接查询ElasticSearch的接口,利用ElasticSearch提供的高效、灵活、多样的检索功能实现对HBase海量数据的快速检索,协同解决了HBase数据索引性能不高、协作器不稳定、ElasticSearch不适合大量数据存储等问题。最后,分别与SI-HBase、hindex进行了二级索引性能对比实验,证明了该方案在写入性能上较SIHBase更快、更稳定,查询速度上要远快于hindex。
关键词:海量数据;二级索引;ELHBase;自定义Sink;快速检索
中图分类号:TP31 文献标识码:A
文章编号:1009-3044(2020)01-0005-03
随着社会的发展和科技的进步,网络已成为人们分享和获取信息的通用工具,伴随着网络流量数据的不断交互,各类应用系统产生的日志数据越来越多,大数据时代到来。大数据被百度百科定义为:大数据是指无法用传统软件工具进行捕捉、处理及管理的海量数据集合,其含义是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。而如何安全保证海量日志数据能被快速存储、查询及可扩展性是当前研究的热点和难点。
随互联通信技术不断改良和升级,大数据技术可以大致概括为四部分内容:数据采集、数据处理、数据存储和数据查询,每部分内容包括不同的组件去实现各自的功能。传统的关系数据库是采用二维表格数据模型不能够有效地处理多维数据,不能有效处理互联网应用中半结构化和非结构化的海量数据,且支撑容量非常有限,在其达到一定规模时,很容易发生死锁等并发问题,导致其读写性能下降严重。因此,HBase数据库在大数据领域的应用应运而生。
Hbase是一个面向列存储的分布式存储系统,不同于传统数据库,它的优点在于可以实现高性能的并发读写操作,同时Hbase还会自动对数据进行透明的切分,这样就使得存储本身具有了水平伸缩性。同样HBase也存在缺点嗍,它不能支持条件查詢,只支持按照rowkey来查询,暂时不能支持Master server的故障切换,当Master宕机后,整个存储系统就会挂掉。
为解决快速检索的功能,张榆等为了解决在海量空间文本中快速检索的问题,在HBase的基础上设计了一种空间文本索引方案SK-HBase,该方案自建索引以达到快速检索HBase中的空间文本数据。Cheng Pengsen等针对存储空间不足问题,在HBase的基础上构建倒排索引表,并在此基础上进一步建立压缩和解压算法。卓海艺针对HBase查询速度慢问题,利用HBase自带的协作器开发出索引自动生成组件及更新组件,同时参考1THBase方案构造和维护二级索引表。华为公司设计了二级索引方案hin-dexN,该方案实现了针对不同的数据表使用HBase自带协作器建立索引,它提供了一种自动生成索引的方法,当进行数据操作时会自动实现索引的维护,具有便捷化的索引管理功能。王文贤等针对华为hindex方案难以满足海量数据高速检索问题,设计了基于Solr的HBase二级索引方案SIHBase(SolrIndexing HBase)。该方法使用HBase的协作器实现在Solr中自动为HBase建立和维护二级索引,提高了数据检索速度,但co-processor不稳定问题仍在。HBase官方和开源社区对其二级索引问题,仍在不断地探索中。
针对HBase不提供二级索引、自带Coprocessor(协作器)不稳定及海量数据检索速度较慢等问题,文章设计了基于Elastic-search的HBase二级索引方案ELHBase(Elasticsearch IndexingHBasel。该方案利用Flume、Kafka、HBase及Elasticsearch搭建了一套数据采集、高速解析和录入大数据处理框架,该方案在不利用Coprocessor的基础上增加了直接查询ElasticSearch的接口,利用ElasticSearch提供的高效、灵活、多样的检索功能实现对HBase海量数据的快速检索,协同解决了HBase数据索引性能不高、Coprocessor不稳定、ElasticSearch不适合大量数据存储等问题。
1二级索引方案设计
首先,对HBase二级索引方案的基本原理进行简单介绍,然后,分析了华为针对该问题提出的hindex二级索引方案与针对检索速度问题提出的基于Solr的HBase二级索引方案SIH-Base,前者虽然解决了HBase在检索非主键字段时遇到的问题,但难以满足对检索的快速响应,后者虽然提升了检索速度,但协作器存在不稳定问题。最后,本文为解决以上问题提出了基于Elasticsearch的HBase二级索引方案ELHBase(Elastic-search Indexing HBase)。
1.1设计原理
由于HBase里面只有rowkey作为一级索引,因此如果要对数据库里的非mwkey字段进行数据检索和查询,往往要通过MapReduce/Spark等分布式计算框架进行,硬件资源消耗和时间延迟都会比较高。
为了HBase的数据查询更高效、适应更多的场景,诸如使用非rowkey字段检索也能做到秒级响应,或者支持各个字段进行模糊查询和多字段组合查询等,因此需要在HBase上面构建二级索引,以满足现实中更复杂多变的业务需求。二级索引是对于目标记录的某个或某些列而设立的“键一值”数据结构,以列的值为键,以记录的rowkey为值,假如按照这些列进行查询时,就可以检索出对应的“键一值”进而达到快速检索记录的目的。
1.2 hindex方案介绍
hindex架构在ClientExt中设定索引细节,在Balancer中收集信息,在Coprocessor中管理二级索引数据。hindex二级索引方案的框架如图1所示。
在创建表的时候,在同一个region server上创建索引表,且一一对应。在主表中插入某条数据后,用Coprocessor将索引列写到索引表中去,当一个查询到来的时候,通过Coprocessor钩子,先从索引表中查询范围rowkey,然后再从主表相关rowkey中扫描获取最终数据。
1.3SIHBase方案介绍
本方案从HBase的客户端考虑,加入了具有高速检索能力的Solr,按照数据与索引分开存储的思想,实现海量数据的高速检索功能。其整体架构如下图2所示。
Client Ext客户端主要针对Solr中的索引查询功能进行了扩展。当表中数据出现增、删、改的情况下,通过Solr IndexingCopmcessor可以实时更新Solr中的索引,并且当出现宕机和修复数据时能使得Solr索引数据和HBase表中数据保持一致。Solr主要存放和管理索引数据,利用Solr可以达到高效检索的目的。
但当实时建立索引时,Solr会产生io阻塞,查询性能较差,伴随着数据量的不断增加,Solr的搜索效率会变得更低,而Elasticsearch却无明显变化,完全支持Apache Lucene的接近实时的搜索。
1.4基于Elastiesearch的HBase二级索引方案ELHBase
本文不同于以往的思路,利用Flume、Kafka、HBase及Elas-ticsearch搭建了一套数据采集、高速解析和录入大数据处理框架,其整体架构如图3所示。
本方案利用Flume采集数据,通过自定义sink的方式,在获取消息的同时生成相应ID一块存入到Kafka的Topic中,其中ID部分是由英文字母和数字随机生成,共有31个字符。然后通过自定义sink解析Topic中的数据分别把消息存储到HBase,相应ID作为索引(rowkey)存储到ElasticSearch,保证数据与索引的一致性。ElasticSearch索引速度快,扩展方便,性能优异,但在功能上不适合作为数据库使用,因此本方案ElasticSearch中只存放ID。用户可以通过ElasticSearch进行多条件的复杂查询,获取到满足条件的rowkey集合后,进而在HBase中以row-key快速查询获取数据。
该方案在不利用Coprocessor的基础上增加了直接查询ElasticSearch的接口,利用ElasticSearch提供的高效、灵活、多样的检索功能实现对HBase海量数据的快速检索,协同解決了HBase数据索引性能不高、协作器不稳定、ElasticSearch不适合大量数据存储等问题。
2EIHBase二级索引性能分析
本章针对EIHBase方案的性能进行了对比分析,共使用三台物理服务器进行测试,三台服务器的操作系统为CentOS 6,7,CPU为Intel(R)Xeon(R)E5-2630 v3@2.4GHz(32核),内存为32GB。
集群中节点信息为:一台作为master节点,两台作为slave节点。软件版本信息见下表1。
测试中使用的测试数据是利用shell脚本生成的由英文字母与阿拉伯数字组成的66位字符串,共计10亿条记录。本方案分别与二级索引方案hindex以及SIHBase方案进行数据写入性能和数据检索性能对比实验。测试结果如下表2所示:
如上表2所示是三个二级索引方案的检索性能对比实验结果,由此可知,在海量数据查询中,本文提出的EIHBase方案较华为提出的hindex方案在查询速度方面具有明显优势,在写入性能上较SIHBase更快、更稳定。因此,本方案能够基本满足对HBase快速检索的需求。
3结束语
本文详细分析了华为针对该问题提出的hindex二级索引方案与针对检索速度问题提出的基于Solr的HBase二级索引方案SIHBase,但这些技术本身各有优缺点,且目前对于HBase的二级索引和全文检索问题的研究仍未明确统一,只能够满足部分场景需求。因此,针对上述问题提出一种新的基于Elastic-search的HBase二级索引方案ELHBase,并进行了性能分析,证明了该方案的可行性。