zoukankan      html  css  js  c++  java
  • CDH版本Hbase二级索引方案Solr key value index

    概述

    在Hbase中,表的RowKey 按照字典排序, Region按照RowKey设置split point进行shard,通过这种方式实现的全局、分布式索引. 成为了其成功的最大的砝码。

    然而单一的通过RowKey检索数据的方式,不再满足更多的需求,查询成为Hbase的瓶颈,人们更加希望像Sql一样快速检索数据,可是,Hbase之前定位的是大表的存储,要进行这样的查询,往往是要通过类似Hive、Pig等系统进行全表的MapReduce计算,这种方式既浪费了机器的计算资源,又因高延迟使得应用黯然失色。于是,针对HBase Secondary Indexing的方案出现了。

    Solr

    Solr是一个独立的企业级搜索应用服务器,是Apache Lucene项目的开源企业搜索平台,

    其主要功能包括全文检索、命中标示、分面搜索、动态聚类、数据库集成,以及富文本(如Word、PDF)的处理。Solr是高度可扩展的,并提供了分布式搜索和索引复制。Solr 4还增加了NoSQL支持,以及基于Zookeeper的分布式扩展功能SolrCloud。SolrCloud的说明可以参看:SolrCloud分布式部署。它的主要特性包括:高效、灵活的缓存功能,垂直搜索功能,Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎

    Solr可以高亮显示搜索结果,通过索引复制来提高可用,性,提供一套强大Data Schema来定义字段,类型和设置文本分析,提供基于Web的管理界面等。

    Key-Value Store Indexer

    这个组件非常关键,是Hbase到Solr生成索引的中间工具。

    在CDH5.3.2中的Key-Value Indexer使用的是Lily HBase NRT Indexer服务.

    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  ----->  Key Value Store  ---> Solr -------> Web前端实时查询展示

    1.Hbase 提供海量数据存储

    2.Solr提供索引构建与查询

    3. Key Value Store 提供自动化索引构建(从Hbase到Solr)

    使用流程

    前提: CDH5.3.2Solr集群搭建好,CDH5.3.2 Key-Value Store Indexer集群搭建好

    1.开启Hbase的复制功能

    2. Hbase表需要开启REPLICATION复制功能

    create 'table',{NAME => 'cf', REPLICATION_SCOPE => 1} #其中1表示开启replication功能,0表示不开启,默认为0  

    对于已经创建的表可以使用如下命令

    disable 'table' 

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

    enable 'table' 

    3. 生成实体配置文件, /opt/hbase-indexer/Test是自定义路径,可以自己设置

    solrctl instancedir --generate  /opt/cdhsolr/waslog

    4.编辑生成好的scheme.xml文件

    把hbase表中需要索引的列添加到scheme.xml filed节点,其中的name属性值要与Morphline.conf文件中的outputField属性值对应

     

    5.创建collection实例并配置文件上传到zookeeper,命令

    solrctl instancedir --create waslog  /opt/cdhsor/waslog

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

    solrctl collection –create  waslog  -s  15 –r 2 –m 50

    7.创建Lily HBase Indexer配置文件

    morphline-hbase-mapper.xml
    
    <?xml version="1.0" encoding="UTF-8"?>
    <indexer table="waslog" mapper="com.ngdata.hbaseindexer.morphline.MorphlineResultToSolrMapper">
     <param name="morphlineFile" value="morphlines.conf"></param>
     <param name="morphlineId" value="waslogMap"></param>
    </indexer>

    其中morphlineId 的value是对应Key-Value Store Indexer 中配置文件Morphlines.conf 中morphlines 属性id值

    8.修改Morphlines 文件, 具体操作:进入Key-Value Store Indexer面板->配置->查看和编辑->属性-Morphline文件

    morphlines : [
    {
    id :waslogMap
    importCommands : ["org.kitesdk.**", "com.ngdata.**"]
    
    commands : [                    
      {
        extractHBaseCells {
          mappings : [
            {
              inputColumn : "cf:LOGSYFG"
              outputField : "LOGSYFG" 
              type : string 
              source : value
            },
           {
              inputColumn : "cf:LOGIPAD"
              outputField : "LOGIPAD" 
              type : string 
              source : value
            },
            {
              inputColumn : "cf:LOGSEQC"
              outputField : "LOGSEQC" 
              type : string 
              source : value
            },
            {
              inputColumn : "cf:LOGLGDT"
              outputField : "LOGLGDT" 
              type : string 
              source : value
            },
            {
              inputColumn : "cf:LOGLGTM"
              outputField : "LOGLGTM" 
              type : string 
              source : value
            }
          ]
        }
      }
      { logDebug { format : "output record: {}", args : ["@{}"] } }
    ]
    }
    ]

    inputColumn:Hbase的CLOUMN

    outputField:Solr的Schema.XML配置的fields

    9.注册Lily HBase Indexer configuration 和 Lily Hbase Indexer Service

    hbase-indexer add-indexer 
    
     --name cloudIndexer 
    
     --indexer-conf /opt/cdhsolr/morphline-hbase-mapper.xml
    
     --connection-param solr.zk=cdh1:2181,cdh2:2181,cdh3:2181/solr 
    
     --connection-param solr.collection=waslog 
    
     --zookeeper cdh1:2181,cdh2:2181,cdh3:2181

    验证索引器是否成功创建

    hbase-indexer list-indexers

    10.测试put数据查看结果

    当写入数据后,稍过几秒我们可以在相对于的solr中查询到该插入的数据,表明配置已经成功。

     

    11.使用IK分词器

    在/opt/cloudera/parcels/CDH/lib/solr/webapps/solr/WEB-INF创建classes目录

    把IKAnalyzer.cfg.xml 和 stopword.dic添加到classes目录

    把IKAnalyzer2012FF_u1.jar添加到/opt/cloudera/parcels/CDH/lib/solr/webapps/solr/WEB-INF/lib目录

    在Schema.xml中添加

    <!--配置IK分词器-->

     <fieldType name="text_ik" class="solr.TextField">

            <!--索引时候的分词器-->

            <analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>

            <!--查询时候的分词器-->

            <analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>

    </fieldType>

    配置好后更新ZK配置文件,重启solr服务

    12,扩展命令

    Scheme.xml新增索引字段

    执行以下命令更新配置

    solrctl instancedir --update waslog /opt/cdhsolr /waslog

    solrctl collection --reload  waslog

    查看collection命令:solrctl collection –list

    Hbase表数据到SOLR集群迁移

    在CDH5.3.2中Hbase-indexer提供了MapReduce来批量构建索引的方式

    /opt/cloudera/parcels/CDH-5.3.2-1.cdh5.3.2.p0.10/lib/hbase-solr/tools/hbase-indexer-mr-1.5-cdh5.3.2-job.jar

    构建命令

    hadoop jar /opt/cloudera/parcels/CDH-5.3.2-1.cdh5.3.2.p0.10/lib/hbase-solr/tools/hbase-indexer-mr-1.5-cdh5.3.2-job.jar  D 'mapreduce.reduce.shuffle.memory.limit.percent=0.06'  --hbase-indexer-file  /opt/cdhsolr/mapping/waslog/morphline-hbase-mapper.xml  --zk-host hadoop03:2181,hadoop04:2181,hadoop05:2181/solr --collection waslog --go-live 

    注意:在运行命令的目录下必须有morphlines.conf文件

    文章地址:http://www.cnblogs.com/thinkpad/p/5534627.html

  • 相关阅读:
    典型用户与场景
    团队工作总结
    《构建之法》第8,9,10章
    冲刺1,2,3,4,5,天
    Github以及推广
    四则运算安卓版ver.mk3
    软件工程APP进度更新
    团队会议之事后工作总结
    构建之法 13-17章有感
    对于其他小组评论的反馈
  • 原文地址:https://www.cnblogs.com/thinkpad/p/5534627.html
Copyright © 2011-2022 走看看