我当前在hdinsight群集中远程运行spark作业时遇到问题:
我的项目依赖于 netty-all
下面是我在pom文件中明确指定的内容:
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.51.Final</version>
</dependency>
最终构建的jar包含这个具有指定版本的包,在本地机器上运行spark作业可以很好地工作。但是,当我尝试在远程hdinsight群集中运行它时,该作业会引发以下异常:
java.lang.NoSuchMethodError: io.netty.handler.ssl.SslProvider.isAlpnSupported(Lio/netty/handler/ssl/SslProvider;)Z
我相信这是由于netty版本不匹配造成的,因为spark从远程集群中的默认系统类路径(而不是uberjar中定义的较新的netty包)获取旧的netty版本(netty-all-4.1.17)。
我尝试了不同的方法来解决这个问题,但似乎效果不佳:
使用maven shade插件重新定位类:
更多细节和它的问题在这里-缺少抽象类使用maven shade插件重新定位类
Spark配置
spark.driver.extraClassPath=<path to netty-all-4.1.50.Final.jar>
spark.executor.extraClassPath=<path to netty-all-4.1.50.Final.jar>
想知道是否有任何其他解决方案,以解决这个问题或任何步骤遗漏在这里?
1条答案
按热度按时间zbdgwd5y1#
您需要确保在类路径上只有netty4.1.50.final或更高版本