Ich habe einen eigenständigen Single-Node-Spark-Cluster erstellt und bestätigt, dass mein Build mit ./bin/run-example SparkPi 10
funktioniert. Dann habe ich ein wirklich einfaches Testprojekt in scala geschrieben;Wie senden Sie einen Job von Code an Spark?
import org.apache.spark.{SparkConf, SparkContext}
object Main {
def main(args: Array[String]): Unit = {
val sparkConf = new SparkConf()
val sc = new SparkContext("spark://UbuntuVM:7077", "Simple Application")
val count = sc.parallelize(1 to 100).map{i =>
val x = Math.random()
val y = Math.random()
if (x*x + y*y < 1) 1 else 0
}.reduce(_ + _)
println("Pi is roughly " + 4.0 * count/100)
}
}
Ich laufe dies aus meinem IDE (IntelliJ). Es verbindet sich erfolgreich mit dem Cluster, und ich sehe, dass es Jobs übermittelt, aber alle werfen einen Fehler auf;
INFO TaskSetManager: Lost task 1.3 in stage 0.0 (TID 7) on executor 192.168.1.233: java.lang.ClassNotFoundException (Main$$anonfun$1) [duplicate 7]
Wenn ich Funke richtig verstehe, ist dies, weil der Cluster den Code nicht finden kann. Wie füttere ich den Code, um zu funken? Ich führe HDFS oder irgendetwas in diesem Test nicht durch, aber es ist alles auf einem Kasten, also hätte ich SparkContext erwartet, um das gegenwärtige Verzeichnis zu übergeben, aber es tut anscheinend nicht.
Kann mir jemand auf den richtigen Weg zeigen, dies einzurichten?
Mögliches Duplikat [Wie es einfacher zu machen, meine Jar zu implementieren Cluster Spark im Standalone-Modus?] (Http://stackoverflow.com/questions/24052899/how-to-make -it-einfacher-zu-bereitstellen-mein-jar-to-spark-cluster-in-standalone-mode) – Aivean
Ich habe tatsächlich versucht sc.addJar (SparkContext.jarOfClass (this.getClass) .get) - aber natürlich das scheitert, weil es keine JAR gibt. IntelliJ erstellt keine. – XeroxDucati
sbt-assembly funktioniert, um eine JAR zu erzeugen, die ich spark-submit, aber ich kann immer noch keinen Weg finden, die 'run' Funktion intelliJ zu machen Führen Sie einfach das Ding. – XeroxDucati