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 и т. Д. После некоторой детективной работы все будет в порядке!