转载请注明出处!!!
背景
公司用户画像构建,数据规模2千万+,维度120+,需要针对所有维度提供便利的查询索引,从数据性质上来看,并没有分词的必要,所以本次并没有配置ik中文分词器
环境准备(cdh)
hbase集群
Key-Value Store Indexer集群
solr集群
zk集群
一:配置solr,创建collection
1、将安装目录下的配置文件copy到数据目录下(相当于根据demo创建一个栗子),并配置conf/schemer.xml文件
solrctl instancedir --generate /home/user_00/solr_test/user_info
1.1进入目录,配置conf下的schema.xml,添加想要索引的列,这里的列名要与下文中的Morphlines.conf中的数据列,名称一致。配置文件不贴了,注意,_root_,_version_等预留列不要删除,此外<uniqueKey>id</uniqueKey>,这个与配置文件中的id统一,默认取hbase的主键ROW列。建议直接添加自己的列即可,其他的配置可以不动
2、将配置文件上传到zk中,以便于其他机器获取分发
solrctl instancedir --create user_info /home/user_00/solr_test/user_info
2.1 更新配置(配置更新时用)
solrctl instancedir --update user_info /home/user_00/solr_test/user_info
3、创建collection(集群有三台机器,所以share 3 这里指定副本1,默认也是1,注意副本数*分片数不要大于机器数)
solrctl collection --create user_info -s 3 -r 1
3.1 重加载数据集(配置更新时用)
solrctl collection --reload user_info
3.2 删除数据集(配置更新时用)
solrctl collection --delete user_info
4、查询创建的solr core
solrctl collection --list
二:配置hbase,开启复制功能
1、开启复制(安装完Key-Value Store Indexer后默认开启)
2、创建支持复制hbase表
//这个地方的建表只有一个region,列簇名也稍显臃肿,严重影响手动构建索引的速度,此表测试用忍了,正确建表方式为预分区,见后续hbase bulkload的建表.
create 'data_db_t_data_user_info_new', {NAME => 'user_info_new', REPLICATION_SCOPE => 1}
三:配置Key-Value Store Indexer
打开cdh中Key-Value Store Indexer组件配置,Morphlines文件添加配置如下:(此文件格式缩进等比较严格)
SOLR_LOCATOR : {
# Name of solr collection
collection : user_info
# ZooKeeper ensemble
zkHost : "$ZK_HOST"
}
morphlines : [
{
id : user_info
importCommands : ["org.kitesdk.**", "com.ngdata.**"]
commands : [
{
extractHBaseCells {
mappings : [
{
inputColumn : "user_info_new:FuiUid"
outputField : "FuiUid"
type : string
source : value
}
]
}
}
{ logDebug { format : "output record: {}", args : ["@{}"] } }
]
}
]
四:将三者进行关联 hbase - kv - solr
1、在/home/user_00/solr_test/user_info下创建morphline-hbase-mapper.xml文件,主要作用是告诉kv去索引哪张表,其中最后一行value与上文配置Key-Value Store Indexer 部分的id相对应。
内容如下(含义不多说): 注意<param name="morphlineId" value="user_info"></param> value值与Morphlines配置中的ID一致
<?xml version="1.0" encoding="UTF-8"?>
<indexer table="data_db_t_data_user_info_new" mapper="com.ngdata.hbaseindexer.morphline.MorphlineResultToSolrMapper">
<param name="morphlineFile" value="morphlines.conf"></param>
<param name="morphlineId" value="user_info"></param>
</indexer>
2、创建索引,将hbase与solr、zk关联起来
hbase-indexer add-indexer \
--name user_info \
--indexer-conf /home/user_00/solr_test/user_info/morphline-hbase-mapper.xml \
--connection-param solr.zk=hadoop08:2181,hadoop09:2181,hadoop10:2181/solr \
--connection-param solr.collection=user_info \
--zookeeper hadoop08:2181,hadoop09:2181,hadoop10:2181
五、如果表有历史数据,则需要手动添加索引
手动索引时,需要在/home/user_00/solr_test/user_info 目录下添加一份morphlines.conf文件,配置内容与集群配置一样即可
hadoop --config /etc/hadoop/conf jar /opt/cloudera/parcels/CDH-5.12.0-1.cdh5.12.0.p0.29/lib/hbase-solr/tools/hbase-indexer-mr-1.5-cdh5.12.0-job.jar --conf /etc/hbase/conf/hbase-site.xml -D 'mapred.child.java.opts=-Xmx 1000m' --hbase-indexer-file /home/user_00/solr_test/user_info/morphline-hbase-mapper.xml --zk-host hadoop08:2181,hadoop09:2181,hadoop10:2181/solr --collection user_info --reducers 0
参考:
http://www.cloudera.com/documentation/enterprise/latest/topics/search_hbase_batch_indexer.html
https://blog.csdn.net/u011462328/article/details/53008434
https://blog.csdn.net/sxhong/article/details/79245435