2016-03-31 7 views
3

Ich versuche, einen Funken Streaming-Auftrag auf Mesos mit dem DCOS CLI zu starten. Ich kann den Job starten. Mein Programm erwartet, dass eine Konfigurationsdatei als CLI-Parameter übergeben wird. Wie erreiche ich das mit dcos spark run --submit-args?Spark Submit mesos dcos cli

Ich habe versucht - Dateien http://server/path/to//file in der Hoffnung, es wird Dateien herunterladen, aber das hat nicht funktioniert. Der Treiber startet, schlägt aber fehl, weil die Konfigurationsdatei fehlt.

Ich habe auch versucht, die JAR-und Config-Datei als tar aufzurollen und reichte es ein. Ich kann in Mesos-Protokollen sehen, dass der Teer geholt und abgebaut wurde. Sowohl die Konfigurationsdatei als auch die JAR-Datei werden im Arbeitsverzeichnis angezeigt. Der Job schlägt jedoch mit ClassNotFoundException fehl. Ich vermute, dass etwas nicht in Ordnung war, wie die Funkenabgabe gestartet wurde.

dcos spark run --submit-args="--supervise --deploy-mode cluster --class package.name.classname http://file-server:8000/Streaming.tar.gz Streaming.conf" 

Irgendwelche Hinweise zur Vorgehensweise? In welcher Protokolldatei kann ich auch den zugrundeliegenden Spark-Submit-Befehl sehen, der von DCOS verwendet wird?

Antwort

3

Hier ist das Beispiel eines Befehls Sie starten, um sollte, damit es funktioniert:

dcos spark run --submit-args='--conf spark.mesos.uris=https://s3-us-west-2.amazonaws.com/andrey-so-36323287/pi.conf --class JavaSparkPiConf https://s3-us-west-2.amazonaws.com/andrey-so-36323287/sparkPi_without_config_file.jar /mnt/mesos/sandbox/pi.conf'

Wo

--conf spark.mesos.uris=... Eine durch Kommas getrennte Liste von URIs, die in die Sandbox heruntergeladen werden, wenn der Treiber oder Executor von Mesos gestartet wird. Dies gilt sowohl für den grobkörnigen als auch den feinkörnigen Modus.

/mnt/mesos/sandbox/pi.conf Ein Pfad zu der heruntergeladenen Datei, die Ihre Hauptklasse als 0. Parameter erhält (siehe Code-Schnipsel unten). /mnt/mesos/sandbox/ ist ein Standardpfad innerhalb eines Containers, der einer entsprechenden Mesos-Task-Sandbox zugeordnet ist.

public final class JavaSparkPiConf { 

    public static void main(String[] args) throws Exception { 
    SparkConf sparkConf = new SparkConf().setAppName("JavaSparkPi"); 
    JavaSparkContext jsc = new JavaSparkContext(sparkConf); 

    Scanner scanner = new Scanner(new FileInputStream(args[0])); 
    int slices; 
    if (scanner.hasNextInt()) { 
     slices = scanner.nextInt(); 
    } else { 
     slices = 2; 
    } 
    int n = 100000 * slices; 
    List<Integer> l = new ArrayList<>(n); 
    for (int i = 0; i < n; i++) { 
     l.add(i); 
    } 

    JavaRDD<Integer> dataSet = jsc.parallelize(l, slices); 

    int count = dataSet.map(new Function<Integer, Integer>() { 
     @Override 
     public Integer call(Integer integer) { 
     double x = Math.random() * 2 - 1; 
     double y = Math.random() * 2 - 1; 
     return (x * x + y * y < 1) ? 1 : 0; 
     } 
    }).reduce(new Function2<Integer, Integer, Integer>() { 
     @Override 
     public Integer call(Integer integer, Integer integer2) { 
     return integer + integer2; 
     } 
    }); 

    System.out.println("Pi is roughly " + 4.0 * count/n); 

    jsc.stop(); 
    } 
} 
+0

Das war es. Das fehlende Teil war, nach heruntergeladenen Dateien in/mnt/mesos/sandbox zu suchen. – Cheeko

2

Streaming.conf ist nur eine Zeichenfolge, die an Ihren Treiber übergeben wird. Ihr Fahrer muss es sehen können. Der einfachste Weg, dies zu tun ist, es an einem zugänglichen Ort zu platzieren, der angibt, dass es in die Sandbox über spark.mesos.uris [1] heruntergeladen werden soll. Sie könnten Ihre Anwendung alternativ schreiben, um das Lesen von einem Remotestandort zu unterstützen, und einfach den Speicherort auf der CLI übergeben.

--files wird verwendet, um Dateien auf den Executoren zu platzieren, aber Sie versuchen, eine Datei an den Treiber zu übergeben, so dass es nicht funktioniert.

[1] http://spark.apache.org/docs/latest/running-on-mesos.html

Michael Gummelt
Mesosphere

+0

Ich weiß Parameter Strings sind vergangen :) Treiber programmieren bereits liest die Datei. Ich versuche es verfügbar zu machen. Ich werde deinen Vorschlag versuchen. Ab wann werden die im URI angegebenen Links heruntergeladen? Ich lese die Conf-Datei, bevor ich den Funke-Kontext starte. – Cheeko

+0

noch eine, wenn ich extra Dateien (- Dateien) oder Jars (- Jars) in Executoren platzieren muss, wie erreiche ich das? – Cheeko

+0

spark.mesos.uris lädt die Datei herunter. Ich kann das in mesos fetcher logs sehen. Aber es ist nicht im aktuellen Verzeichnis oder Klassenpfad. Ich kann die Datei in meinem Code nicht sehen. Ich habe direkt von einem freigegebenen Ort aus gelesen, aber es ist gut zu wissen, wie man Ressourcen verwaltet und teilt. – Cheeko

Verwandte Themen