NoSuchMethodError в искровой отправке

Я отправил флягу с зависимостями, чтобы зажечь, используя spark-submit. В основной метод моей банки я хочу создать 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..client.CloseableHttpAsyncClientBase$1.run(CloseableHttpAsyncClientBase.java:64) в java.lang.Thread.run(Thread.java:745) Исключение в потоке "main" java.lang.NoSuchMethodError: orgt.pache.h..check (ZLjava / lang / String; Ljava / lang / Object;) V в org.apache.http.impl.nio.client.CloseableHttpAsyncClientBase.ensureRunning(CloseableHttpAsyncClientBase.java:90) в org.apache.hiop.client.InternalHttpAsyncClient.execute(InternalHttpAsyncClient.java:123) в org.apache.http.impl.nio.client.CloseableHttpAsyncClient.execute(CloseableHttpAsyncClient.java:74l.ph.ph) или в.gp.nio.client.CloseableHttpAsyncClient.execute(CloseableHttpAsyncClient.java:107) в org.apache.http.impl.nio.client.CloseableHttpAsyncClient.execute (CloseableHttpAsyncClient.jjApplication.java:):) в искре.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)

Кажется, в моем банке нет зависимости от http-core, но я могу вызвать этот метод (org.apache.http.util.Asserts.check(ZLjava/lang/String;Ljava/lang/Object;)V) в коде до или после создания http-клиента и запроса:

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

1 ответ

Решением здесь является синхронизация с версией httpcomponents.httpcore, которая находится в непосредственном пути к классу spark. Для версии 1.6 версия 4.0.1.

Вам нужно будет расстегнуть молнию, чтобы увидеть META-INF и т. Д. После некоторой детективной работы все будет в порядке!

Другие вопросы по тегам