Kurz gesagt :
EC2-Cluster: 1 Master 3 Slaves
Spark-Version: 1.3.1
Ich möchte die Option spark.driver.allowMultipleContexts , einen lokalen Kontext (nur Master) und einen Cluster (Master und Slaves) verwenden.
Ich bekomme diesen Stacktrace-Fehler (Zeile 29 ist, wo ich das Objekt anrufe, das den zweiten Sparkcontext initialisiert):
%Vor%Weitere Details:
Ich möchte ein Programm ausführen, das zwei Dinge tut. Zuerst habe ich einen sparkContext local (nur auf dem Master), ich mache eine RDD und mache einige Operationen. Zweitens habe ich einen zweiten sparkContext initialisieren mit einem Master und 3 Slaves, die auch eine RDD machen und einige Operationen ausführen. Also im ersten Fall möchte ich die 16 Kerne des Masters verwenden und im zweiten Fall möchte ich die 8 Kerne x 3 der Slaves verwenden.
Einfaches Beispiel:
%Vor%Meine zwei SparkContexte:
%Vor%Wie kann ich das beheben?
Obwohl die Konfigurationsoption spark.driver.allowMultipleContexts vorhanden ist, ist sie irreführend, da die Verwendung mehrerer Spark-Kontexte nicht empfohlen wird. Diese Option wird nur für interne Spark-Tests verwendet und sollte nicht in Benutzerprogrammen verwendet werden. Sie können unerwartete Ergebnisse erhalten, wenn Sie mehr als einen Spark-Kontext in einer einzelnen JVM ausführen.
Wenn zwischen zwei Programmen eine Koordination erforderlich ist, ist es besser, sie in eine einzelne Spark-Anwendung zu integrieren, um die internen Optimierungen von Spark zu nutzen und unnötige E / A zu vermeiden.
Zweitens, wenn zwei Anwendungen nicht in irgendeiner Weise koordiniert werden müssen, können Sie zwei separate Anwendungen starten. Da Sie Amazon EC2 / EMR verwenden, können Sie YARN als Ihren Ressourcenmanager ohne nennenswerten Zeitaufwand einsetzen, wie in hier .
Wenn Sie mit vielen Spark-Kontexten arbeiten müssen, können Sie die spezielle Option [MultipleContexts] (1) aktivieren, sie wird jedoch nur für interne Spark-Tests verwendet und sollte nicht in Benutzerprogrammen verwendet werden. Sie erhalten unerwartetes Verhalten, wenn Sie mehr als einen Spark-Kontext in einer einzigen JVM ausführen [SPARK-2243] (2). Es ist jedoch möglich, verschiedene Kontexte in separaten JVMs zu erstellen und Kontexte auf SparkConf-Ebene zu verwalten, die optimal zu den ausführbaren Jobs passen.
Es sieht so aus: Mist erstellt jeden neuen Sparkcontext in seiner eigenen JVM.
Es gibt eine Middleware über Spark - [Mist] . Es verwaltet Spark-Kontexte und mehrere JVMs, sodass Sie verschiedene Jobs wie ETL-Pipeline, einen schnellen Prognosejob, eine Ad-hoc-Hive-Abfrage und eine Spark-Streaming-Anwendung parallel auf demselben Cluster ausführen können.
1 & gt; github.com/apache/spark/blob/master/core/src/test/scala/org/apache/spark/SparkContextSuite.scala#L67
2 & gt; issues.apache.org/jira/browse/SPARK-2243
Tags und Links scala apache-spark