我在集群上使用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,但同时我结束了使用100%资源的x-core执行器的数量(在这个例子中,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时,执行程序的总数是不正确的(tab" Executors"),但同时所有的配置参数在标签"环境"与R脚本中提供的内容完全相同。
任何人都知道可能是什么原因?是R API的问题还是某些基础设施特定群集问题(如纱线设置)
答案 0 :(得分:2)
我发现你必须使用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
args,例如
Sys.setenv("SPARKR_SUBMIT_ARGS"="--master yarn --driver-memory 10g sparkr-shell")