0

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

有没有办法让我在执行时sbin/start-master.sh可以从外部传递 conf 文件?

4

2 回答 2

4

与自定义Spark 属性文件--properties-file的路径一起使用。它默认为.$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 备用配置目录。默认为 ${SPARK_HOME}/conf。

因此,使用SPARK_CONF_DIR并保存自定义配置conf

我刚刚注意到spark-daemon.sh脚本接受--config <conf-dir>,所以看起来你可以使用--confignot SPARK_CONF_DIRenv var。

于 2017-04-15T20:50:43.197 回答
1

我不太清楚您是要配置 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 \ 
于 2017-04-15T20:32:55.670 回答