博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于Solr实现HBase的二级索引
阅读量:6759 次
发布时间:2019-06-26

本文共 2503 字,大约阅读时间需要 8 分钟。

文章来源:

  

实现目的:

  由于hbase基于行健有序存储,在查询时使用行健十分高效,然后想要实现关系型数据库那样可以随意组合的多条件查询、查询总记录数、分页等就比较麻烦了。想要实现这样的功能,我们可以采用两种方法:

  1. 使用hbase提供的filter,
  2. 自己实现二级索引,通过二级索引 查询多符合条件的行健,然后再查询hbase.

  第一种方法不多说了,使用起来很方便,但是局限性也很大,hbase的filter是直接扫记录的,如果数据范围很大,会导致查询速度很慢. 

  所以如果能先使 用行健把记录缩小到一个较小范围,那么就比较适合,否则就不适用了.此外该方法不能解决获取总数的为.

  第二种是适用范围就比较广泛了,不过根据实现二级索引的方式解决的问题也不同.这里我们选择solr主要是因为solr可以很轻松实现各种查询(本来就是全文检索引擎).

实现思路:

 

  其实hbase结合solr实现方法还是比较简单的,重点在于一些实现细节上.

 

  将hbase记录写入solr的关键就在于hbase提供的Coprocessor,Coprocessor提供了两个实现:endpoint和observer, 

  endpoint相当于关系型数据库的存储过程,而observer则相当于 触 发器.说到这相信大家应该就明白了,我们要利用的就是observer. 
  observer允许我们在记录put前后做一些处理,而我们就是通过postPut将记录同步写入solr(关于Coprocessor具体内容请自行查资料).

 

  而写入solr这块就比较简单了,主要是要考虑性能!默认情况下hbase每写一条数据就会向出发一次postPut, 

  如果直接提交个solr,速度会非常慢,而且如果有异常处理起来也会非常的麻烦.因此要自己实现一个本地可持久化的队列,通过后台线程异步向向solr提交.

限制:不能单独删除指定的列簇(${Family}),必须是删除行(Row),或者删除指定的列(${Family}#${Qualifier})!

部署:

 

在Solr的schema.xml文件里必须有如下动态字段:

  solr里的每一条Dcoument对应HBase表里的一条记录

  每一条Dcoument里缺省都会有4个字段:
  id格式是:${TableName}#${RowKey}
  t_s格式是:${TableName}
  r_s格式是:${RowKey}
  u_dt格式是:${d当前更新时的日期和时间}
  其他字段格式是:${Family}#${Qualifier}
  如果HBase表里的字段需要在solr里索引,那么Qualifier设计为已_(i|l|f|d|b|s|t|dt)结尾的solr动态字段!

停止HBase:

在master hbase server上执行:

${HBASE_HOME}/bin/stop-hbase.sh

修改所有Region Servers$(HBASE_HOME}/conf/hbase-site.xml配置文件:

在最后添加:

hbase.coprocessor.abortonerror
true
hbase.coprocessor.region.classes
wjw.hbase.solr.SolrRegionObserver
hbase.solr.queueDir
/tmp
hbase.solr.solrUrl
http://${solrHost1}:8983/solr/,http://${solrHost2}:8983/solr/
hbase.solr.coreName
hbase
hbase.solr.connectTimeout
60
hbase.solr.readTimeout
60

启动HBase:

在master hbase server上执行:

${HBASE_HOME}/bin/start-hbase.sh

测试:

/opt/hbase/bin/hbase shell>status>create 'demotable','col'>describe  'demotable'>list 'demotable'>put 'demotable','myrow-1','col:q1','value-1'>put 'demotable','myrow-1','col:q2_s','value-2-测试'>put 'demotable','myrow-1','col:name_t','张三 李四 王五'>put 'demotable','myrow-1','col:q3_s','value-3-测试'>scan 'demotable'

 

转载地址:http://ctweo.baihongyu.com/

你可能感兴趣的文章
Intellij IDEA创建的Web项目配置Tomcat并启动Maven项目
查看>>
SpringMVC上传图片总结(1)---常规方法进行图片上传,使用了MultipartFile、MultipartHttpServletRequest...
查看>>
libcgi库安装
查看>>
小米:开源不仅要站在巨人的肩膀上,还要为巨人指方向
查看>>
百度启动高管退休计划,总裁张亚勤今年十月退休
查看>>
RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->新增“行政区域管理”,同时大批量树采用异步加载...
查看>>
SpringBoot启动时的Banner设置
查看>>
xming + putty 搭建远程图形化ssh访问ubuntu 14.04
查看>>
【Sigma敏捷版系列文章】从运行流程和list-watch看kubernetes系统的设计理念
查看>>
两列布局——但只用右浮动
查看>>
GNOME 网页浏览器 Epiphany 将要进行 5 项改进
查看>>
今年CES最大亮点:智能语音助手正成为新趋势
查看>>
Windows Mysql Server重启, log-bin路径配置
查看>>
刘剑锋:友云采助力企业数字化采购的新发展
查看>>
Rainbond 5.0.4 发布,做最好用的云应用操作系统
查看>>
亚马逊宣布与西云数据达成合作,旨在进一步扩大中国业务
查看>>
java nio的基础--缓冲区
查看>>
负载均衡沙龙活动第二期现场问答汇集
查看>>
GBDT原理及利用GBDT构造新的特征-Python实现
查看>>
Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析(10)...
查看>>