java.lang.NoSuchMethodError: org.apache.solr.client.solrj.impl.CloudSolrClient$Builder.withHttpClient

java.lang.NoSuchMethodError: org.apache.solr.client.solrj.impl.CloudSolrClient$Builder.withHttpClient

我按照 this 示例从 Solr 获取数据到我的 Scala Spark 程序。下面是我的代码:

val solrURL = "someurl"
val collectionName = "somecollection"

val solrRDD = new SelectSolrRDD(solrURL,collectionName,sc)

val solrQuery=new SolrQuery("somequery")
solrQuery.setTimeAllowed(0)

val solrDataRDD=solrRDD.query(solrQuery)

当我在我的本地 Spark 集群上 运行 这段代码时,我在 new selectSolrRDD 行得到以下异常:

java.lang.NoSuchMethodError: org.apache.solr.client.solrj.impl.CloudSolrClient$Builder.withHttpClient(Lorg/apache/http/client/HttpClient;)Lorg/apache/solr/client/solrj/impl/SolrClientBuilder;

我查看了 Whosebug 上的一些其他答案,但没有任何效果。

问题在于您的打包和部署(您的 pom.xml 假设您使用的是 Maven)。问题是当您 运行 您的 Spark 应用程序时,Solr 客户端库没有被加载。您需要将您的应用程序和任何依赖项打包到 "uber jar" 中以部署到集群。

看看 spark-solr 是如何设置的。他们使用 maven-shade-plugin 生成 uber jar。

我的集群中已经有 spark-solr 罐子,这与我使用的罐子有冲突。删除这些罐子后,我的代码工作正常。