scala - SparkSession 不接受运行时配置

标签 scala apache-spark apache-spark-sql configuration-files

在我的应用程序中,我正在创建一个 SparkSession对象,然后尝试读取我的属性文件并在运行时设置属性。但它没有选择我在运行时传递的属性。

我正在以 YARN 集群模式提交我的应用程序

这是我在 Trait 中创建的初始 Spark session 对象

val spark = SparkSession.builder().appName("MyApp").enableHiveSupport().getOrCreate()

然后在对象内部的主函数中,我扩展了这个 Trait,所以我的 spark session 在 Trait 和我的对象(包含 main)中初始化,我正在设置:
spark.conf.set(spark.sql.hive.convertMetastoreParquet, false)
spark.conf.set(mapreduce.input.fileinputformat.input.dir.recursive,true)
spark.conf.set(spark.dynamicAllocation.enabled, true)
spark.conf.set(spark.shuffle.service.enabled, true)
spark.conf.set(spark.dynamicAllocation.minExecutors,40)

所以理想情况下,我的应用程序必须从 40 个执行程序开始,但它正在启动,然后完全使用默认的 2 个执行程序运行..

最佳答案

这里没有什么意外。只能在运行时设置 Spark SQL 属性的某些子集(以 spark.sql 为前缀)(请参阅 SparkConf 文档):

Once a SparkConf object is passed to Spark, it is cloned and can no longer be modified by the user. Spark does not support modifying the configuration at runtime.



其余选项必须在 SparkContext 之前设置被初始化。意思是初始化SparkSessionSparkContext :
val conf: SparkConf = ...   // Set options here
val sc  = SparkContext(conf)
val spark  = SparkSession(sc)

config SparkSession.Builder的方法和 SparkConf
val conf: SparkConf = ...   // Set options here
val spark = SparkSession.builder.config(conf).getOrCreate

或键值对:
val spark = SparkSession.builder.config("spark.some.key", "some_value").getOrCreate

这尤其适用于 spark.dynamicAllocation.enabled ,spark.shuffle.service.enabledspark.dynamicAllocation.minExecutors .
mapreduce.input.fileinputformat.input.dir.recursive另一方面,是 Hadoop 配置的属性,而不是 Spark,应该在那里设置:
spark.sparkContext.hadoopConfiguration.set("some.hadoop.property", "some_value")

关于scala - SparkSession 不接受运行时配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48055133/

相关文章:

python-从数据框中获取列数据类型

postgresql - Pyspark 连接到 ipython 笔记本中的 Postgres 数据库

scala - 如何在 Apache Spark 1.0 中构建大型分布式 [稀疏] 矩阵?

json - Spark 将 StructType/JSON 转换为字符串

java - 在 Java/Scala 中显示图像的简单方法是什么?

scala - Spark缓存RDD而不被要求

apache-spark - 如何在完成并关闭上下文后查看 Spark 作业的日志?

apache-spark - 使用 Spark 窗口函数获取最后一个值

scala - 错误 : could not find implicit value for parameter timeout: akka. util.Timeout

scala - 如何跳过空格但将其用作解析器组合器中的标记分隔符