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 中的默认参数的主要内容,如果未能解决你的问题,请参考以下文章

sparkr 2.0 read.df 抛出路径不存在错误

如何使用 EMR 中的引导操作在 spark-conf 中添加 spark.executor.extraClassPath

SPARKR,对RDD操作的介绍

在 SparkR 中应用带有正则表达式模式的 withColumn 函数:重新格式化 DataFrame 中的字符串列

在 SparkR 中将字符串转换为日期时间?

我应该在 spark-defaults.conf 添加哪些行才能使用 pyspark 中的 phoenix?