最近要搞一个查询功能,是把hbase中的数据方便的查询出来.之前根据rowkey的查询方式,尽管有针对性设计过rowkey,有前缀查询,后缀查询,以及正则查询,但是实际上不够用.
参考了网络上的设计,建立二级索引是比较好的思路.于是就以solr存储hbase里面的列索引,实现了这个功能.
需要的组件有:
1.hbase
2.solr
3.key-value store indexer
4.CDH
5.zookeeper
6.hadoop
key-value store indexer 是一个基于hbase的replication特性而实现的能够动态的将hbase的二级索引同步给solr的组件,并且可以批量导入索引,增量同步索引,同步时延比较小,几乎近实时.
需要的组件看起来有些多,由于我们本来是用CDH管理组件,所以这里也是在CDH中搭建环境的.当然,单独安装组件也可以,不过容易出错,本人之前单独安装配置了solr,却感觉接下来无从下手,喜欢动手的可以一试.
在CDH中安装好以上环境.具体安装配置,方式,CDH有介绍.
…
…
7.cdh安装solr集群
8.安装key-value store indexer 集群
…
这里的集群,hadoop,hbase用了4台机器,其它的都用了3台机器,机器数量不一致,但是zookeeper,solr机器数量最好一致,因为zookeeper集群数量在2n+1时最为稳定.
SOLR-HBASE-INDEXER安装
1.cdh安装solr集群
solr的java heap内存配置改成1G.
2.安装key-value store indexer 集群
3.Hbase表需要开启REPLICATION复制功能
create 'table',{NAME => 'info', REPLICATION_SCOPE => 1}
其中1表示开启replication功能,0表示不开启,默认为0
4.对于已经创建的表可以使用如下命令
disable 'table' alter 'table',{NAME => 'info', REPLICATION_SCOPE => 1}
enable 'table'
5.生成实体配置文件, /testhbase/cdhsolr/testIndex是自定义路径,可以自己设置
solrctl instancedir --generate /testhbase/cdhsolr/testIndex
6.编辑生成好的scheme.xml文件
把hbase表中需要索引的列添加到scheme.xml filed节点,其中的name属性值要与Morphline.conf文件中的outputField属性值对应
<field name="COL1" type="string" indexed="true" stored="true" multiValued="false" required="true"/>
<field name="COL2" type="string" indexed="true" stored="true" multiValued="false" required="true"/>
修改solrconfig.xml 文件中autoCommit. 这里还可以调整同步间隔,比如把60000改成120000.
<autoCommit>
<maxTime>${solr.autoCommit.maxTime:60000}</maxTime>
<openSearcher>true</openSearcher>
</autoCommit>
7.创建collection实例并配置文件上传到zookee