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


    使用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    583,390
    
    DirectSolrInputDocumentWriter: Index adds    18,727,537

    解决过程:

    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; 
    @58: areturn Reason: Type 'org/apache/http/impl/client/DefaultHttpClient' (current frame, stack[0]) 
    is not assignable to 'org/apache/http/impl/client/CloseableHttpClient' (from method signature) 
    Current Frame: bci: @58 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: 0000000: bb00 0959 2ab7 000a 4db2 000b b900 0c01 0000010: 
    0099 001e b200 0bbb 000d 59b7 000e 120f 0000020: 
    b600 102c b600 11b6 0012 b900 1302 002b 0000030: 
    b800 194e 2d2c b800 152d b0 
    Stackmap Table: append_frame(@47,Object[#159])

     去网上搜索了这个错误,一般的解决是修改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/10/mapreduce.tar.gz/hadoop/share/hadoop/common/lib/ httpclient-4.2.5.jar
    /usr/hdp/2.4.0.0-169/hadoop-yarn/lib/httpclient-4.2.5.jar
    /usr/hdp/2.4.0.0-169/hadoop/lib/httpclient-4.2.5.jar
    /usr/hdp/2.4.0.0-169/hadoop-mapreduce/httpclient-4.2.5.jar
    /usr/hdp/2.4.0.0-169/hadoop/client/httpclient-4.2.5.jar
     
    /hdfs/data1/hadoop/yarn/local/filecache/10/mapreduce.tar.gz/hadoop/share/hadoop/common/lib/ httpcore-4.2.5.jar
    /usr/hdp/2.4.0.0-169/hadoop-yarn/lib/httpcore-4.2.5.jar
    /usr/hdp/2.4.0.0-169/hadoop/lib/httpcore-4.2.5.jar
    /usr/hdp/2.4.0.0-169/hadoop-mapreduce/httpcore-4.2.5.jar
    /usr/hdp/2.4.0.0-169/hadoop/client/httpcore-4.2.5.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/>” 清空所有索引数据之后,付出的代价。总耗时:很多。

  • 相关阅读:
    Flowplayer-一款免费的WEB视频播放器
    nginx windows 版 创建windows 服务
    Windows Service Wrapper
    angular模板加载 ----ng-template
    理解AngularJS的作用域Scope
    Jquery使用ajax以及angularjs 动态模板加载并进行渲染
    angular.element方法汇总以及AngularJS 动态添加元素和删除元素
    JavaScript文件中调用AngularJS内部方法或改变$scope变量
    The repository for high quality TypeScript type definitions
    jspm 是浏览器包管理工具
  • 原文地址:https://www.cnblogs.com/liuting/p/7210266.html
Copyright © 2020-2023  润新知