SparkR - 覆盖spark.conf中的默认参数

时间:2017-06-28 11:08:21

标签: apache-spark config sparkr apache-spark-2.0

我在集群上使用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的问题还是某些基础设施特定群集问题(如纱线设置)

1 个答案:

答案 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")