【HBase + ElasticSearch最佳实践】

序言

最近项目组要为客户提供一个基于HBase和ElasticSearch的大数据存储搜索解决方案,提供HBase + ElasticSearch的标准解决方案样例,包括数据写入以及查询。以下简称ES。

需求分析

HBase的查询实现只提供两种方式:
1、按指定RowKey获取唯一一条记录,get方法(org.apache.hadoop.hbase.client.Get)
2、按指定的条件获取一批记录,scan方法(org.apache.hadoop.hbase.client.Scan)
用好HBase的第一步是要将rowkey设计好。大数据量查询最好从rowkey入手,ColumnValueFilter的速度是很慢的,HBase查询速度还是要依靠rowkey,所以根据业务逻辑把rowkey设计好,之后所有的查询都通过rowkey,是会非常快。 批量查询最好是用 scan的startkey endkey来做查询条件。
HBase在0.92之后引入了coprocessors,提供了一系列的钩子,让我们能够轻易实现访问控制和二级索引的特性。
当前平台内没有对HBase + ES的解决方案,需要给出一个能够指导用户使用HBase和ES组件的解决方案。
目前可能的需求场景如下:

  1. 批量索引:HBase上已有大量数据,需要在ES上建立索引;
  2. 增量索引:HBase上已有大量数据,提供HBase的rowkey,实现对ES的增量索引;
  3. 实时索引:HBase表持续进入数据,该表的数据要与ES的索引实时更新;

FI支持安全模式和普通模式,读取模式配置参数,安全模式则采用认证方式,普通模式则不需要认证。

方案前提

已经成功安装FI的HBase和ES组件,安全模式或者普通模式均可,安全模式就比普通模式多了认证而已,其余功能保持一致。

解决方案

HBase的工具HBase-SEP可以监测行变化事件
方案1:
如果是对写入数据性能要求高的业务场景,那么一份数据先写到HBase,然后再写到ES中,两个写入流程独立,这样可以达到性能最大,目前某公安厅使用该方案,每天需要写入数据200亿,6T数据,每个记录建20左右的索引。
缺点:可能存在数据的不一致性。

方案2:
这也是目前网上比较流行的方案,使用HBase的协处理监听数据在HBase中的变动,实时的更新ES中的索引,
缺点:协处理器会影响HBase的性能

由于山不清楚添加协处理器具体思路是把RowKey作为索引文档的ID,并把要进行查询的Column索引到ES。
用户输入Column值作为搜索条件,通过ES查询到该Column对应的RowKey值,再根据RowKey到HBase中查询完整的数据。

问题局限

这个方案目前有哪些问题或者局限?

结语

Reference

HBase建立二级索引的一些解决方案
HBase数据同步到ElasticSearch的方案
通过HBase Observer同步数据到ElasticSearch
使用Hbase协作器(Coprocessor)同步数据到ElasticSearch
HBase 2.0 协处理器实现 ES 数据同步
HBase的工具HBase-SEP可以监测行变化事件
ES+Hbase对接方案概述
Elasticsearch对Hbase中的数据建索引实现海量数据快速查询
Elasticsearch+Hbase实现海量数据秒回查询
Hbase多列范围查找(效率)

你可能感兴趣的:(Elasticsearch,HBase,HBase,ES)