环境:

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账户)

solrctl instancedir --create /root/config/

  

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

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

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="serialnumber" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="fulltext" type="text_ch" indexed="true" stored="true" required="true" multiValued="false" />
<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

<fieldType name="text_ch" class="solr.TextField" positionIncrementGap="100"><analyzer type="index"><tokenizer class="solr.SmartChineseSentenceTokenizerFactory"/><filter class="solr.SmartChineseWordTokenFilterFactory"/></analyzer>
</fieldType>

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

solrctl instancedir --create hbase-collection /root/config/
solrctl collection --create hbase-collection

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

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

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

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

morphlines : [{id : morphlineimportCommands : ["org.kitesdk.**","com.ngdata.**"]commands : [{extractHBaseCells {mappings : [{inputColumn : "fulltext:fulltext"outputField : "fulltext"type : stringsource : value},{inputColumn : "fileInfo:serialNumber"outputField : "serialnumber"type : stringsource : value}]}}{ logDebug { format : "output record: {}", args : ["@{}"]}}]}
]

步骤6: 注册 Lily HBase Indexer配置

hbase-indexer delete-indexer -n docIndex
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
hbase-indexer list-indexers   #查看是否正常运行

步骤7: 批量导入:

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

COLLECTION='hbase-collection'
ZK='gs-server-5002:2181,gs-server-5001:2181,gs-server-5000:2181'
echo 'Delete previous docs...'
solrctl collection --deletedocs $COLLECTION
echo 'Lily HBase MapReduce indexing...'
config="/etc/hadoop/conf.cloudera.yarn"
parcel="/opt/cloudera/parcels/CDH"
jar="$parcel/lib/hbase-solr/tools/hbase-indexer-mr-*-job.jar"
hbase_conf="/etc/hbase/conf/hbase-site.xml"
opts="'mapred.child.java.opts=-Xmx1024m'"
log4j="$parcel/share/doc/search*/examples/solr-nrt/log4j.properties"
zk="$ZK/solr"
libjars="lucene-analyzers-smartcn-4.10.3-cdh5.12.1.jar"
export HADOOP_OPTS="-Djava.security.auth.login.config=conf/jaas.conf"
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天,慢慢等等看了):

 public static String stripNonCharCodepoints(String input) {StringBuilder retval = new StringBuilder();char ch;for (int i = 0; i < input.length(); i++) {ch = input.charAt(i);// Strip all non-characters// http://unicode.org/cldr/utility/list-unicodeset.jsp?a=[:Noncharacter_Code_Point=True:]// and non-printable control characters except tabulator, new line and// carriage returnif (ch % 0x10000 != 0xffff && // 0xffff - 0x10ffff range step 0x10000ch % 0x10000 != 0xfffe && // 0xfffe - 0x10fffe range(ch <= 0xfdd0 || ch >= 0xfdef) && // 0xfdd0 - 0xfdef(ch > 0x1F || ch == 0x9 || ch == 0xa || ch == 0xd)) {retval.append(ch);}}return retval.toString();}

  

资料参考:

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

转载于:https://www.cnblogs.com/eviltuzki/p/9019095.html

Key-Value Store Indexer(Lily HBase Indexer) 小型采坑相关推荐

  1. Lily HBase Indexer使用整理

    关于Key-Value Indexer组件 CDH5.3.2中的Key-Value Indexer使用的是Lily HBase NRT Indexer服务,Lily HBase Indexer是一款灵 ...

  2. Lily HBase Indexer在CDH中的基本使用

    1. 简介 CDH上的Key-Value Store Indexer服务使用的是Lily HBase Indexer.Lily HBase Indexer是一款灵活的.可扩展的.高容错的,并且近实时的 ...

  3. 用Lily Hbase indexer 工具包同步Hbase的索引到solr出错

    用Lily Hbase indexer 工具包同步Hbase的索引到solr出错 错误堆栈 2019-05-21 06:52:07,181 ERROR [IPC Server handler 8 on ...

  4. 127.Lily HBase Indexer的使用

    127.1 流程图 127.2 Solr中建立collection Solr collection的schema文件建立 [root@ip-xxx-xx-x-xxx conf]# cat schema ...

  5. 使用Lily HBase Indexer

    第一步,打开solr的cloud mode. cd $SOLR_HOME/example java -Dbootstrap_confdir=./solr/collection1/conf -Dcoll ...

  6. 【Solr - HBase二级索引 —— Lily HBase Indexer】

    开门见山,直接上图,这图瞧着熟悉吧~哈哈哈 Reference https://blog.csdn.net/cafebar123/article/details/79405029

  7. [z] Flare-兼容Memcached协议的分布式(key/value store)键值存储系统

    http://nightsailer.com/2009/07/19/421.html Flare, Green Lab开发的开源产品,底层使用TC, 完全兼容Memcached协议(ASCII,非bi ...

  8. 记录建hbase对应hive外表坑

    (1)建hbase对应hive外表时,把hbase对应字段写成小写时,hive外表用select count(*) from hive外表名,统计有条数:但是用select * from hive表时 ...

  9. 阿里云HBase增强版全文索引功能技术解析

    新用户9.9元即可使用6个月云数据库HBase,更有低至1元包年的入门规格供广大HBase爱好者学习研究,更多内容请参考链接 阿里云HBase增强版(Lindorm)简介 阿里云数据库HBase增强版 ...

最新文章

  1. 微信小程序-自定义picker选择器
  2. Xshell使用xftp传输文件,使用pure-ftpd搭建ftp服务
  3. Reactive Extensions简介一
  4. .net 浏览器请求过程(图)
  5. offsetTop、offsetLeft、offsetWidth、offsetHeight、style中的样式
  6. Linux中vim编辑器的缩进的功能键
  7. 征稿通知!ICCV 2021 第一届面向意图表达的手绘草图研讨会
  8. php html class,html中规定元素的类名的属性class
  9. centos rpm安装zabbix
  10. 【爬虫剑谱】一卷3章 软件篇-Anaconda的安装及配置
  11. React Mixin
  12. OPENROWSET访问CSV格式文件
  13. 工作中要注意拍照录像,证明工作完成
  14. 莽荒天下:玩家闯昆仑插旗邀战,第5张照片亮了
  15. Ubuntu安装Qt以及配置步骤
  16. 中关村 - DIY之如何唯美地阅读电子书
  17. 第二学期无人机操作师结业复习测试
  18. 如何恢复android误删的文件夹,如何恢复误删的android手机文件
  19. qq输入法自定义短语并在手机qq输入法使用
  20. 大三学生关于实习和考研的安排

热门文章

  1. 计算机存储的大小端模式解析
  2. sdut2772 KMP的简单应用
  3. Simulink仿真 第七节 关系运算符及逻辑运算符模块
  4. java html字符串,java字符串方法
  5. java 越来越慢_浅析Java语言慢的原因
  6. .Net CLR 中的同步机制(一): 互斥体
  7. PyCharm的配置与安装
  8. C# linq创建嵌套组
  9. JUnit单元测试--IntelliJ IDEA
  10. modsecurity配置指令学习