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
我开发了 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