设置火花配置

Clo*_*ave 5 python-3.x apache-spark apache-spark-sql pyspark

我正在尝试在 pyspark shell 中设置一些 spark 参数的配置。

我尝试了以下

spark.conf.set("spark.executor.memory", "16g")

要检查是否已设置执行程序内存,我做了以下 spark.conf.get("spark.executor.memory")

返回"16g".

我试图通过sc使用 来检查它sc._conf.get("spark.executor.memory")

然后返回"4g"

为什么这两个返回不同的值以及设置这些配置的正确方法是什么。

另外,我正在摆弄一堆参数,例如 "spark.executor.instances" "spark.executor.cores" "spark.executor.memory" "spark.executor.memoryOverhead" "spark.driver.memory" "spark.driver.cores" "spark.driver.memoryOverhead" "spark.memory.offHeap.size" "spark.memory.fraction" "spark.task.cpus" "spark.memory.offHeap.enabled " "spark.rpc.io.serverThreads" "spark.shuffle.file.buffer"

有没有办法为所有变量设置配置。

编辑

我需要以编程方式设置配置。完成spark-submit或启动 pyspark shell后如何更改它?我正在尝试减少我的工作的运行时间,我正在通过多次迭代更改火花配置并记录运行时间。

Dan*_*ado 7

您可以使用以下方法设置环境变量:(例如 in spark-env.sh,仅独立)

SPARK_EXECUTOR_MEMORY=16g
Run Code Online (Sandbox Code Playgroud)

您还可以设置spark-defaults.conf

spark.executor.memory=16g
Run Code Online (Sandbox Code Playgroud)

但是这些解决方案是硬编码的并且几乎是静态的,并且您希望为不同的作业使用不同的参数,但是,您可能希望设置一些默认值。

最好的方法是使用spark-submit

spark-submit --executor-memory 16G 
Run Code Online (Sandbox Code Playgroud)

以编程方式定义变量的问题在于,如果不是优先规则将接管并且您在作业启动后所做的更改将被忽略,则其中一些需要在启动时定义。

编辑:

创建 SparkContext 时会查找每个执行程序的内存量。

一旦 SparkConf 对象被传递给 Spark,它就会被克隆并且不能再被用户修改。Spark 不支持在运行时修改配置。

请参阅:SparkConf 文档

您是否尝试在SparkContext创建之前更改变量,然后运行迭代,停止SparkContext并更改变量以再次迭代?

import org.apache.spark.{SparkContext, SparkConf}

val conf = new SparkConf.set("spark.executor.memory", "16g")
val sc = new SparkContext(conf)
...
sc.stop()
val conf2 = new SparkConf().set("spark.executor.memory", "24g")
val sc2 = new SparkContext(conf2)
Run Code Online (Sandbox Code Playgroud)

您可以使用以下方法调试您的配置: sc.getConf.toDebugString

请参阅:Spark 配置

任何指定为标志或属性文件中的值都将传递给应用程序并与通过 SparkConf 指定的值合并。直接在 SparkConf 上设置的属性具有最高优先级,然后标志传递给 spark-submit 或 spark-shell,然后是 spark-defaults.conf 文件中的选项。

您需要确保您的变量没有以更高的优先级定义。

优先顺序:

  • conf/spark-defaults.conf
  • --conf 或 -c - spark-submit 使用的命令行选项
  • 火花会议

我希望这有帮助。