设置火花配置

时间:2019-03-08 06:26:01

标签: python-3.x apache-spark pyspark apache-spark-sql

我正在尝试在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后如何更改它?我正在尝试减少我的工作的运行时间,为此我要进行多次迭代,以更改火花配置并记录运行时间。

2 个答案:

答案 0 :(得分:1)

您可以通过以下方式设置环境变量:(例如,在spark-env.sh中,只能是独立的)

SPARK_EXECUTOR_MEMORY=16g

您还可以设置spark-defaults.conf

spark.executor.memory=16g

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

最好的方法是使用spark-submit

spark-submit --executor-memory 16G 

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

编辑:

  

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

  

一旦将SparkConf对象传递给Spark,它将被克隆,并且用户无法再对其进行修改。 Spark不支持在运行时修改配置。

请参阅:SparkConf Documentation

您是否尝试过在创建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)

您可以使用以下命令调试配置:sc.getConf.toDebugString

请参阅:Spark Configuration

  

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

您需要确保未以较高的优先级定义变量。

优先顺序:

  • conf / spark-defaults.conf
  • -conf或-c-spark-submit所使用的命令行选项
  • SparkConf

我希望这会有所帮助。

答案 1 :(得分:1)

在Pyspark中,

假设我想在代码中增加驱动程序的内存和执行程序。我可以做到如下:

conf = spark.sparkContext._conf.setAll([('spark.executor.memory', '23g'), ('spark.driver.memory','9.7g')])

要查看更新的设置,请执行以下操作:

spark.sparkContext._conf.getAll()

Settings