使用solr6.3 + Hbase Indexer ,通过Hbase-indexer从Hbase建立索引到solr中,进行全文搜索。

两种实现方式:① 开启hbase-indexer进行实时同步新数据 ② 使用MapReduce给存量数据创建索引。

在用MR跑索引的过程中,碰到问题:Mapper数总共35个,但failed了4个,成功也显示35个,整个JOB显示成功success。但是最终索引总数,比hbase表中数据要少,索引数与表数据量不一致。查看MR的counter,有插入错误的情况,如下所示:

DirectSolrInputDocumentWriter: Document add errors    ,

DirectSolrInputDocumentWriter: Index adds    ,,

解决过程:

1、总数据1900多万,不清楚是不是由于数据量较大的缘故导致(不知道哪里的问题),由于solr了解的不深,也只会运维的一些操作,想过尝试把原表分成4-5张表,再分别跑MR到一个solr的collection中去(总体操作流程是一样的),但把这作为最终是在解决不了问题之后的下策。

2、查看MR运行中错误的4个mapper,备注里报以下错误,而且failed集中在同一台服务器上:(MR执行成功的mapper里也有“exit 403”之类的error,这些提示好像也不受影响,太深入的也不了解 。整个JOB显示successed,有时候就会忽略这些failed。)

Error: Bad return type Exception Details:
Location: org/apache/solr/client/solrj/impl/HttpClientUtil.createClient
(Lorg/apache/solr/common/params/SolrParams;Lorg/apache/http/conn/ClientConnectionManager;)
Lorg/apache/http/impl/client/CloseableHttpClient;
@: areturn Reason: Type 'org/apache/http/impl/client/DefaultHttpClient' (current frame, stack[])
is not assignable to 'org/apache/http/impl/client/CloseableHttpClient' (from method signature)
Current Frame: bci: @ flags: { }
locals: { 'org/apache/solr/common/params/SolrParams', 'org/apache/http/conn/ClientConnectionManager',
'org/apache/solr/common/params/ModifiableSolrParams', 'org/apache/http/impl/client/DefaultHttpClient' }
stack: { 'org/apache/http/impl/client/DefaultHttpClient' }
Bytecode: : bb00 2ab7 000a 4db2 000b b900 0c01 :
001e b200 0bbb 000d 59b7 000e 120f :
b600 102c b600 11b6 b900 002b :
b800 194e 2d2c b800 152d b0
Stackmap Table: append_frame(@,Object[#])

去网上搜索了这个错误,一般的解决是修改httpclient对象创建时候的代码,参考:http://www.ithao123.cn/content-10445716.html。但不清楚这些代码是在哪里进行查看或者修改之类的,问题解决不了。

后来,在Google里查有一个国外的回答里,httpclient的版本问题。想起之前部署solr时也提到过httpclient的版本问题。

最终解决:

solr6.3.0跟hadoop2.7存在不兼容性,主要是httpclient、httpcore不兼容,hadoop使用的是httpcilent-4.2.5和httpcore-4.2.5,而solr6.3.0使用的是httpclient-4.4.1和httpcore-4.4.1,两个版本之间接口有些变化导致不兼容。解决办法是把hadoop中的jar包替换成高版本4.3或4.4.1。需要替换以下地方的版本:

/hdfs/data1/hadoop/yarn/local/filecache//mapreduce.tar.gz/hadoop/share/hadoop/common/lib/ httpclient-4.2..jar
/usr/hdp/2.4.0.0-/hadoop-yarn/lib/httpclient-4.2..jar
/usr/hdp/2.4.0.0-/hadoop/lib/httpclient-4.2..jar
/usr/hdp/2.4.0.0-/hadoop-mapreduce/httpclient-4.2..jar
/usr/hdp/2.4.0.0-/hadoop/client/httpclient-4.2..jar /hdfs/data1/hadoop/yarn/local/filecache//mapreduce.tar.gz/hadoop/share/hadoop/common/lib/ httpcore-4.2..jar
/usr/hdp/2.4.0.0-/hadoop-yarn/lib/httpcore-4.2..jar
/usr/hdp/2.4.0.0-/hadoop/lib/httpcore-4.2..jar
/usr/hdp/2.4.0.0-/hadoop-mapreduce/httpcore-4.2..jar
/usr/hdp/2.4.0.0-/hadoop/client/httpcore-4.2..jar

上边这些目录在部署的时候都执行过替换,然后全站搜索了“httpclient-4.2.5.jar”,在“/hdfs/data1/hadoop/yarn/local/filecache/12/mapreduce.tar.gz/hadoop/share/hadoop/common/lib/”目录下发现了4.2.5的版本,替换成4.3的版本,重新再跑MR,用时3.5h左右(正常时间),OK了,索引条数与hbase表条数一致。

PS:这是不小心选择错collection,执行“<delete><query>*:*</query></delete><commit/>” 清空所有索引数据之后,付出的代价。总耗时:很多。

solr6.3 + Hbase Indexer使用MR创建索引,错误Bad return type的更多相关文章

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

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

  2. lucene全文搜索之三:生成索引字段,创建索引文档(给索引字段加权)基于lucene5.5.3

    前言:上一章中我们已经实现了索引器的创建,但是我们没有索引文档,本章将会讲解如何生成字段.创建索引文档,给字段加权以及保存文档到索引器目录 luncene5.5.3集合jar包下载地址:http:// ...

  3. MySQL 如何创建索引?怎么优化?

    索引类似大学图书馆建书目索引,可以提高数据检索的效率,降低数据库的IO成本.MySQL在300万条记录左右性能开始逐渐下降,虽然官方文档说500~800w记录,所以大数据量建立索引是非常有必要的.My ...

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

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

  5. HBase中创建索引

    hbasene(https://github.com/akkumar/hbasene)是开源项目,在hbase存储上封装使用Lucene来创建索引,代码API非常简单,熟悉lucene的朋友可以很方便 ...

  6. hbase基于solr配置二级索引

    一.概述 Hbase适用于大表的存储,通过单一的RowKey查询虽然能快速查询,但是对于复杂查询,尤其分页.查询总数等,实现方案浪费计算资源,所以可以针对hbase数据创建二级索引(Hbase Sec ...

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

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

  8. lucene简介 创建索引和搜索初步

    lucene简介 创建索引和搜索初步 一.什么是Lucene? Lucene最初是由Doug Cutting开发的,2000年3月,发布第一个版本,是一个全文检索引擎的架构,提供了完整的查询引擎和索引 ...

  9. Key-Value Store Indexer(Lily HBase Indexer) 小型采坑

    环境: Cloudera Express 5.12.1 JDK 1.8.0_92 CentOS 7 步骤1:数据导入到Hbase中(非正题,跳过) hbase中表为allDoc,两个Family:fu ...

随机推荐

  1. 入职这一段时间的总结,Don't Repeat Yourself.

    1.第一次接触到大型软件系统的开发,现在我们使用的是 python + flask +vue.js ,数据库:postgresql 2. 不要在自己不懂的情况下复制代码,每次分析一段代码的时候,就跟以 ...

  2. 一天搞定CSS:盒模型content、padding、border、margin--06

    1.盒模型 网页设计中常听的属性名:内容(content).填充(padding).边框(border).边界(margin), CSS盒子模式都具备这些属性. 这些属性我们可以用日常生活中的常见事物 ...

  3. 通过wireshark学习Traceroute命令(UDP,ICMP协议)

    traceroute: 通过TTL限定的ICMP/UDP/TCP侦测包来发现从本地主机到远端目标主机之间的第三层转发路径.用来调试网络连接性和路由问题. mtr: traceroute的一个变种,能根 ...

  4. Python初探

    Q:DBA是运维数据库,为什么还要懂开发? A: 维护:维护的机器太多了,很多重复的操作,需要开发出工具来实现 监控:所有机器的运行情况和健康状况都需要了解,全盘掌握cup.内存.磁盘.网络流量.数据 ...

  5. Leetcode 494 Target Sum 动态规划 背包+滚动数据

    这是一道水题,作为没有货的水货楼主如是说. 题意:已知一个数组nums {a1,a2,a3,.....,an}(其中0<ai <=1000(1<=k<=n, n<=20) ...

  6. 盒子模型,定位技术,负边距,html5 新增标签

    盒子模型 /*[margin 外边距] margin属性最多四个 1.只写一个值,四个方向的margin均为这个值 2.写两个值:上,右两个方向,下默认=上,右 默认=左 3.写三个值:上.右.下三个 ...

  7. Javaee需不需要培训?培训完可以顺利找到工作吗?

    Javaee需不需要培训?培训完可以顺利找到工作吗? 在IT行业中Java以它通用性.高效性.平台移植性和安全性遍布各个领域,它的火热也给IT市场发展带来一定影响,随着Java技术的广泛运营,企业对J ...

  8. CSS(3)实现水平垂直居中效果

    CSS实现水平垂直居中对齐 在CSS中实现水平居中,会比较简单.常见的,如果想实现inline元素或者inline-block元素水平居中,可以在其父级块级元素上设置text-align: cente ...

  9. ASP.NET MVC 重写RazorViewEngine实现多主题切换

    在ASP.NET MVC中来实现主题的切换一般有两种方式,一种是通过切换皮肤的css和js引用,一种就是通过重写试图引擎.通过重写试图引擎的方式更加灵活,因为我不仅可以在不同主题下面布局和样式不一样, ...

  10. GC机制总结

    一.为什么需要GC 应用程序对资源操作,通常简单分为以下几个步骤: 1.为对应的资源分配内存 2.初始化内存 3.使用资源 4.清理资源 5.释放内存 应用程序对资源(内存使用)管理的方式,常见的一般 ...