Я запускаю свое искровое приложение в кластере на 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.