SparkR - 覆盖 spark.conf 中的默认参数
Posted
技术标签:
【中文标题】SparkR - 覆盖 spark.conf 中的默认参数【英文标题】:SparkR - override default parameters in spark.conf 【发布时间】:2017-06-28 11:08:21 【问题描述】:我在集群上使用 sparkR(spark 2.0.0,yarn),配置如下:5 台机器(24 核 + 200 GB RAM)。想要使用附加参数运行 sparkR.session() 以仅将总资源的一部分分配给我的工作:
if(Sys.getenv("SPARK_HOME") == "") Sys.setenv(SPARK_HOME = "/...")
library(SparkR, lib.loc = file.path(Sys.getenv('SPARK_HOME'), "R", "lib"))
sparkR.session(master = "spark://host:7077",
appname = "SparkR",
sparkHome = Sys.getenv("SPARK_HOME"),
sparkConfig = list(spark.driver.memory = "2g"
,spark.executor.memory = "20g"
,spark.executor.cores = "4"
,spark.executor.instances = "10"),
enableHiveSupport = TRUE)
奇怪的是参数似乎被传递给 sparkContext,但同时我以 x-core 执行器的数量结束,这些执行器利用 100% 资源(在本例中 5 * 24 个核心 = 120 个可用核心; 120 / 4 = 30 个执行者)。
我尝试创建另一个未分配默认参数的 spark-defaults.conf(因此唯一的默认参数是 spark 文档中存在的那些 - 它们应该很容易被覆盖):
if(Sys.getenv("SPARK_CONF_DIR") == "") Sys.setenv(SPARK_CONF_DIR = "/...")
再次,当我查看 http://driver-node:4040 上的 Spark UI 时,执行器的总数不正确(“执行器”选项卡),但同时“环境”选项卡中的所有配置参数完全相同正如我在 R 脚本中提供的那样。
谁知道可能是什么原因?是 R API 的问题还是某些基础设施集群特定的问题(如纱线设置)
【问题讨论】:
【参考方案1】:我发现你必须使用spark.driver.extraJavaOptions
,例如
spark <- sparkR.session(master = "yarn",
sparkConfig = list(
spark.driver.memory = "2g",
spark.driver.extraJavaOptions =
paste("-Dhive.metastore.uris=",
Sys.getenv("HIVE_METASTORE_URIS"),
" -Dspark.executor.instances=",
Sys.getenv("SPARK_EXECUTORS"),
" -Dspark.executor.cores=",
Sys.getenv("SPARK_CORES"),
sep = "")
))
或者您更改 spark-submit
参数,例如
Sys.setenv("SPARKR_SUBMIT_ARGS"="--master yarn --driver-memory 10g sparkr-shell")
【讨论】:
以上是关于SparkR - 覆盖 spark.conf 中的默认参数的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 EMR 中的引导操作在 spark-conf 中添加 spark.executor.extraClassPath