概述为什么要引入lily和solr 在Hbase中,表的RowKey按照字典排序,单一的通过RowKey检索数据的方式,不再满足更多的需求,查询成为Hbase的瓶颈,希望像Sql一样快速检索数据,Hbase之前定位的是大表的存储,要进行这样的查询,往往是要通过类似Hive、Pig等系统进行全表的MapReduce计算,这种方式既浪费了机器的计算资源,又因高延迟使得应用黯然失色,于是HBaseSecondaryIndexing的方案出现了。SolrSolr是一个独立的企业级搜索应用服务器,是ApacheLucene项目的开源企业搜索平台,其主要功能包括全文检索、命中标示、分面搜索、动态聚类、数据库集成,以及富文本(如Word、PDF)的处理。Solr是高度可扩展的,并提供了分布式搜索和索引复制。Solr4还增加了NoSQL支持,以及基于Zookeeper的分布式扩展功能SolrCloud。它的主要特性包括:高效、灵活的缓存功能,垂直搜索功能,Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎,Solr可以高亮显示搜索结果,通过索引复制来提高可用,性,提供一套强大DataSchema来定义字段,类型和设置文本分析,提供基于Web的管理界面。KeyValueStoreIndexer 这个组件非常关键,是Hbase到Solr生成索引的中间工具,在CDH5。3。2中的KeyValueIndexer使用的是LilyHBaseIndexer服务,LilyHBaseIndexer是一款灵活的、可扩展的、高容错的、事务性的,并且近实时的处理HBase列索引数据的分布式服务软件。它是NGDATA公司开发的Lily系统的一部分,已开放源代码,LilyHBaseIndexer使用SolrCloud来存储HBase的索引数据,当HBase执行写入、更新或删除操作时,Indexer通过HBase的replication功能来把这些操作抽象成一系列的Event事件,并用来保证写入Solr中的HBase索引数据的一致性,并且Indexer支持用户自定义的抽取,转换规则来索引HBase列数据。Solr搜索结果会包含用户自定义的columnfamily:qualifier字段结果,这样应用程序就可以直接访问HBase的列数据。hbaselilysolr架构 服务配置 hbase配置文件搜索index,启用编制索引。 启用复制 solrcollection创建脚本用来创建solrcollectioncatcreatecollection。shEOFzk节点ZKworker1要创建的collection名称COLLECTIONhainiuBASEpwd分片数SHARD1副本数REPLICA1echocreatesolrcollectionrmrftmp生成配置文件solrctlzkZK:2181solrinstancedirgeneratetmp{COLLECTION}configs上传配置文件到zksolrctlzkZK:2181solrinstancedircreateCOLLECTIONtmp{COLLECTION}configsecho如果collection名称重复会报configuration重复错误,更换collection名称solr创建collectionsolrctlzkZK:2181solrcollectioncreateCOLLECTIONsSHARDrREPLICAecho如果collection名称重复会报configuration重复错误,更换collection名称查看collectionsolrctlzkZK:2181solrcollectionlistEOF执行创建脚本shcreatecollection。sh solrweb验证 solr创建field字段 使用postman或者curl命令操作solrapi创建字段 方式一postman: 方式二curl:非安全模式curlXPOSTHContentType:applicationjsond{addfield:{name:content,type:texten,stored:true,indexed:true}}http:worker3:8983solrhainiuschema安全模式用户名和密码可以随意输入curlnegotiateuxiniu:xiniuXPOSTHContentType:applicationjsond{addfield:{name:content,type:texten,stored:true,indexed:true}}http:worker3:8983solrhainiu0602schema lilyhbaseindexermkdirprootsolrhbaseconfcdrootsolrhbase准备morphline配置文件(解读)准备morphline配置文件morphlines:〔{morphline配置id,与indexer配置文件中的morphlineID一致id:morphline1importCommands:〔org。kitesdk。morphline。,com。ngdata。〕commands:〔{extractHBaseCells{hbase字段映射mappings:〔{textinfo为hbase对应的列族,content为hbase对应的列名inputColumn:textinfo:content输出列,对应solr中的field字段outputField:contentsolr中字段类型type:stringsource:value}〕}}〕}〕 正式配置文件catconfmorphlines。confEOFmorphlines:〔{id:morphline1importCommands:〔org。kitesdk。morphline。,com。ngdata。〕commands:〔{extractHBaseCells{mappings:〔{inputColumn:textinfo:contentoutputField:contenttype:stringsource:value}〕}}〕}〕EOF准备indexer配置文件catconfindexerconfig。xmlEOF?xmlversion1。0?indexertableTextHbasemappercom。ngdata。hbaseindexer。morphline。MorphlineResultToSolrMappermappingtyperow!Therelativeorabsolutepathonthelocalfilesystemtothemorphlineconfigurationfile。!Userelativepathmorphlines。confformorphlinesmanagedbyClouderaManagerparamnamemorphlineFilevaluerootsolrhbaseconfmorphlines。conf!TheoptionalmorphlineIdidentifiesamorphlineiftherearemultiplemorphlinesinmorphlines。conf!paramnamemorphlineIdvaluemorphline1indexerEOF执行lilyhbaseindexer刷新脚本vimhbase2solr。sh填入如下内容COLLECTIONhainiuZKworker1echoDeletepreviousdocs。。。solrctlcollectiondeletedocsCOLLECTIONechoLilyHBaseMapReduceindexing。。。configetchadoopconf。cloudera。yarnparceloptclouderaparcelsCDHjarparcellibhbasesolrtoolshbaseindexermrjob。jarhbaseconfetchbaseconfhbasesite。xmloptsmapred。child。java。optsXmx1024mlog4jparcelsharedocsearchexamplessolrnrtlog4j。propertieszkZK:2181solrlibjarslibluceneanalyzerssmartcn4。10。3cdh5。14。2。jarexportHADOOPOPTSDjava。security。auth。login。configconfjaas。confhadoopconfigconfigjarjarconfhbaseconfDoptslog4jlog4jhbaseindexerfileconfindexerconfig。xmlverbosegolivezkhostzkcollectionCOLLECTION安全模式执行lilyhbaseindexer刷新脚本 创建jaas。conf文件,填写如下内容mkdirpconfjaas。confClient{com。sun。security。auth。module。Krb5LoginModulerequireduseKeyTabtruekeyTabrootsolrhbasesolr。keytabstoreKeytrueuseTicketCachefalseprincipalsolrHAINIU。COM;};vimhbase2solr。sh填入如下内容COLLECTIONhainiuZKworker1echoDeletepreviousdocs。。。solrctlcollectiondeletedocsCOLLECTIONechoLilyHBaseMapReduceindexing。。。configetchadoopconf。cloudera。yarnparceloptclouderaparcelsCDHjarparcellibhbasesolrtoolshbaseindexermrjob。jarhbaseconfetchbaseconfhbasesite。xmloptsmapred。child。java。optsXmx1024mlog4jparcelsharedocsearchexamplessolrnrtlog4j。propertieszkZK:2181solrlibjarslibluceneanalyzerssmartcn4。10。3cdh5。14。2。jarexportHADOOPOPTSDjava。security。auth。login。configconfjaas。confhadoopconfigconfigjarjarconfhbaseconfDoptslog4jlog4jhbaseindexerfileconfindexerconfig。xmlverbosegolivezkhostzkcollectionCOLLECTION执行hbase2solr。sh脚本shhbase2solr。sh solrweb验证数据 海汼部落原创文章,原文链接:(http:hainiubl。comtopics75587)