2016-12-27 3 views
0

Ich frage mich, ob es irgendeinen Grund gibt, warum der Funke Job, den ich in Zepplin Absatz schrieb, viel schneller als das Ausführen von Spark-submit selbst ausgeführt wird?Apache Zepplin Funke Job läuft schneller als Spark-submit

Ich benutze grundsätzlich die gleiche Konfiguration (Executoren, Speicher) in Zepplin und spark-submit, aber es gibt so viel signifikanten Unterschied in der Ausführungszeit.

Beide laufen auf dem gleichen eigenständigen Funkencluster.

Was kann diesen Unterschied erklären?

+1

Wie lautet der Code des Jobs? –

+0

@ T.Gawęda Ich glaube nicht, dass es der Code ist, ist es wahrscheinlich, weil ich Zepplin Funke Kontext (sc) verwenden, sqlContext, die von meiner Spark Conf abweichen kann –

+1

Sind Sie für Startup/Shutdown-Zeit? Ich kann mir vorstellen, dass die Zeppelin-Instanz bereits läuft, daher gibt es keine Startzeit. Wenn Sie nicht bereits versuchen, interne Scala Timing –

Antwort

1

Es gibt zwei Dinge, an die ich denken kann, die dazu führen könnten.

  1. Wenn Sie zappelin verwenden, haben Sie bereits einen Funkenkontext, den Sie wahrscheinlich verwenden. Wenn Sie eine Funkenvorlage erstellen, erstellen Sie eine neue, die einige Zeit in Anspruch nimmt.
  2. Auch wenn Ihr Timing den Funkenkontext abwertet (z. B. Sie zählen nur die Zeit für den eigentlichen Job), in Zappelin machen Sie wahrscheinlich einige andere Jobs vor dem aktuellen. Dies kann zu verschiedenen Zwischenspeichern führen. Einige Beispiele hierfür sind:

    • Das OS/hadoop könnten Cache-Dateien, die Sie lesen, weil man sie in einer früheren Zelle lesen
    • Sie könnten einen Shuffle tun Sie vor auf einige RDD tat so wird es zwischengespeichert
    • Sie könnten einen expliziten Cache
    • haben Sie können einen Datenrahmen haben Sie partitioniert für join verwenden bereits korrekt in einer früheren Zelle
    • die Liste geht weiter ...
+0

Yea zu verwenden, dachte ich fast über all diese Möglichkeiten, aber es erklärt nicht, warum das Schreiben in db (ca. 148 Millionen Datensätze) wesentlich weniger Zeit als in Spark-submit ausgeführt wird. Gleicher Code, aber in Zepplin als verschiedene Absätze geschrieben. Ich konnte sehen, wie lange jede Aufgabe in Spark UI dauert. –

+0

Wenn Sie Ihre Profilerstellung durchführen, können Sie sicherstellen, dass Sie jedes externe Element außerhalb der Profilerstellung laden. Zum Beispiel in Ihrem Programm Aufruf spark.range (100) .show(), die den Funke-Kontext laden würde, dann wickeln Sie einen Timer um den Job selbst. In Zepplin auf der anderen Seite, stellen Sie sicher, nur die relevante Zelle und nichts anderes zu führen und dann zu vergleichen. Angesichts dessen sollten Sie die gleiche Leistung sehen. Ich nehme natürlich an, dass Sie für beide Tests die gleiche Konfiguration verwenden. –