如何为 Spark Standalone 的 master 指定自定义 conf 文件?

How to specify custom conf file for Spark Standalone's master?

每次启动 Spark Standalone 的 master 时,我都必须根据应用程序更改一组不同的配置 (spark-env.sh)。截至目前,每次我需要 overwrite/change 其中的任何变量时,我都会编辑 spark-env.sh

有什么方法可以在执行 sbin/start-master.sh 时从外部传递 conf 文件?

我不太清楚您是要配置 spark 程序还是只是配置以在 shell 脚本中传递正确的参数。如果它是 shell 脚本,可能这不是正确的位置,但是在 spark 上设置配置文件非常棘手,这取决于您 运行 您的 spark 程序的方式和位置。如果你是客户端模式那么你可以在本地设置配置文件并根据你的spark程序(scala,python,java)传递到你的程序但是在集群模式下,它无法访问本地文件。

如果您只是想将配置参数传递给 spark 程序,您可以尝试以下示例

spark-submit \ 
--driver-java-options "-XX:PermSize=1024M -XX:MaxPermSize=3072M" \ 
--driver-memory 3G  \ 
--class com.program.classname \ 
--master yarn \ 
--deploy-mode cluster \ 
--proxy-user hdfs \ 
--executor-memory 5G \ 
--executor-cores 3 \ 
--num-executors 6 \ 
--conf spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version=2 \ 
--conf spark.yarn.executor.memoryOverhead=2900 \
--conf spark.dynamicAllocation.enabled=true \ 
--conf spark.dynamicAllocation.initialExecutors=10 \ 
--conf spark.dynamicAllocation.maxExecutors=20 \ 
--conf spark.speculation=false \ 
--conf spark.dynamicAllocation.minExecutors=6 \ 
--conf spark.sql.shuffle.partitions=6 \ 
 
--conf spark.network.timeout=10000000 \ 
--conf spark.executor.heartbeatInterval=10000000 \ 
--conf spark.yarn.driver.memoryOverhead=4048 \ 
--conf spark.driver.cores=3 \ 
--conf spark.shuffle.memoryFraction=0.5 \ 
--conf spark.storage.memoryFraction=0.5 \ 
--conf spark.core.connection.ack.wait.timeout=300  \ 
--conf spark.shuffle.service.enabled=true \ 
--conf spark.shuffle.service.port=7337 \ 
--queue spark \ 

--properties-file 与自定义 Spark 属性 文件的路径一起使用。它默认为 $SPARK_HOME/conf/spark-defaults.conf.

$ ./sbin/start-master.sh --help
Usage: ./sbin/start-master.sh [options]

Options:
  -i HOST, --ip HOST     Hostname to listen on (deprecated, please use --host or -h)
  -h HOST, --host HOST   Hostname to listen on
  -p PORT, --port PORT   Port to listen on (default: 7077)
  --webui-port PORT      Port for web UI (default: 8080)
  --properties-file FILE Path to a custom Spark properties file.
                         Default is conf/spark-defaults.conf.

但是,如果您想设置环境变量,则必须像设置任何其他命令行应用程序一样设置它们,例如

SPARK_LOG_DIR=here-my-value ./sbin/start-master.sh

一个想法是使用 SPARK_CONF_DIR 环境变量指向具有所需配置的自定义目录。

来自 sbin/spark-daemon.sh(作为 start-master.sh 的一部分执行):

SPARK_CONF_DIR Alternate conf dir. Default is ${SPARK_HOME}/conf.

因此,使用 SPARK_CONF_DIR 并将自定义配置保存在 conf 下。

我刚刚注意到 spark-daemon.sh 脚本接受 --config <conf-dir> 所以看起来你可以使用 --config 而不是 SPARK_CONF_DIR env var.