环境:

Cloudera Express 5.12.1
JDK 1.8.0_92
CentOS 7

步骤1:数据导入到Hbase中(非正题,跳过)

hbase中表为allDoc,两个Family:fulltext,fileInfo
fulltext中就一列:fulltext
fileInfo中有如下几列serialNumber,verdictType,hashCode,fileName

步骤2:生成实体配置文件(我这里用的root账户)

  1. solrctl instancedir --create /root/config/

  

步骤3:配置/root/config/conf/schema.xml,增加分词器

<fields></fields>下增加字段,其中id为hbase的row_key,_version_字段必须有,否则报错,我这里只加了fulltext和serialnumber,这里的是solr中的schema

  1. <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
  2. <field name="serialnumber" type="string" indexed="true" stored="true" required="true" multiValued="false" />
  3. <field name="fulltext" type="text_ch" indexed="true" stored="true" required="true" multiValued="false" />
  4. <field name="_version_" type="long" indexed="true" stored="true"/>

  

增加中文分词器,下载对应版本的分词器:
下载地址:https://repository.cloudera.com/artifactory/cdh-releases-rcs/org/apache/lucene/lucene-analyzers-smartcn/
我用的是:https://repository.cloudera.com/artifactory/cdh-releases-rcs/org/apache/lucene/lucene-analyzers-smartcn/4.10.3-cdh5.12.1/lucene-analyzers-smartcn-4.10.3-cdh5.12.1.jar
下载之后记得放到目录下/opt/cloudera/parcels/CDH-5.12.1-1.cdh5.12.1.p0.3/lib/solr/webapps/solr/WEB-INF/lib/lucene-analyzers-smartcn-4.10.3-cdh5.12.1.jar
然后schema.xml加入text_ch

  1. <fieldType name="text_ch" class="solr.TextField" positionIncrementGap="100">
  2. <analyzer type="index">
  3. <tokenizer class="solr.SmartChineseSentenceTokenizerFactory"/>
  4. <filter class="solr.SmartChineseWordTokenFilterFactory"/>
  5. </analyzer>
  6. </fieldType>

  步骤4:根据实体配置文件在Solr中建立collection

  1. solrctl instancedir --create hbase-collection /root/config/
  2. solrctl collection --create hbase-collection

  步骤5:创建 Lily HBase Indexer 配置,下面两个文件我都放到了root文件夹下

新建一个XML文件morphline-hbase-mapper.xml,内容如下:(其中allDoc是hbase中的表名称)

  1. <?xml version="1.0"?>
  2. <indexer table="allDoc" mapper="com.ngdata.hbaseindexer.morphline.MorphlineResultToSolrMapper">
  3. <param name="morphlineFile" value="morphlines.conf"/>
  4. </indexer>

  创建morphlines.conf,内容如下:(这里是hbase到solr的映射)

  1. morphlines : [
  2. {
  3. id : morphline
  4. importCommands : [
  5. "org.kitesdk.**",
  6. "com.ngdata.**"
  7. ]
  8. commands : [
  9. {
  10. extractHBaseCells {
  11. mappings : [
  12. {
  13. inputColumn : "fulltext:fulltext"
  14. outputField : "fulltext"
  15. type : string
  16. source : value
  17. },
  18. {
  19. inputColumn : "fileInfo:serialNumber"
  20. outputField : "serialnumber"
  21. type : string
  22. source : value
  23. }
  24. ]
  25. }
  26. }
  27. { logDebug { format : "output record: {}", args : [
  28. "@{}"
  29. ]
  30. }
  31. }
  32. ]
  33. }
  34. ]

步骤6: 注册 Lily HBase Indexer配置

  1. hbase-indexer delete-indexer -n docIndex
  2. hbase-indexer add-indexer -n docIndex -c /root/morphline-hbase-mapper.xml -cp solr.zk=gs-server-5002:2181,gs-server-5001:2181,gs-server-5000:2181/solr -cp solr.collection=hbase-collection8 -z gs-server-5002:2181,gs-server-5001:2181,gs-server-5000:2181
  3. hbase-indexer list-indexers #查看是否正常运行

步骤7: 批量导入:

Shell脚本:(lucene-analyzers-smartcn-4.10.3-cdh5.12.1.jar 在root目录中也有一份,这个脚本也放到了root目录中)

  1. COLLECTION='hbase-collection'
  2. ZK='gs-server-5002:2181,gs-server-5001:2181,gs-server-5000:2181'
  3. echo 'Delete previous docs...'
  4. solrctl collection --deletedocs $COLLECTION
  5. echo 'Lily HBase MapReduce indexing...'
  6. config="/etc/hadoop/conf.cloudera.yarn"
  7. parcel="/opt/cloudera/parcels/CDH"
  8. jar="$parcel/lib/hbase-solr/tools/hbase-indexer-mr-*-job.jar"
  9. hbase_conf="/etc/hbase/conf/hbase-site.xml"
  10. opts="'mapred.child.java.opts=-Xmx1024m'"
  11. log4j="$parcel/share/doc/search*/examples/solr-nrt/log4j.properties"
  12. zk="$ZK/solr"
  13. libjars="lucene-analyzers-smartcn-4.10.3-cdh5.12.1.jar"
  14. export HADOOP_OPTS="-Djava.security.auth.login.config=conf/jaas.conf"
  15. hadoop --config $config jar $jar --conf $hbase_conf --libjars $libjars -D $opts --log4j $log4j --hbase-indexer-file morphline-hbase-mapper.xml --verbose --go-live --zk-host $zk --collection $COLLECTION

  

ZK为Zookeeper集群地址,修改COLLECTION为之前生成的,生效基本都保持不变morphline-hbase-mapper.xml是步骤5配置生成的xml文件

总体来说不算太难,但是有很多坑。。

因为批量导入采用的是MapReduce,经常出现OOM,或者exit Code 154,Map 阶段154这个忽略了,因为重试之后几乎都可以通过(调整容器内存可以直接避免这个问题),在调整Map Reduce的内存过程中花了好多时间,另外还有就是编码问题,出现SolrServerException: org.apache.solr.client.solrj.SolrServerException: java.lang.RuntimeException: [was class java.io.CharConversionException] Invalid UTF-8 character 0xffff at char #18928, byte #47990)

这个问题暂时未解决,查阅资料说可以用如下方法解决,正在尝试(数据导入估计得2-3天,慢慢等等看了):

  1. public static String stripNonCharCodepoints(String input) {
  2. StringBuilder retval = new StringBuilder();
  3. char ch;
  4.  
  5. for (int i = 0; i < input.length(); i++) {
  6. ch = input.charAt(i);
  7.  
  8. // Strip all non-characters
  9. // http://unicode.org/cldr/utility/list-unicodeset.jsp?a=[:Noncharacter_Code_Point=True:]
  10. // and non-printable control characters except tabulator, new line and
  11. // carriage return
  12. if (ch % 0x10000 != 0xffff && // 0xffff - 0x10ffff range step 0x10000
  13. ch % 0x10000 != 0xfffe && // 0xfffe - 0x10fffe range
  14. (ch <= 0xfdd0 || ch >= 0xfdef) && // 0xfdd0 - 0xfdef
  15. (ch > 0x1F || ch == 0x9 || ch == 0xa || ch == 0xd)) {
  16.  
  17. retval.append(ch);
  18. }
  19. }
  20.  
  21. return retval.toString();
  22. }

  

资料参考:

http://www.aboutyun.com/thread-24447-1-1.html

http://fbinbin.iteye.com/blog/2357294

https://blog.csdn.net/d6619309/article/details/51304135?locationNum=1&fps=1

https://github.com/apache/nutch/blob/master/src/plugin/indexer-solr/src/java/org/apache/nutch/indexwriter/solr/SolrUtils.java#L76

https://blog.csdn.net/vegetable_bird_001/article/details/53420131

Key-Value Store Indexer(Lily HBase Indexer) 小型采坑的更多相关文章

  1. Lily HBase Indexer同步HBase二级索引到Solr丢失数据的问题分析

    一.问题描述二.分析步骤2.1 查看日志2.2 修改Solr的硬提交2.3 寻求StackOverFlow帮助2.4 修改了read-row="never"后,丢失部分字段2.5 ...

  2. hbases索引技术:Lily HBase Indexer介绍

    Lily HBase Indexer 为hbase提供快速查询,他允许不写代码,快速容易的把hbase行索引到solr.Lily HBase Indexer drives HBase indexing ...

  3. Lily hbase indexer搭建配置概要文档

    1.solrcloud搭建好2.hbase-solr-indexer服务开启3.确定hbase中的对应的表开启replication功能 create '} // 1表示开启replication 已 ...

  4. solr6.3 + Hbase Indexer使用MR创建索引,错误Bad return type

    使用solr6.3 + Hbase Indexer ,通过Hbase-indexer从Hbase建立索引到solr中,进行全文搜索. 两种实现方式:① 开启hbase-indexer进行实时同步新数据 ...

  5. etcd -> Highly-avaliable key value store for shared configuration and service discovery

    The name "etcd" originated from two ideas, the unix "/etc" folder and "d&qu ...

  6. hbase部署经验与坑总结

    1.本地单机部署hbase,想要使用独立zookeeper,不使用自带的 vim conf/hbase-env.sh export HBASE_MANAGES_ZK=false 设置不使用自带zook ...

  7. APP store 上架过程中碰到的那些坑&被拒的各种奇葩原因整理&审核指南中文版

    苹果官方发布的十大常见被拒原因 1.崩溃次数和Bug数量.苹果要求开发者在将应用提交给App Store之前彻查自己的应用,以尽量避免Bug的存在. 2.链或错误的链接.应用中所有的链接必须是真实且有 ...

  8. openTSDB+HBase+ZK遇到的坑汇总

    1.zookeeper返回的hbase地址是hostname,外网如何访问? 如果需要直接访问zk获取hbase地址进而访问,目前需要本机配置host ip  hostname 如果是要长期解决方法, ...

  9. CDH版本Hbase二级索引方案Solr key value index

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

随机推荐

  1. iOS树状视图(折叠单元格)详细使用

    RATreeView是一个第三方的iOS树视图(通俗的讲就是折叠单元格),它是对UITableView的封装,定义自己的委托和数据源的法,RATreeView是高度可定制的,并且有很多功能.很多朋友都 ...

  2. Java关键字之this

    this的作用: 1) this是当前对象的一个引用,便于对当前对象参数的使用: 2)可以返回对象的自己这个类的引用,同时还可以在一个构造函数当中调用另一个构造函数 this示例: public cl ...

  3. Dynamics CRM 通过OData查询数据URI中包含中文的情况

    filter条件如下"?$filter=new_name eq '采购主管' and new_entityname eq 'new_purchaseenquiry' ",如果用这个 ...

  4. 谈谈PCI的GXL

    最近在测试PCI的GXL,对测试的结果大致列举一下. 何为GXL: GXL( Geoimaging Accelerator, GXL )是PCI公司面向海量影像自动化生产提出的新一代解决方案产品,主要 ...

  5. 对C语言中递归算法的分析

    C通过运行时堆栈支持递归函数的实现.递归函数就是直接或间接调用自身的函数.     许多教科书都把计算机阶乘和菲波那契数列用来说明递归,非常不幸我们可爱的著名的老潭老师的<C语言程序设计> ...

  6. Adobe Audition 基本使用

    1.1简介 Adobe Audition (前身是Cool Edit Pro) 是Adobe公司开发的一款功能强大.效果出色的多轨录音和音频处理软件.它是一个非常出色的数字音乐编辑器和MP3制作软件. ...

  7. Material Design之CoordinatorLayout+AppBarLayout实现上滑隐藏ToolBar

    ok,今天继续更新Material Design系列!!! 废话不说,先看看效果图吧: 好了,现在来讲讲上图是怎么实现的吧!讲之前先讲讲几个控件: CoordinatorLayout  该控件也是De ...

  8. 超过1个G免费资源,16套质量超高风格多样的移动UIKIT

    编者按:前两天发了一篇价值4000元的收费可商用Web 模版,今天来一波同样高质量的的App UI KIT,包括音乐/餐厅/运动等等类型的App,无论是下载来学习还是商用(对的可商用!)都不容错过,@ ...

  9. Linux备份策略(第二版)

    备份策略 备份思想 一.系统潜在的威胁 Ø 系统硬件故障 Ø 软件故障 Ø 电源故障 Ø 用户的误操作 Ø 人为破坏 Ø 缓存中的内容没有及时的写入磁盘 Ø 自然灾害 二.备份介质的选择 备份介质:硬 ...

  10. Android群英传笔记——摘要,概述,新的出发点,温故而知新,可以为师矣!

    Android群英传笔记--摘要,概述,新的出发点,温故而知新,可以为师矣! 当工作的越久,就越感到力不从心了,基础和理解才是最重要的,所以买了两本书,医生的<Android群英传>和主席 ...