Ich habe ein Fettglas, in Scala geschrieben, verpackt von sbt. Ich muss es in einem Spark-Cluster in AWS EMR verwenden.AWS EMR Spark Cluster - Schritte mit Scala Fett JAR, nicht finden MainClass
Es funktioniert gut, wenn ich das Glas an den Master manuell die Cluster-spin up, kopieren und eine Funken einreichen Job mit einem Befehl wie folgt ausführen ...
spark-submit --class org.company.platform.package.SparkSubmit --name platform ./platform-assembly-0.1.0.jar arg0 arg1 arg2
Aber ... wenn ich versuche, Um es dem EMR-Cluster als Schritt hinzuzufügen, schlägt es fehl. Das Protokoll stderr sieht wie folgt aus ...
Exception in thread "main" java.lang.ClassNotFoundException: package.SparkSubmit
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:278)
at org.apache.hadoop.util.RunJar.run(RunJar.java:214)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
Die entsprechenden Einstellungen in meinem build.sbt so aussehen ...
lazy val root = (project in file(".")).
settings(
name := "platform",
version := "0.1.0",
scalaVersion := "2.10.5",
organization := "org.company",
mainClass in Compile := Some("package/SparkSubmit")
)
Die entsprechende Datei mit meinem Mainclass aussieht ...
package org.company.platform.package
object SparkSubmit {
def main(args: Array[String]): Unit = {
// do stuff
}
}
in EMR-Konsole ... im Dialog "Schritt hinzufügen" ... neben der "Argument" -Box, heißt es ...
"Diese werden an die Hauptfunktion im JAR übergeben. Wenn die JAR keine Hauptklasse in seiner Manifest-Datei nicht angeben, können Sie angeben einen neuen Klassennamen als erstes Argument.“
würde ich denken, weil ich eine Hauptklasse in der build.sbt angeben, I "Es geht mir gut ... aber es schlägt fehl und protokolliert nichts über den Fehler. Wenn ich versuche, die Hauptklasse als erstes Argument anzugeben, protokolliert es den oben angegebenen Fehler.
Ich denke, es ist wahrscheinlich ein Formatieren Problem, aber ich kann nicht sortieren, wie es zu beheben, und keine Beispiele kommen.Ich habe versucht, die folgenden als Argumente in der "Add Step" -Dialogfeld ...
arg0 arg1 arg2
package.SparkSubmit arg0 arg1 arg2
package/SparkSubmit arg0 arg1 arg2
org.company.platform.package.SparkSubmit arg0 arg1 arg2
Ein paar andere auch, aber nichts funktioniert.
Version Info ... EMR 4.3 Spark-1.6 Scala 2.10 sbt 0.13.9
Irgendwelche Ideen, was dumme Fehler, den ich, dass mache ist nicht im Stich gelassen EMR/Funken meine Hauptklasse finden?
Danke.