我在Hortonworks Distribution 2.4(有效的hadoop 2.7.1和spark 1.6.1)


我在超级jar(2.1.0)中打包我自己的spark版本,而集群在1.6.1上 . 在这个过程中,我通过一个胖 jar (使用maven-uber jar概念构建)发送所有必需的库 .

但是,spark zh_cn(通过spark 2.1.0客户端)在jersey客户端上引用NoClassFound Error失败 . 在列出我的超级jar内容后,我可以在jar中看到确切的类文件,仍然火花/纱线无法找到它 .

这里去 - 错误信息 -

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/jersey/api/client/config/ClientConfig
        at org.apache.hadoop.yarn.client.api.TimelineClient.createTimelineClient(TimelineClient.java:55)
        at org.apache.hadoop.yarn.client.api.impl.YarnClientImpl.createTimelineClient(YarnClientImpl.java:181)
        at org.apache.hadoop.yarn.client.api.impl.YarnClientImpl.serviceInit(YarnClientImpl.java:168)
        at org.apache.hadoop.service.AbstractService.init(AbstractService.java:163)
        at org.apache.spark.deploy.yarn.Client.submitApplication(Client.scala:151)
        at org.apache.spark.scheduler.cluster.YarnClientSchedulerBackend.start(YarnClientSchedulerBackend.scala:56)
        at org.apache.spark.scheduler.TaskSchedulerImpl.start(TaskSchedulerImpl.scala:156)
        at org.apache.spark.SparkContext.<init>(SparkContext.scala:509)
        at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2313)
        at org.apache.spark.sql.SparkSession$Builder$$anonfun$6.apply(SparkSession.scala:868)
        at org.apache.spark.sql.SparkSession$Builder$$anonfun$6.apply(SparkSession.scala:860)
        at scala.Option.getOrElse(Option.scala:121)
        at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:860)

这是我尝试在jar文件中找到类 -

jar -tf uber-xxxxx-something.jar | grep jersey | grep ClientCon
com/sun/jersey/api/client/ComponentsClientConfig.class
com/sun/jersey/api/client/config/ClientConfig.class

... 其他文件

这可能会发生什么?建议?想法请..

EDIT pom的球衣客户端部分在这里 -

<dependency>
         <groupId>com.sun.jersey</groupId>
         <artifactId>jersey-client</artifactId>
         <version>1.19.3</version>
     </dependency>

EDIT 我也想说明这一点,我的代码是用Scala 2.12编译的,兼容级别设置为2.11 . 但是,群集可能在2.10 . 我的意思是,因为我认为群集节点不一定必须安装Scala二进制文件; YARN只是在不使用Scala二进制文件的情况下启动组件的jar / class文件 . 想知道那是否在这里发挥作用!