我有一个在YARN中运行的spark应用程序。应用程序中的一个依赖项需要httpclient 4.5.1。我明确地将其作为对我的pom的依赖。 但是,当我在YARN中运行应用程序时。我得到以下stacktrace
Factory method 'createClient' threw exception; nested exception is java.lang.NoSuchMethodError: org.apache.http.impl.conn.PoolingHttpClientConnectionManager.setValidateAfterInactivity(I)V
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1123)
看起来像Spark的依赖问题。有什么办法可以覆盖httpclient吗?
答案 0 :(得分:1)
我使用的解决方法是使用标志在YARN中运行spark应用程序 spark.executor.userClassPathFirst =真
这解决了我的问题。
答案 1 :(得分:0)
似乎这种方法was added in httpclient 4.4。运行报告为java.lang.NoSuchMethodError
的事实意味着您的类正在Spark平台上找到此类的另一个版本(PoolingHttpClientConnectionManager
)。也许另一个版本的Apache HTTP Client与Spark捆绑在一起?
我建议您使用Maven shade plugin创建一个自包含的应用程序,以便它(希望)可以使用它所需的类和JAR。