Hbase+Solr 操作手册
1、对于初次建立得表,可以使用
create 'table',{NAME =>'f1', REPLICATION_SCOPE =>1}
注:其中 1 表示开启 replication 功能,0 表示不开启,默认为 0
对于已经存在得表,可以
disable 'hcc_score'
alter 'hcc_score',{NAME =>'f1', REPLICATION_SCOPE =>1}
enable 'hcc_score'
2、生成实体配置文件:
solrctl instancedir --generate $HOME/hbase-indexer/hcc_score
3、配置 conf/schema.xml
动态域,就是这个域的名称,是由表达式组成的,只要名称满足了这个 表达式,就可
以用这个域 name:域的名称,该域的名称是通过一个表达式来指定的,只要符合这这个规
则,就可以使用这个域。比如 aa_i,bb_i,13_i 等等,只要满足这个表达式皆可
name:域名
type:域的类型,必须匹配类型,不然会报错
indexed:是否要作索引
stored:是否要存储实际数据
required:是否必填,一般只有 id 即 rowkey 才会设置
multiValued:是否有多个值,如果设置为多值,里面的值就采用数组的方式来存储,比如商
品图片地址(大图,中图,小图等)
目前用到的特殊类型如下:
1、支持前缀过滤的类型 type=“text_prefix_rev”:例如存储名字、手机号之类的字段,
需要支持“*6553”、“*大军”这种前缀过滤的查询。
2、支持时间的类型 type=”tdate”:存储时间类型,支持时间段过滤和排序
3、支持分词查询的类型 type=”text_ch”:存储支持分词查询的字段,例如地址。
如 下 为 最 基 础 的 配 置 , 生 产 环 境 用 的 配 置 在 apiserver01 节 点 ,
/home/dsj_solr/hbase-indexer 目录中。
id
4、再修改 solrconfig.xml 文件,根据实际应用情况更改软硬提交。
软提交关于实时可见性;硬提交关于持久化。
${solr.autoCommit.maxTime:60000}
false
${solr.autoSoftCommit.maxTime:15000}
5、创建 collection 实例并将配置文件上传到 zookeeper:
solrctl
--zk zkip01,zkip02,zkip03:2181/solr
instancedir
--create hcc_score
$HOME/hbase-indexer/hcc_score
6、上传到 zookeeper 之后,其他节点就可以从 zookeeper 下载配置文件。接下来创建
collection;如果希望将数据分散到各个节点进行存储和检索,则需要创建多个 shard,需
要使用如下命令:
solrctl --zk zkip01,zkip02,zkip03:2181/solr collection --create hcc_score -s 11 -r 3
-m 10
注:其中-s 表示设置 Shard 数为 11,-r 表示设置的 replica 数为 3,-m 表示单个节点最大
shards 数目 10。Shard 数最好与节点数量成倍数,replica 为副本数量与并发量成正比,
单节点最大 shard 数目与节点数的乘积要大于 shard 与 replica 的乘积。例如我们的集群:
10*11=110;11*3=33;110>33;符合规定,而且有扩展性。
7、创建一个 morphline-hbase-mapper.xml 文件,该文件是 Lily kv store 与 hbase 表的映
射关系,用来自动维护索引数据,当 hbase 表有更新时,lily 会通过分析 WAL 日志将更新
维护到 solr 的 collection 中。
table="hcc_score"
8、维护 CM 界面中 kv store 设置中的 morphlines.conf,该文件为 solr 中的索引字段与
hbase 的字段的映射关系。
SOLR_LOCATOR : {
# ZooKeeper ensemble
zkHost : "$ZK_HOST"
}
morphlines : [
{
id : test_workorder
importCommands :["org.kitesdk.**","com.ngdata.**"]
commands :[
{
extractHBaseCells {
mappings :[
{
inputColumn :"f1:hsicrm_mobilenumber"
outputField :"hsicrm_mobilenumber"
type :string
source : value
},
{
inputColumn : "f1:hsicrm_serialnumber"
outputField : "hsicrm_serialnumber"
type : string
source : value
inputColumn : "f1:hsicrm_consumerno"
outputField : "hsicrm_consumerno"
type : string
source : value
inputColumn : "f1:hsicrm_workorderid"
outputField : "hsicrm_workorderid"
type : string
source : value
},
{
},
{
}
]
}
}
{ logDebug { format :"output record: {}", args :["@{}"]}}
]
}
]
9、注册到 Lily HBase Indexer Service,即注册索引器,上传 Lily HBase Indexer 配置
XML 文件至 ZooKeeper,由给定的 SolrCloud 集合完成此操作。
hbase-indexer add-indexer \
--name hcc_score \
--indexer-conf $HOME/hbase-indexer/hcc_score/morphline-hbase-mapper.xml \
--connection-param solr.zk= zkip01,zkip02,zkip03:2181/solr \
--connection-param solr.collection=hcc_score \
--zookeeper zkip01:2181,zkip02:2181,zkip03:2181
10、查看索引器是否创建成功:
hbase-indexer list-indexers --zookeeper zkip01:2181
11、同步过去的数据建立索引,若增加了索引字段,需要先 reload collection 再做同步
solrctl --zk zkip01,zkip02,zkip03:2181/solr collection --reload hcc_score
将 Lily kv store 的 morphlines.conf 配置文件复制到索引配置目录下。
执行下面的命令
hadoop --config /etc/hadoop/conf \
jar /opt/cloudera/parcels/CDH/lib/hbase-solr/tools/hbase-indexer-mr-job.jar \
--conf /etc/hbase/conf/hbase-site.xml \
--hbase-indexer-file $HOME/hbase-indexer/hcc_score/morphline-hbase-mapper.xml \
--morphline-file morphlines.conf \
--zk-host zkip01:2181/solr \
--collection hcc_score \
--reducers 0 \
--go-live
验证实时可见性,在 hbase 中新增、更新、删除数据,在 solr 中 15 秒内可见,因为
softCommit 配置的为 15000ms。
12、增加
put 'hcc_score_cf_name','0012','cf:name','bob'
13、更新
put 'hcc_score_cf_name','0012','cf:name','jack'
14、删除
deleteall 'hcc_score_cf_name','0012'
15、扩展命令
#solrctl
1、列出配置目录列表
solrctl --zk zkip01,zkip02,zkip03:2181/solr instancedir –list
2、列出 collection 列表
solrctl --zk zkip01,zkip02,zkip03:2181/solr collection –list
3、更新 coolection 配置
solrctl
--zk
zkip01,zkip02,zkip03:2181/solr
instancedir
--update
newDir
$HOME/hbase-indexer/newDir
solrctl --zk zkip01,zkip02,zkip03:2181/solr collection --reload name
4、删除 instancedir
solrctl --zk zkip01,zkip02,zkip03:2181/solr instancedir --delete name
5、删除 collection
solrctl --zk zkip01,zkip02,zkip03:2181/solr collection --delete name
6、删除 collection 所有 doc
solrctl --zk zkip01,zkip02,zkip03:2181/solr collection --deletedocs name
7、删除 User 配置目录
rm -rfv $HOME/hbase-indexer/User
8、若修改了 morphline-hbase-mapper.xml,则需要更新索引器
hbase-indexer update-indexer -n hcc_score --zookeeper zkip01:2181
9、删除索引
hbase-indexer delete-indexer -n hcc_score --zookeeper zkip01:2181
10、打印同步历史索引数据时的详细日志
创建 log4j.properties,内容如下
# cat log4j.properties
log4j.rootLogger=${root.logger}
root.logger=INFO,console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd
HH:mm:ss} %p %c{2}: %m%n log4j.logger.org.kitesdk.morphline=TRACE
log4j.logger.com.ngdata=TRACE
然后在命令行追加入 --log4j 指定到所在 log4j.properties,然后再跑 MR Job, 并把控制
台输出备份到文件,命令如下:
hadoop --config /etc/hadoop/conf \
jar /opt/cloudera/parcels/CDH/lib/hbase-solr/tools/hbase-indexer-mr-job.jar \
--conf /etc/hbase/conf/hbase-site.xml \
--hbase-indexer-file $HOME/hbase-indexer/hcc_score/morphline-hbase-mapper.xml \
--morphline-file morphlines.conf \
--zk-host zkip01:2181/solr \
--collection hcc_score \
--reducers 0 \
--go-live \
--log4j log4j.properties 2>&1 | tee -a console.log
11、收集 application log
yarn logs -applicationId application_id -appOwner user_name > application_id