立即注册 登录
About云-梭伦科技 返回首页

一颗银杏树的个人空间 https://aboutyun.com/?53709 [收藏] [复制] [分享] [RSS]

日志

spark-submit提交作业报错:Caused by: java.lang.NoClassDefFoundError: scala/runti ...

已有 3960 次阅读2017-6-2 14:58 |个人分类:spark| spark-submit, 提交任务, 依赖包冲突


这个问题折磨了我一周都不止,梦里、坐地铁无时不刻都在思考着解决这个报错。今天终于解决了,写个日志分享出来。
首先贴程序代码:
package com.zhangcheng

import org.apache.spark._;
import java.net.InetAddress
/**
  * Created by zhangcheng on 2017/6/1.
  */
object test1 {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf();
    val sc = new SparkContext(conf);
    val rdd = sc.parallelize(List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 12);
    def showName(): String = {
      val host = InetAddress.getLocalHost.getHostName();
      val thread = Thread.currentThread().getName();
      host + ":" + thread
    }
    rdd.map { x => while (true) { println("=====>" + showName() + ":" + x) } }.collect
    println("================> hello world");
    println("================> hello world");
    println("================> hello world");
    println("================> hello world");
    println("================> hello world");
    println("================> hello world");
  }
}
贴maven的pom.xml构建文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.zhangcheng</groupId>
  <artifactId>myspark03</artifactId>
  <version>1.0-SNAPSHOT</version>
  <inceptionYear>2008</inceptionYear>
  <properties>
    <scala.version>2.11.8</scala.version>
  </properties>

  <repositories>
    <repository>
      <id>scala-tools.org</id>
      <name>Scala-Tools Maven2 Repository</name>
      <url>http://scala-tools.org/repo-releases</url>
    </repository>
  </repositories>

  <pluginRepositories>
    <pluginRepository>
      <id>scala-tools.org</id>
      <name>Scala-Tools Maven2 Repository</name>
      <url>http://scala-tools.org/repo-releases</url>
    </pluginRepository>
  </pluginRepositories>

  <dependencies>
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_2.10</artifactId>
      <version>2.1.1</version>
    </dependency>
    <dependency>
      <groupId>org.scala-lang</groupId>
      <artifactId>scala-library</artifactId>
      <version>${scala.version}</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.4</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.specs</groupId>
      <artifactId>specs</artifactId>
      <version>1.2.5</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <reporting>
    <plugins>
      <plugin>
        <groupId>org.scala-tools</groupId>
        <artifactId>maven-scala-plugin</artifactId>
        <configuration>
          <scalaVersion>${scala.version}</scalaVersion>
        </configuration>
      </plugin>
    </plugins>
  </reporting>
</project>

贴报错输出:
17/06/01 15:00:53 INFO client.StandaloneAppClient$ClientEndpoint: Executor updated: app-20170601150053-0003/1 is now RUNNING
17/06/01 15:00:53 INFO client.StandaloneAppClient$ClientEndpoint: Executor updated: app-20170601150053-0003/0 is now RUNNING
17/06/01 15:00:53 INFO client.StandaloneAppClient$ClientEndpoint: Executor updated: app-20170601150053-0003/2 is now RUNNING
17/06/01 15:00:54 INFO handler.ContextHandler: Started o.s.j.s.ServletContextHandler@7f9e1534{/metrics/json,null,AVAILABLE}
17/06/01 15:00:54 INFO cluster.StandaloneSchedulerBackend: SchedulerBackend is ready for scheduling beginning after reached minRegisteredResourcesRatio: 0.0
Exception in thread "main" java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: scala/runtime/java8/JFunction1$mcVI$sp
at com.zhangcheng.test1$.main(test1.scala:20)
at com.zhangcheng.test1.main(test1.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:738)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:187)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:212)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:126)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.NoClassDefFoundError: scala/runtime/java8/JFunction1$mcVI$sp
... 11 more
Caused by: java.lang.ClassNotFoundException: scala.runtime.java8.JFunction1$mcVI$sp
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 11 more
17/06/01 15:00:55 INFO spark.SparkContext: Invoking stop() from shutdown hook
17/06/01 15:00:55 INFO server.ServerConnector: Stopped ServerConnector@10e3d0ef{HTTP/1.1}{0.0.0.0:4040}

根据报错信息网上搜了下解决办法,貌似就只有一篇文章报类似这样的错误。原因是scala依赖包的版本和spark中的原生scala版本不一致。
恩,我也照着这个思路来分析问题,当然我也有更好的依据初步大概率判断是依赖冲突问题,《spark快速大数据分析》这本书中有讲到,贴出来:

“7.4.3 依赖冲突
当用户应用与Spark 本身依赖同一个库时可能会发生依赖冲突,导致程序崩溃。这种情况
不是很常见,但是出现的时候也让人很头疼。通常,依赖冲突表现为Spark 作业执行过
程中抛出NoSuchMethodError、ClassNotFoundException,或其他与类加载相关的JVM 异
常。对于这种问题,主要有两种解决方式:一是修改你的应用,使其使用的依赖库的版本
与Spark 所使用的相同,二是使用通常被称为“shading”的方式打包你的应用。Maven 构
建工具通过对例7-5 中使用的插件(事实上,shading 的功能也是这个插件取名为mavenshade-
plugin 的原因)进行高级配置来支持这种打包方式。shading 可以让你以另一个命名
空间保留冲突的包,并自动重写应用的代码使得它们使用重命名后的版本。这种技术有些
简单粗暴,不过对于解决运行时依赖冲突的问题非常有效。如果要了解使用这种打包方式
的具体步骤,请参阅你所使用的构建工具对应的文档。“

照着上面两种解决办法我查看了下我的各个软件版本: 
1.spark 
  spark_core 2.11 
version:2.1.1
2.scala
系统中安装的scala版本:scala 2.12.2
spark中集成的scala版本:scala 2.11.8
pom文件中的scala依赖库的版本是2.11.8没错,同时也将系统安装的scala重新装成2.12.2版本的。
最后将pom文件中的spark依赖库改成spark_core 2.11 version:2.1.1问题解决了。

大数据全套视频出售:http://blog.itpub.net/30522879/viewspace-2140406/




路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

关闭

推荐上一条 /2 下一条