Pyspark采用纱线集群模式

jeg*_*don 8 hadoop-yarn apache-spark pyspark

有没有办法在不使用spark-submit脚本的情况下使用yarn-cluster模式运行pyspark脚本?我需要这样,因为我会将此代码集成到django Web应用程序中.

当我尝试在纱线群集模式下运行任何脚本时,我收到以下错误:

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.
Run Code Online (Sandbox Code Playgroud)

我正在以下列方式创建sparkContext:

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

        sc = SparkContext(conf = conf)

        #Dataframe code ....
Run Code Online (Sandbox Code Playgroud)

谢谢

Den*_*Huo 22

yarn-cluster不支持原因模式是yarn-cluster指将驱动程序本身(例如使用SparkContext调用的程序)引导到YARN容器上.从您关于从django Web应用程序提交的声明中猜测,听起来您希望将包含SparkContext的python代码嵌入到Web应用程序本身中,而不是将驱动程序代码发送到YARN容器,然后该容器处理单独的spark作业.

这意味着你的情况最接近yarn-client模式而不是yarn-cluster; 在yarn-client模式下,您可以在任何地方运行SparkContext代码(例如在您的Web应用程序内部),同时与YARN讨论运行作业的实际机制.

从根本上说,如果您在Web应用程序和Spark代码之间共享任何内存状态,这意味着您将无法切断Spark部分以在YARN容器内运行,这是yarn-cluster尝试做的事情.如果你没有共享状态,那么你可以简单地调用一个实际调用spark-submit捆绑独立PySpark作业的子进程来运行yarn-cluster模式.

总结一下:

  1. 如果要将Spark代码直接嵌入Web应用程序中,则需要使用yarn-client模式:SparkConf().setMaster("yarn-client")
  2. 如果火花代码是松散耦合的,以至于yarn-cluster实际上是可行的,可以发出一个Python 实际调用spark-submityarn-cluster模式.