HBase Indexer, 又名key value store indexer, 解析HBASE的日志,生成SOLR语法并插入,简单理解就是HBASE的数据同步到SOLR。
为什么会有这个东西的存在? HBASE不支持事务,也就意味着不支持二级索引,但是在实际的工作当中会发现二级索引的使用非常重要,查询如果光从rowkey来考虑设计,很难,或者说做不到,因此二级索引的组件就产生了。
有一个项目,我们数据都是存储在HBASE中,是一个在线应用,数据分析之后插入到HBASE,并通过echarts展示,图形展示没有问题,但是在有一个页面,因为是多接口调用,一部分信息来自传统数据库,一部分在HBASE,这样导致每个展示调用一次HBASE,信息越多,调用次数越多,这个页面需要大概3秒时间。因此需要考虑优化,图形展示有十几万数据HBASE都可以在1秒显示,但是简单的接口信息,但是调用次数很多反而慢,MySQL就没这个毛病,不用测试啥的,很显然是因为调用次数导致. 我的想法是用SOLR来试试,来代替查询HBASE。 因此才有今天的HBASE同步到SOLR的主题。
整个过程为:
1.为SOLR准备好配置
配置包含2个,一个是morphline-hbase-mapper.xml ,一个是solr schema.xml
morphline的作用是用来对应HBASE字段,field name是SOLR之后会显示的字段,VALUE是目前HBASE的字段
[root@datanode02 t_tool_health_score_final]# cat morphline-hbase-mapper.xml
[root@datanode02 conf]# cat schema.xml
id
粗体部分是SOLR字段的一些type, 是否索引等等设置。id字段是唯一键,就是HBASE的rowkey的对应了。
2.初始化SOLR instancedir
solrctl instancedir --create t_tool_health_score_final /opt/hbase-indexers/t_tool_health_score_final
3.建立SOLR collection
solrctl collection --create t_tool_health_score_final -s 2 -r 2
4.建立HBASE-SOLR关联,这样HBASE的更新就会自动同步到SOLR
hbase-indexer add-indexer --name t_tool_health_score_final \
--indexer-conf /opt/hbase-indexers/t_tool_health_score_final/morphline-hbase-mapper.xml \
--connection-param solr.zk=datanode03.isesol.com,datanode04.isesol.com,datanode02.isesol.com,cmserver.isesol.com,datanode01.isesol.com/solr \
--connection-param solr.collection=t_tool_health_score_final \
--zookeeper datanode01.isesol.com:2181,datanode02.isesol.com:2181,cmserver.isesol.com:2181,datanode04.isesol.com:2181,datanode03.isesol.com:2181
经过上面4步,SOLR的索引就建立好了,同步关系好了。这个时候SOLR只会同步最新的HBASE插入信息,老的数据是不会同步的,所以需要通过手动把HBASE刷到SOLR里。有一个mapreduce JOB专门用来刷数据,具体如下:
hadoop --config /etc/hadoop/conf jar /opt/cloudera/parcels/CDH-5.9.0-1.cdh5.9.0.p0.23/lib/hbase-solr/tools/hbase-indexer-mr-*-job.jar --conf /etc/hbase/conf/hbase-site.xml -D 'mapred.child.java.opts=-Xmx 1000m' --hbase-indexer-file /opt/hbase-indexers/t_tool_health_score_final/morphline-hbase-mapper.xml --zk-host datanode03.isesol.com,datanode04.isesol.com,datanode02.isesol.com,cmserver.isesol.com,datanode01.isesol.com/solr --collection t_tool_health_score_final --reducers 0
上面的这些介绍都是简要的,我并没有给出什么太详细的信息。如果有什么疑问,参阅:https://www.cloudera.com/documentation/enterprise/latest/topics/search_about_quick_start.html