【问题标题】:java.lang.NoClassDefFoundError: Could not initialize class - spark/scalajava.lang.NoClassDefFoundError:无法初始化类 - spark/scala
【发布时间】:2018-04-14 08:11:00
【问题描述】:

我是 spark/scala 开发的新手。我正在使用 maven 来构建我的项目,IDE 是 intelliJ。我正在尝试查询一个配置单元表,然后迭代生成的数据帧(使用foreach)。这是我的代码:

try{
    val DF_1 = hiveContext.sql("select distinct(address) from 
     test_table where trim(address)!=''")
    println("number of rows: "+DF_1.count)
    DF_1.foreach(x => {
      val y =hiveContext.sql("select place from test_table where address='"+x(0).toString+"'")
      if(y.count > 1){
        println("Multiple place values for address: "+x(0).toString)
        y.foreach(r => println(r))
        println("*************")
      }
    })} 
catch {case e: Exception => e.printStackTrace()}

每次迭代时,我都在查询同一个表以获取另一列,试图查看test_table 中的每个address 是否有多个places 值。我没有编译错误,应用程序构建成功。但是,当我运行上述代码时,出现以下错误:

java.lang.NoClassDefFoundError: Could not initialize class xxxxxxxx

应用程序成功启动,打印DF_1 中的行的count,然后在foreach 循环中失败并出现上述错误。我在我的 jar 上做了一个 jar xvf,可以看到主类 - driver.class:

com/.../driver$$anonfun$1$$anonfun$apply$1.class
com/.../driver$$anonfun$1.class
com/.../driver$$anonfun$2.class
com/.../driver$$anonfun$3.class
com/.../driver$$anonfun$4.class
com/.../driver$$anonfun$5.class
com/.../driver$$anonfun$main$1$$anonfun$apply$1.class
com/.../driver$$anonfun$main$1$$anonfun$apply$2.class
com/.../driver$$anonfun$main$1$$anonfun$apply$3.class
com/.../driver$$anonfun$main$1.class
com/.../driver$$anonfun$main$10$$anonfun$apply$9.class
com/.../driver$$anonfun$main$10.class
com/.../driver$$anonfun$main$11.class
com/.../driver$$anonfun$main$12.class
com/.../driver$$anonfun$main$13.class
com/.../driver$$anonfun$main$14.class
com/.../driver$$anonfun$main$15.class
com/.../driver$$anonfun$main$16.class
com/.../driver$$anonfun$main$17.class
com/.../driver$$anonfun$main$18.class
com/.../driver$$anonfun$main$19.class
com/.../driver$$anonfun$main$2$$anonfun$apply$4.class
com/.../driver$$anonfun$main$2$$anonfun$apply$5.class
com/.../driver$$anonfun$main$2$$anonfun$apply$6.class
com/.../driver$$anonfun$main$2.class
com/.../driver$$anonfun$main$20.class
com/.../driver$$anonfun$main$21.class
com/.../driver$$anonfun$main$22.class
com/.../driver$$anonfun$main$23.class
com/.../driver$$anonfun$main$3$$anonfun$apply$7.class
com/.../driver$$anonfun$main$3$$anonfun$apply$8.class
com/.../driver$$anonfun$main$3.class
com/.../driver$$anonfun$main$4$$anonfun$apply$9.class
com/.../driver$$anonfun$main$4.class
com/.../driver$$anonfun$main$5.class
com/.../driver$$anonfun$main$6$$anonfun$apply$1.class
com/.../driver$$anonfun$main$6$$anonfun$apply$2.class
com/.../driver$$anonfun$main$6$$anonfun$apply$3.class
com/.../driver$$anonfun$main$6$$anonfun$apply$4.class
com/.../driver$$anonfun$main$6$$anonfun$apply$5.class
com/.../driver$$anonfun$main$6.class
com/.../driver$$anonfun$main$7$$anonfun$apply$1.class
com/.../driver$$anonfun$main$7$$anonfun$apply$2.class
com/.../driver$$anonfun$main$7$$anonfun$apply$3.class
com/.../driver$$anonfun$main$7$$anonfun$apply$4.class
com/.../driver$$anonfun$main$7$$anonfun$apply$5.class
com/.../driver$$anonfun$main$7$$anonfun$apply$6.class
com/.../driver$$anonfun$main$7$$anonfun$apply$7.class
com/.../driver$$anonfun$main$7$$anonfun$apply$8.class
com/.../driver$$anonfun$main$7.class
com/.../driver$$anonfun$main$8$$anonfun$apply$10.class
com/.../driver$$anonfun$main$8$$anonfun$apply$4.class
com/.../driver$$anonfun$main$8$$anonfun$apply$5.class
com/.../driver$$anonfun$main$8$$anonfun$apply$6.class
com/.../driver$$anonfun$main$8$$anonfun$apply$7.class
com/.../driver$$anonfun$main$8$$anonfun$apply$8.class
com/.../driver$$anonfun$main$8$$anonfun$apply$9.class
com/.../driver$$anonfun$main$8.class
com/.../driver$$anonfun$main$9$$anonfun$apply$11.class
com/.../driver$$anonfun$main$9$$anonfun$apply$7.class
com/.../driver$$anonfun$main$9$$anonfun$apply$8.class
com/.../driver$$anonfun$main$9$$anonfun$apply$9.class
com/.../driver$$anonfun$main$9.class
com/.../driver$.class
com/.../driver.class

当我以local 模式而不是yarn 启动作业时,我没有遇到错误。是什么导致了问题以及如何纠正?

任何帮助将不胜感激,谢谢。

【问题讨论】:

    标签: scala maven apache-spark dataframe apache-spark-sql


    【解决方案1】:

    看起来您的 jar 或某些依赖项未分布在工作节点之间。在local 模式下,它可以工作,因为你有罐子。在yarn 模式下,您需要构建一个包含所有依赖项的 fat-jar,其中包括 hive 和 spark 库。

    【讨论】:

    • 我已经建立了一个胖罐子。这就是我试图在集群上运行的那个。我只对这段代码有这个问题。当我将相同的 Pom.xml 用于其他应用程序时,我没有遇到任何问题。我猜那里有一段代码导致了这个问题。
    • 哪个类不能初始化?你的 driver.class?
    • 是的。那是我的主要课程。有趣的是,它会运行一段时间并打印数据帧中的行数,然后才会出现错误。
    猜你喜欢
    • 2012-10-10
    • 2013-08-08
    • 2020-09-27
    • 2012-08-26
    • 2015-10-29
    • 2017-09-12
    • 2016-07-07
    • 2018-08-01
    相关资源
    最近更新 更多