1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > HBase+Solr 的 二级索引 实时查询

HBase+Solr 的 二级索引 实时查询

时间:2019-10-05 13:09:24

相关推荐

HBase+Solr 的 二级索引 实时查询

零、概述

1.Hbase适用于大表的存储,通过单一的RowKey查询虽然能快速查询,但是对于复杂查询,尤其分页、查询总数等,实现方案浪费计算资源,所以可以针对hbase数据创建二级索引(Hbase Secondary Indexing),供复杂查询使用。

2.Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。(web 8983端口)

3.Key-Value Store Indexer是Hbase到Solr生成索引的中间工具。在CDH5中的Key-Value Store Indexer使用的是Lily HBase NRT Indexer服务

4.Lily HBase Indexer是一款灵活的、可扩展的、高容错的、事务性的,并且近实时的处理HBase列索引数据的分布式服务软件。它是NGDATA公司开发的Lily系统的一部分,已开放源代码。Lily HBase Indexer使用SolrCloud来存储HBase的索引数据,当HBase执行写入、更新或删除操作时,Indexer通过HBase的replication功能来把这些操作抽象成一系列的Event事件,并用来保证写入Solr中的HBase索引数据的一致性。并且Indexer支持用户自定义的抽取,转换规则来索引HBase列数据。Solr搜索结果会包含用户自定义的columnfamily:qualifier字段结果,这样应用程序就可以直接访问HBase的列数据。而且Indexer索引和搜索不会影响HBase运行的稳定性和HBase数据写入的吞吐量,因为索引和搜索过程是完全分开并且异步的。Lily HBase Indexer在CDH5中运行必须依赖HBase、SolrCloud和Zookeeper服务。

一、修改hbase 可复制

disable'syslog'

alter'syslog',{NAME=>'cf',REPLICATION_SCOPE=>1}

enable'syslog'

二、生成实体配置文件:

solrctl instancedir--generate/opt/cdhsolr/syslog

①vi /opt/cdhsolr/syslog/conf/schema.xml

添加

<fieldname="[tablename]_[family]_[field]"type="string"indexed="true"stored="true"/>

<fieldname="syslog_info_req_path"type="string"indexed="true"stored="true"/>

<fieldname="syslog_info_req_chan"type="string"indexed="true"stored="true"/>

<fieldname="syslog_info_req_ts"type="string"indexed="true"stored="true"/>

②创建 collection实例并将配置文件上传到 zookeeper

solrctl instancedir --create syslog /opt/cdhsolr/syslog

③上传到 zookeeper 之后,其他节点就可以从zookeeper下载配置文件。接下来创建 collection:

solrctl collection --create syslog

(其中-s是6个分片(shard),我们的solrclound是6台机器,-r是2个副本(replication),-c是指定zk上solr/configs节点下使用的配置文件名称,-a是允许添加副本(必须写,否则创建不了副本),-m 默认值是1,注意三个数值:numShards、replicationFactor、liveSolrNode,一个正常的solrCloud集群不容许同一个liveSolrNode上部署同一个shard的多个replic,因此当maxShardsPerNode=1时,numShards*replicationFactor>liveSolrNode时,报错。因此正确时因满足以下条件: numShards*replicationFactor<liveSolrNode*maxShardsPerNode)

三、创建 Lily HBase Indexer 配置

1.在前面定义的/opt/cdhsolr/syslog目录下,创建一个morphline-hbase-mapper.xml文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<!-- table:需要索引的HBase表名称-->

<!-- mapper:用来实现和读取指定的Morphline配置文件类,固定为MorphlineResultToSolrMapper-->

<indexertable="syslog"mapper="com.ngdata.hbaseindexer.morphline.MorphlineResultToSolrMapper">

<!--param中的name参数用来指定当前配置为morphlineFile文件 -->

<!--value用来指定morphlines.conf文件的路径,绝对或者相对路径用来指定本地路径,如果是使用Cloudera Manager来管理morphlines.conf就直接写入值morphlines.conf"-->

<param name="morphlineFile" value="morphlines.conf"></param>

<param name="morphlineId"value="syslogMap"></param>

</indexer>

四、创建 Morphline 配置文件

通过CM页面进入到Key-Value Store Indexer的配置页面,里面有一个Morphlines文件。我们编辑它每个Collection对应一个morphline-hbase-mapper.xml

SOLR_LOCATOR : {

# Name of solr collection

collection : syslog

# ZooKeeper ensemble

zkHost : "$ZK_HOST"

}

morphlines : [

{

id : syslogMap

importCommands : ["org.kitesdk.**", "com.ngdata.**"]

commands : [

{

extractHBaseCells {

mappings : [

{

inputColumn:"info:req_chan"

outputField:"syslog_info_req_chan"

type:string

source:value

},

{

inputColumn:"info:req_path"

outputField:"syslog_info_req_path"

type:string

source:value

},

{

inputColumn:"info:req_ts"

outputField:"syslog_info_req_ts"

type:string

source:value

}

]

}

}

{ logDebug { format : "output record: {}", args : ["@{}"] } }

]

}

]

其中

id:表示当前morphlines文件的ID名称。

importCommands:需要引入的命令包地址。

extractHBaseCells:该命令用来读取HBase列数据并写入到SolrInputDocument对象中,该命令必须包含零个或者多个mappings命令对象

mappings:用来指定HBase列限定符的字段映射

inputColumn:需要写入到solr中的HBase列字段。值包含列族和列限定符,并用‘ : ’分开。其中列限定符也可以使用通配符‘’来表示,譬如可以使用data:表示读取只要列族为data的所有hbase列数据,也可以通过data:my*来表示读取列族为data列限定符已my开头的字段值。

outputField:用来表示morphline读取的记录需要输出的数据字段名称,该名称必须和solr中的schema.xml文件的字段名称保持一致,否则写入不正确。

type:用来定义读取HBase数据的数据类型,我们知道HBase中的数据都是以byte[]的形式保存,但是所有的内容在Solr中索引为text形式,所以需要一个方法来把byte[]类型转换为实际的数据类型。type参数的值就是用来做这件事情的。现在支持的数据类型有:byte,int,long,string,boolean,float,double,short和bigdecimal。当然你也可以指定自定的数据类型,只需要实现com.ngdata.hbaseindexer.parse.ByteArrayValueMapper接口即可。

source:用来指定HBase的KeyValue那一部分作为索引输入数据,可选的有‘value’和'qualifier',当为value的时候表示使用HBase的列值作为索引输入,当为qualifier的时候表示使用HBase的列限定符作为索引输入。

五、注册 Lily HBase Indexer Configuration 和 Lily HBase Indexer Service

hbase-indexer add-indexer \

-n syslogIndexer \

-c/opt/cloudera/parcels/CDH/lib/hbase-solr/morphline-hbase-mapper-syslog.xml\

--connection-param solr.zk=n1:2181/solr\

--connection-param solr.collection=syslog\

--zookeeper n1:2181

**-n表示indexer的名称,-c表示加载的indexer的配置文件名称,–connection-param表示连接的solr的zk地址和对应的collection名称,–zookeeper表示indexer要上传到的zk地址。**

hbase-indexer list-indexers --zookeeper n1:2181 查询

六、同步

①全量同步,由于是新加入的集群,需要第一次做全量同步,然后任务会自动增量同步,执行这个命令需要切换到hdfs用户下。

(复制出现问题 手敲可行)

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 -D 'mapred.child.java.opts=-Xmx1000m' --hbase-indexer-file /opt/cloudera/parcels/CDH/lib/hbase-solr/morphline-hbase-mapper-syslog.xml --zk-host n1:2181/solr --collection syslog --reducers 0

$**$在运行命令的目录下必须有morphlines.conf文件,执行

find / |grep morphlines.conf$

x选择最新的文件 组成一个命令

--morphline-file/opt/cloudera-manager/cm-5.7.0/run/cloudera-scm-agent/process/213-ks_indexer-HBASE_INDEXER/morphlines.conf

Xxxxx

组成新的语句:

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 -D 'mapred.child.java.opts=-Xmx1000m' --hbase-indexer-file /opt/cloudera/parcels/CDH/lib/hbase-solr/morphline-hbase-mapper-syslog.xml--morphline-file/opt/cloudera-manager/cm-5.7.0/run/cloudera-scm-agent/process/213-ks_indexer-HBASE_INDEXER/morphlines.conf--zk-host n1:2181/solr --collection syslog --reducers 0

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。