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后如何更改它?我正在尝试减少我的工作的运行时间,我正在通过多次迭代更改火花配置并记录运行时间。
您可以使用以下方法设置环境变量:(例如 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 文件中的选项。
您需要确保您的变量没有以更高的优先级定义。
优先顺序:
我希望这有帮助。
归档时间: |
|
查看次数: |
13809 次 |
最近记录: |