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 罐子,这与我使用的罐子有冲突。删除这些罐子后,我的代码工作正常。
我按照 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 罐子,这与我使用的罐子有冲突。删除这些罐子后,我的代码工作正常。