创建基于 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[*]在此处给出,但在运行时我们通过纱线集群进行部署。
我也不知道这句话是什么:
\n\n在运行时通过 SparkConf 以编程方式设置时,此类属性可能不会受到影响,或者行为取决于您选择的集群管理器和部署模式,因此建议通过配置文件或 Spark-submit 命令行选项进行设置;另外一个主要是和Spark相关的
\n\n确切的意思是。也许有人可以为我们说清楚。尽管我知道在 YARN 的情况下,优先级如下:
\n\n如果您使用代码设置设置
\n\nSparkSession.builder()\n.config(sparkConf)\n.getOrCreate() \nRun Code Online (Sandbox Code Playgroud)\n\n这将覆盖所有其他设置(命令行、defaults.conf)。这里唯一的例外是在初始化会话后(调用\nsession.getOrCreate 之后)修改设置。在这种情况下,它将被忽略,正如你可以想象的那样
如果您不修改代码中的设置,它将回退到命令行设置(spark 将考虑命令行中指定的设置,否则将从 defaults.conf 加载它们)
最后,如果以上均未给出,它将从defaults.conf 加载设置
因此,我最后的建议是随意从代码中设置\xe2\x80\x9cspark.driver.memory\xe2\x80\x9d、\xe2\x80\x9cspark.executor.instances\xe2\x80\x9d 等设置。
\n| 归档时间: |
|
| 查看次数: |
204 次 |
| 最近记录: |