Как решить java .lang.ClassNotFoundException в приложении Spark - PullRequest
0 голосов
/ 31 марта 2020

Я запускаю свое искровое приложение в кластере на Amazon EMR с помощью команды:

spark-submit --class Main --master local[*] SparkProject.jar s3://ltsdata/1394-fin1.aut 32

Но я получаю следующую ошибку:

20/03/31 10:10:20 WARN SparkSubmit$$anon$2: Failed to load Main.
java.lang.ClassNotFoundException: Main
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:419)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:352)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at org.apache.spark.util.Utils$.classForName(Utils.scala:238)
    at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:814)
    at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:161)
    at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:184)
    at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:86)
    at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:928)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:937)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

Вот код Главный объект:

import java.io.File

import org.apache.commons.io.FileUtils
import org.apache.spark.HashPartitioner
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.SparkSession
import org.apache.spark.storage.StorageLevel

import scala.collection.mutable.ArrayBuffer

object Main {
//N.B. aumenta il livello di parallelismo per migliorare prestazioni gc time
  def setupLogging(spark: SparkSession): Unit =
    spark.sparkContext.setLogLevel("WARN")

  def main(args: Array[String]): Unit = {

    val spark = SparkSession
      .builder
      .appName("bi-simulation")
      .config("spark.hadoop.validateOutputSpecs", "false")
      .config("spark.sql.warehouse.dir", "target/test/spark/warehouse")
      .config("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
      .config("spark.kryo.referenceTracking", "false")
      .getOrCreate()

    setupLogging(spark)

    val sc = spark.sparkContext

    sc.getConf.registerKryoClasses(Array(
      classOf[RDD[(Long, Long, Long)]],
      classOf[RDD[(Long, (Long, Long))]],
      classOf[RDD[(Long, String)]],
      classOf[RDD[(Long, ArrayBuffer[(Long, Long)])]]
    ))

    sc.setCheckpointDir("target/test/spark/checkpoint")

    val path = "target/test/LtsBuilderAppTest"

    FileUtils.deleteDirectory(new File("target/test"))

    val input = sc.textFile(args(0))

    LtsBuilder.parseLts(spark, path, input)

    val res = Bisimulation.run(spark, path, args(1).toInt)
    println("End")
    sc.stop()
  }
}

Дайте мне знать, если вам нужен весь проект ... Я работаю с Intellij IDEA и sbt. Чтобы создать файл jar, я пошел в File-> Project Project-> Artifacts, затем я нажал + button-> JAR-> From модуль с зависимостями ... и, наконец, я установил Main Class: Main.

...