基于key-Value store indexer ,solrcloud创建Hbase二级索引
首先安装solrcloud,在cloudera manager 上添加solr服务,然后添加key-Value store indexer服务。
首先设置HBASE表的列族REPLICATION_SCOP =>1 如:
disable ‘cloud’
alter ‘cloud‘ ,{NAME => ‘datainfo‘,REPLICATION_SCOPE =>‘1‘}
enable ‘cloud’
生成实体配置文件, /data/hbase-indexer/User是自定义路径,可以自己设置
solrctl instancedir --generate /data/hbase-indexer/User
编辑scheme.xml文件
vim /data/hbase-indexer/User/conf/scheme.xml
把hbase表中需要索引的列添加到scheme.xml filed节点,其中的name属性值要与Morphline.conf文件中的outputField属性值对应,例如:
那么Morphline.conf文件中的outputField: fileContent
上图中的fileContent,fileName为下面solr中索引列,这两个字段分别对应于Morphline.conf文件中的outputField属性值
创建collection实例并配置文件上传到zookeeper,命令:
solrctl instancedir --create User /data/hbase-indexer/User
上传到zookeeper之后,其他节点就可以从zookeeper下载配置文件。接下来创建collection,命令:
solrctl collection --create User
创建Lily HBase Indexer配置
在Hbase-solr的安装目录/usr/lib/hbase-solr/下,创建morphline-hbase-mapper.xml文件,命令:
vim /usr/lib/hbase-solr/hbase-indexer/morphline-hbase-mapper.xml
注意,morphlineId 的value是对应Key-Value Store Indexer 中配置文件Morphlines.conf 中morphlines 属性id值
修改Morphline配置文件
具体操作:进入Key-Value Store Indexer面板->配置->查看和编辑->属性-Morphline文件,如下图:
编辑该文件:如
InputColumn : hbase表中的列名称
OutputFiled:solr索引列名称
注册Lily HBase Indexer configuration 和 Lily Hbase Indexer Service
命令:
hbase-indexer add-indexer \
--name cloudIndexer \
--indexer-conf /usr/lib/hbase-solr/hbase-indexer /morphline-hbase-mapper.xml
--connection-param solr.zk=pengrui-wizdata-sv4:2181,pengrui-wizdata-sv3:2181,pengrui-wizdata-sv2:2181/solr \
--connection-param solr.collection=User \
--zookeeper pengrui-wizdata-sv4:2181,pengrui-wizdata-sv3:2181,pengrui-wizdata-sv2:2181
验证索引器是否成功创建
hbase-indexer list-indexers
如图:
测试数据是否索引到solr
首先往hbase表被索引列添加数据,然后在cloudera manager主页面打开,solr服务的web UI页面,点击query。如下图:
拓展命令
Scheme.xml新增索引字段
执行以下命令更新配置
solrctl instancedir --update User /data/hbase-indexer/User
solrctl collection --reload User
查看collection命令:solrctl collection –list
添加多个索引器
当你需要创建多个索引时,可以按下面说明操作。
一个solr 索引对应一个collection,一个collection对一个morphline-hbase-mapper.xml和Morphlines.conf。当需要配置多个索引时,在Morphlines.conf的morphlines节点添加对应索引模块,以id区分,如下面代码模块:
morphlines : [
{
id : userMap
importCommands : ["org.kitesdk.**", "com.ngdata.**"]
commands : [
{
extractHBaseCells {
mappings : [
{
inputColumn : "datainfo:fileContent"
outputField : "fileContent"
type : string
source : value
},
{
inputColumn : "datainfo:fileName"
outputField : "fileName"
type : string
source : value
}
]
}
}
{ logDebug { format : "output record: {}", args : ["@{}"] } }
]
}
{
id : scoreMap
importCommands : ["org.kitesdk.**", "com.ngdata.**"]
commands : [
{
extractHBaseCells {
mappings : [
{
inputColumn : "course:math"
outputField : "math"
type : int
source : value
},
{
inputColumn : "course:english"
outputField : "english_"
type : int
source : value
}
]
}
}
{ logDebug { format : "output record: {}", args : ["@{}"] } }
]
}
]
添加IK分词器
在/usr/lib/solr/webapps/solr/WEB-INF目录下创建classes目录
IK Analyzer 2012FF_hf1.zip 解压这个文件
把IKAnalyzer2012FF_u1.jar添加到/usr/lib/solr/webapps/solr/WEB-INF/lib/目录
把IKAnalyzer.cfg.xml 和 stopword.dic添加到classes目录
重启solr服务
修改schema.xml文件,添加: