Hive Solr 存储处理程序 Httpclient 错误

Hive Solr Storage handler Httpclient error

我开发了 Hive solrCloud 存储处理程序,当我 运行 select 语句 hive 抛出以下错误时:

Exception in thread "main" java.lang.VerifyError: 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; @62: 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: @62 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 0359 2ab7 0004 4db2 0005 b900 0601

0000010: 0099 001e b200 05bb 0007 59b7 0008 1209

0000020: b600 0a2c b600 0bb6 000c b900 0d02 00bb

0000030: 0011 592b b700 124e 2d2c b800 102d b0

Stackmap Table: append_frame(@47,Object[#127]) at org.apache.solr.client.solrj.impl.CloudSolrClient.(CloudSolrClient.java:189)

class 路径中是否有我需要更新的 jar?

PS:我没有在 Hadoop 或 hive lib 目录中添加任何 jar 的写入权限。 系统配置: 配置单元 0.13,solrcloud 5.2。

JIRA 中有一个针对 solrj httpclient 版本冲突的未决问题。此问题的根本原因是 hadoop class 路径中的 httpclient 库版本冲突。 solrj 客户端未通过正确版本的 httpclient 进行初始化。
使用默认的 Httpclient 初始化 solrj 客户端应该可以解决这个问题。
例如

SystemDefaultHttpClient httpClient = new SystemDefaultHttpClient();
this.server = new CloudSolrClient(url,httpClient);

您可以导出 hadoop class 路径以将其他 jar 文件添加到 class 路径。检查 blog 以将 jar 添加到 mapreduce 作业 class 路径。

export HADOOP_CLASSPATH=/xxx/noggit-0.6.jar:/xxx/httpclient-4.5.1.jar