apache-spark - yarn 群集模式下的Pyspark

标签 apache-spark yarn pyspark

有什么方法可以在不使用spark-submit脚本的情况下以yarn-cluster模式运行pyspark脚本吗?我需要这种方式,因为我会将这段代码集成到Django Web应用程序中。

当我尝试在yarn-cluster模式下运行任何脚本时,出现以下错误:

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.

我通过以下方式创建sparkContext:
        conf = (SparkConf()
            .setMaster("yarn-cluster")
            .setAppName("DataFrameTest"))

        sc = SparkContext(conf = conf)

        #Dataframe code ....

谢谢

最佳答案

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

这意味着您的案例最适合yarn-client模式而不是yarn-cluster;在yarn-client模式下,您可以在任何位置(例如,在Web应用程序内部)运行SparkContext代码,同时它与YARN对话以了解运行作业的实际机制。

从根本上讲,如果您要在Web应用程序和Spark代码之间共享任何内存中状态,则意味着您将无法切断Spark部分以在YARN容器中运行,这是yarn-cluster试图做到的。如果您不共享状态,则可以简单地调用一个子过程,该子过程实际上会调用spark-submit来捆绑一个独立的PySpark作业,以便以yarn-cluster模式运行。

总结一下:

  • 如果要直接在您的Web应用程序中嵌入Spark代码,则需要改用yarn-client模式:SparkConf()。setMaster(“yarn-client”)
  • 如果Spark代码之间的松散耦合足以使yarn-cluster实际上可行,则可以发出Python subprocess以在spark-submit模式下实际调用yarn-cluster
  • 关于apache-spark - yarn 群集模式下的Pyspark,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31327275/

    相关文章:

    java - 在独立模式下使用 spark 在 elasticsearch 中建立索引

    hadoop - 在Apache Hive上执行分析查询(例如select count(*))时出错

    mongodb - Spark MongoDB 连接器无法 df.join - Unspecialised MongoConfig

    list - 过滤 pyspark 数据框中的列表

    shell - pyspark:读取文本文件,但数据框显示错误

    scala - 在 Databricks 上使用 Scala Spark 加载 Z 压缩文件

    apache-spark - 在 Pyspark 中减去两个数组以获得一个新数组

    sql - 使用 Scala 中的数据帧在 Spark 1.30 中保存为文本

    amazon-web-services - 在具有默认配置的EMR群集模式下会发生什么?

    hadoop - 等效YARN MRv2 JobClient