2015-07-09 12 views
7

Gibt es eine Möglichkeit, Pyspark-Skripts mit Garn-Cluster-Modus ohne Verwendung der Spark-Submit-Skript ausführen? Ich brauche es auf diese Weise, weil ich diesen Code in eine Django Web App integrieren werde.Pyspark auf Garn-Cluster-Modus

Wenn ich versuche, jedes Skript in Garn-Cluster-Modus laufen zu lassen ich die folgende Fehlermeldung anzeigt:

org.apache.spark.SparkException: Detected yarn-cluster mode, but isn't running on a cluster. Deployment to YARN is not supported directly by SparkContext. Please use spark-submit. 

ich die sparkContext auf folgende Weise erstellen:

 conf = (SparkConf() 
      .setMaster("yarn-cluster") 
      .setAppName("DataFrameTest")) 

     sc = SparkContext(conf = conf) 

     #Dataframe code .... 

Dank

Antwort

20

Der Grund yarn-cluster Modus wird nicht unterstützt, ist, dass yarn-cluster Bootstrapping das Treiberprogramm selbst bedeutet (z. B. das Programm Aufruf mit einem SparkContext) o in einen YARN-Container. Ausgehend von Ihrer Aussage über das Senden von einer Django-Webanwendung klingt es so, als wolle man den Python-Code, der den SparkContext enthält, in die Web-App selbst einbetten, anstatt den Treibercode an einen YARN-Container zu senden, der dann einen separaten Spark-Job handhabt .

Dies bedeutet, dass Ihr Fall am ehesten mit yarn-client Modus statt yarn-cluster entspricht; Im Modus yarn-client können Sie Ihren SparkContext-Code überall ausführen (wie in Ihrer Web-App), während er mit YARN über die tatsächlichen Mechanismen laufender Jobs spricht.

Wenn Sie einen In-Memory-Status zwischen Ihrer Web-App und Ihrem Spark-Code teilen, bedeutet das, dass Sie den Spark-Teil in einem YARN-Container nicht abtrennen können, was yarn-cluster ist versucht zu tun. Wenn Sie keinen Status freigeben, können Sie einfach einen Subprozess aufrufen, der tatsächlich spark-submit aufruft, um einen unabhängigen PySpark-Job für die Ausführung im yarn-cluster-Modus zu bündeln.

Fassen wir zusammen:. SparkConf() setMaster ("Garn-client")

  • :

    1. Wenn Sie Ihren Spark-Code in Ihre Web-App direkt einbetten möchten, können Sie yarn-client Modus stattdessen verwenden müssen Wenn der Spark-Code locker genug gekoppelt ist, so dass yarn-cluster tatsächlich realisierbar ist, können Sie ein Python subprocess ausgeben, um tatsächlich spark-submit im yarn-cluster-Modus aufzurufen.