1

spark-submit を使用して、依存関係を含む jar を spark に送信しました。私のjarのメインメソッドで、HttpAsyncCliensインスタンスを作成し、いくつかのリクエストを実行したい(apache http async client library):

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 at org.apache.http .impl.nio.reactor.AbstractMultiworkerIOReactor.execute(AbstractMultiworkerIOReactor.java:315) org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager.execute(PoolingNHttpClientConnectionManager.java:191) at 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 at 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) で.apache.http.impl.nio.client.CloseableHttpAsyncClient.execute(CloseableHttpAsyncClient.java:107) at org.apache.http.impl.nio.client.CloseableHttpAsyncClient.execute(CloseableHttpAsyncClient.java:91) at spark.Application$. main(Application.scala:37) at spark.Application.main(Application.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect java.lang.reflect の .DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)。Method.invoke(Method.java:498) at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:731) at org.apache.spark.deploy. org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala: 121) org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) で121) org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) で121) org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) で

私のjarにはhttp-core依存関係がないようですが、org.apache.http.util.Asserts.check(ZLjava/lang/String;Ljava/lang/Object;)Vhttpクライアントの作成とリクエストの前または後にコードでこのメソッド()を呼び出すことができます:

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

4

1 に答える 1

1

ここでの解決策は、spark の直接のクラスパスにある httpcomponents.httpcore のバージョンと同期することです。バージョン 1.6 の場合、バージョンは 4.0.1 です。

META-INF などを表示するには、spark jar を解凍する必要があります。

于 2016-11-09T18:25:41.977 に答える