【问题标题】:NoSuchMethodError in spark submit火花提交中的 NoSuchMethodError
【发布时间】:2017-02-26 22:36:11
【问题描述】:

我使用 spark-submit 提交了包含依赖项的 jar 以激发火花。在我的 jar 的主要方法中,我想创建 HttpAsyncCliens 实例并执行一些请求(apache http 异步客户端库):

val httpClient = HttpAsyncClients.custom.setMaxConnTotal(10).setMaxConnPerRoute(10).build
httpClient.start()
httpClient.execute(new HttpGet("https://google.com"), new FutureCallback[HttpResponse] {
    /* callbacks */
})

抛出异常:

线程“pool-1-thread-1”java.lang.NoSuchMethodError 中的异常: org.apache.http.util.Asserts.check(ZLjava/lang/String;Ljava/lang/Object;)V 在 org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor.execute(AbstractMultiworkerIOReactor.java:315) 在 org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager.execute(PoolingNHttpClientConnectionManager.java:191) 在 org.apache.http.impl.nio.client.CloseableHttpAsyncClientBase$1.run(CloseableHttpAsyncClientBase.java:64) 在 java.lang.Thread.run(Thread.java:745) 线程“主”java.lang.NoSuchMethodError 中的异常: org.apache.http.util.Asserts.check(ZLjava/lang/String;Ljava/lang/Object;)V 在 org.apache.http.impl.nio.client.CloseableHttpAsyncClientBase.ensureRunning(CloseableHttpAsyncClientBase.java:90) 在 org.apache.http.impl.nio.client.InternalHttpAsyncClient.execute(InternalHttpAsyncClient.java:123) 在 org.apache.http.impl.nio.client.CloseableHttpAsyncClient.execute(CloseableHttpAsyncClient.java:74) 在 org.apache.http.impl.nio.client.CloseableHttpAsyncClient.execute(CloseableHttpAsyncClient.java:107) 在 org.apache.http.impl.nio.client.CloseableHttpAsyncClient.execute(CloseableHttpAsyncClient.java:91) 在 spark.Application$.main(Application.scala:37) 在 spark.Application.main(Application.scala) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:731) 在 org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:181) 在 org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206) 在 org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121) 在 org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

我的 jar 中似乎没有 http-core 依赖项,但我可以在 http 客户端创建和请求之前或之后在代码中调用此方法 (org.apache.http.util.Asserts.check(ZLjava/lang/String;Ljava/lang/Object;)V):

org.apache.http.util.Asserts.check(true, "test", "test2") // it produces no exception

val httpClient = HttpAsyncClients.custom.setMaxConnTotal(10).setMaxConnPerRoute(10).build
httpClient.start()
httpClient.execute(new HttpGet("https://google.com"), new FutureCallback[HttpResponse] {
    /* callbacks */
}) // it produces exception

如果我可以在代码中从同一个类路径调用此方法,为什么会出现 NoSuchMethodError?

Apache httpasyncclient v4.1

【问题讨论】:

    标签: scala apache-spark apache-httpasyncclient


    【解决方案1】:

    这里的解决方案是与 spark 的直接类路径中的 httpcomponents.httpcore 版本同步。对于版本 1.6,版本为 4.0.1。

    您必须解压缩 spark jar 才能查看 META-INF 等。经过一些侦探工作后一切都会好起来的!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-24
      • 2019-11-13
      相关资源
      最近更新 更多