Key-Value Store Indexer(Lily HBase Indexer) 小型采坑
环境:
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 : morphline
importCommands : [
"org.kitesdk.**",
"com.ngdata.**"
]
commands : [
{
extractHBaseCells {
mappings : [
{
inputColumn : "fulltext:fulltext"
outputField : "fulltext"
type : string
source : value
},
{
inputColumn : "fileInfo:serialNumber"
outputField : "serialnumber"
type : string
source : 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 return
if (ch % 0x10000 != 0xffff && // 0xffff - 0x10ffff range step 0x10000
ch % 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
Key-Value Store Indexer(Lily HBase Indexer) 小型采坑的更多相关文章
- Lily HBase Indexer同步HBase二级索引到Solr丢失数据的问题分析
一.问题描述二.分析步骤2.1 查看日志2.2 修改Solr的硬提交2.3 寻求StackOverFlow帮助2.4 修改了read-row="never"后,丢失部分字段2.5 ...
- hbases索引技术:Lily HBase Indexer介绍
Lily HBase Indexer 为hbase提供快速查询,他允许不写代码,快速容易的把hbase行索引到solr.Lily HBase Indexer drives HBase indexing ...
- Lily hbase indexer搭建配置概要文档
1.solrcloud搭建好2.hbase-solr-indexer服务开启3.确定hbase中的对应的表开启replication功能 create '} // 1表示开启replication 已 ...
- solr6.3 + Hbase Indexer使用MR创建索引,错误Bad return type
使用solr6.3 + Hbase Indexer ,通过Hbase-indexer从Hbase建立索引到solr中,进行全文搜索. 两种实现方式:① 开启hbase-indexer进行实时同步新数据 ...
- 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 ...
- hbase部署经验与坑总结
1.本地单机部署hbase,想要使用独立zookeeper,不使用自带的 vim conf/hbase-env.sh export HBASE_MANAGES_ZK=false 设置不使用自带zook ...
- APP store 上架过程中碰到的那些坑&被拒的各种奇葩原因整理&审核指南中文版
苹果官方发布的十大常见被拒原因 1.崩溃次数和Bug数量.苹果要求开发者在将应用提交给App Store之前彻查自己的应用,以尽量避免Bug的存在. 2.链或错误的链接.应用中所有的链接必须是真实且有 ...
- openTSDB+HBase+ZK遇到的坑汇总
1.zookeeper返回的hbase地址是hostname,外网如何访问? 如果需要直接访问zk获取hbase地址进而访问,目前需要本机配置host ip hostname 如果是要长期解决方法, ...
- CDH版本Hbase二级索引方案Solr key value index
概述 在Hbase中,表的RowKey 按照字典排序, Region按照RowKey设置split point进行shard,通过这种方式实现的全局.分布式索引. 成为了其成功的最大的砝码. 然而单一 ...
随机推荐
- Android开发之初识MVP模式
各位亲爱的小伙伴,有没有想我啊,我胡汉wing又回来了. 很长一段时间没有更新博客..原因是..从离职回到学校以后,一直在享受最后的学生时光(打游戏).. 游戏固然很爽,但是觉得实在很荒废,于是半夜诈 ...
- javascript语法之Date对象与小案例
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- iOS开发支付集成之微信支付
这一篇是<iOS开发之支付>这一部分的继支付宝支付集成,银联支付集成第三篇,微信支付.在集成的时候建议都要去下载最新版的SDK,因为我知道的前不久支付宝,银联都更新了一次,微信的不太清楚更 ...
- Java之美[从菜鸟到高手演变]之设计模式四
在阅读过程中有任何问题,请及时联系:egg. 邮箱:xtfggef@gmail.com 微博:http://weibo.com/xtfggef 转载请说明出处:http://blog.csdn.net ...
- 网站开发进阶(二十三)Address already in use: JVM_Bind <null>:8088
Address already in use: JVM_Bind <null>:8088 注:请点击此处进行充电! 阿里云服务器又莫名其妙的宕掉!内存泄漏问题依然存在,又出现了端口占用的情 ...
- Android 之dragger使用
1.依赖的注入和配置独立于组件之外,注入的对象在一个独立.不耦合的地方初始化,这样在改变注入对象时,我们只需要修改对象的实现方法,而不用大改代码库. 2.依赖可以注入到一个组件中:我们可以注入这些依赖 ...
- libRTMP使用说明
名称 librtmp − RTMPDump Real-Time Messaging Protocol API 库 RTMPDump RTMP(librtmp, -lrtmp) 简介 #include& ...
- Linux变量内容的删除、取代与替换
变量内容的删除与取代 范例一:先让小写的 path 自定义变量配置的与 PATH 内容相同 [root@www ~]# path=${PATH} [root@www ~]# echo $path /u ...
- Leetcode_278_First Bad Version
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/49719255 You are a product mana ...
- obj-c利用dispatch库并发示例
我们首先写一个纯C的程序,代码的功能为显示指定范围整数中素数的个数: #include <stdio.h> #include <stdlib.h> #include <s ...