用于spark-submit的java.lang.NoClassDefFoundError

时间:2016-05-23 09:24:00

标签: java scala maven apache-spark

我使用maven为我的apache spark scala项目构建了* .jar文件。当我尝试执行主类时,在代码的某一行,它为类Exception in thread "main" java.lang.NoClassDefFoundError提供了错误org.apache.spark.ml.recommendation.ALS

我按照以下方式运行spark-submit:

sudo -u hdfs /usr/bin/spark-submit --class 
org.apache.spark.examples.ml.MyTest spark-examples-*.jar --rank 10 --path 
/home/ubuntu/data

看起来它只找不到org.apache.spark.ml.recommendation.ALS。我在类中有以下import语句:

package org.apache.spark.examples.ml

import java.util.Date
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.examples.mllib.AbstractParams
import org.apache.spark.ml.recommendation.ALS
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{Row, SQLContext}
import scopt.OptionParser

如何解决这个问题?

更新1:

我将maven-assebly插件添加到pom.xml以及assembly.xml添加到文件夹resources中。然后我成功地制作了mvn package,但又遇到了同样的问题。

更新2:

jar -tvf spark-examples-1.5.3-SNAPSHOT-hadoop2.2.0.jar | grep "ALS"

  2678 Mon May 23 13:11:44 CEST 2016 org/apache/spark/examples/ml/recommendation/MyFunc$ALSParams.class

1 个答案:

答案 0 :(得分:0)

首先找出失败的原因。
1)班级失踪了吗?
2)或者是初始化问题。

要通过这种方式查明类是否可用运行命令jar -tvf <.jar> | grep "class name",您可以查看是否存在类文件或其初始化问题。