spark-submite 中的 Spark 部署相关属性

jas*_*han 5 java apache-spark

创建基于 Spark 的 Java 应用程序时,SparkConf 是使用创建的

sparkConf = new SparkConf().setAppName("SparkTests")
                           .setMaster("local[*]").set("spark.executor.memory", "2g")
                           .set("spark.driver.memory", "2g")
                           .set("spark.driver.maxResultSize", "2g");
Run Code Online (Sandbox Code Playgroud)

但是在这里的文档中,它说

任何指定为标志或属性文件中的值都将传递给应用程序并与通过 SparkConf 指定的值合并。直接在 SparkConf 上设置的属性具有最高优先级,然后标志传递给 spark-submit 或 spark-shell,然后是 spark-defaults.conf 文件中的选项。自早期版本的 Spark 以来,一些配置键已被重命名;在这种情况下,旧的密钥名称仍然被接受,但比新密钥的任何实例的优先级都低。Spark属性主要可以分为两种:一种是和deploy相关的,比如“spark.driver.memory”、“spark.executor.instances”,这类属性在运行时通过SparkConf编程设置时可能不受影响,或者行为取决于您选择的集群管理器和部署模式,所以建议通过配置文件或spark-submit命令行选项进行设置;另一个主要是关于Spark运行时的控制,比如“spark.task.maxFailures”,这种属性可以任意设置。

那么是否有这些部署相关属性的列表,我只能在 spark-submit 中将其作为命令行参数给出?

local[*]在此处给出,但在运行时我们通过纱线集群进行部署。

abi*_*sis 1

我也不知道这句话是什么:

\n\n

在运行时通过 SparkConf 以编程方式设置时,此类属性可能不会受到影响,或者行为取决于您选择的集群管理器和部署模式,因此建议通过配置文件或 Spark-submit 命令行选项进行设置;另外一个主要是和Spark相关的

\n\n

确切的意思是。也许有人可以为我们说清楚。尽管我知道在 YARN 的情况下,优先级如下:

\n\n
    \n
  1. 如果您使用代码设置设置

    \n\n
    SparkSession.builder()\n.config(sparkConf)\n.getOrCreate() \n
    Run Code Online (Sandbox Code Playgroud)\n\n

    这将覆盖所有其他设置(命令行、defaults.conf)。这里唯一的例外是在初始化会话后(调用\nsession.getOrCreate 之后)修改设置。在这种情况下,它将被忽略,正如你可以想象的那样

  2. \n
  3. 如果您不修改代码中的设置,它将回退到命令行设置(spark 将考虑命令行中指定的设置,否则将从 defaults.conf 加载它们)

  4. \n
  5. 最后,如果以上均未给出,它将从defaults.conf 加载设置

  6. \n
\n\n

因此,我最后的建议是随意从代码中设置\xe2\x80\x9cspark.driver.memory\xe2\x80\x9d、\xe2\x80\x9cspark.executor.instances\xe2\x80\x9d 等设置。

\n