Spark配置管理

一.简介

  Spark对程序提供了非常灵活的配置方式,可以使用环境变量、配置文件、命令行参数,还可以直接在Spark程序中指定,不同的配置方式有不同的优先级,可以相互覆盖。而且这些配置的属性在Web界面中可以直接看到,非常方便我们管理配置。

二.Spark程序配置加载过程

  Spark程序一般都是由脚本bin/spark-submit来提交的,交互式编程bin/spark-shell其实也是通过它来提交的。通过这种方式启动的Spark程序的加载配置过程如下:

  1.设置SPARK_HOME的值为bin/spark-submit脚本所在目录的上一级目录。

  2.计算配置文件目录,从环境变量SPARK_CONF_DIR中读取。如果没有设置,则取默认值${SPARK_HOME}/conf。

  3.执行配置文件目录下的shell脚本配置文件spark-env.sh,设置基本的环境变量。

  4.加载配置文件目录下的默认配置文件spark-defaults.conf。

  5.读取命令行参数,覆盖前面的默认配置。

  6.使用SparkConf对象中的选项,覆盖前面的配置。

三.环境变量配置

  少量基础的Spark程序配置可以通过环境变量的方式来指定,比如配置文件目录是通过环境变量SPARK_CONF_DIR来指定的,其默认值是${SPARK_HOME}/conf。我们可以在提交Spark程序之前通过指定SPARK_CONF_DIR值的方式来使用其他目录作为配置文件的目录。

  环境变量可以在提交程序之前通过export的方式设置,也可以在配置文件目录下的spark-env.sh文件中指定,其中spark-env.sh本身也是一个脚本。常用的配置项如下所示:

  1.SPARK_LOCAL_IP:绑定的IP地址。

  2.SPARK_PUBLIC_DNS:Driver程序使用的DNS服务器。

  3.SPARK_CLASSPATH:额外追加的classpath。

四.Spark属性项配置

  Spark属性项的配置可以在3个地方进行,优先级从低到高依次为:

  1.spark-defaults.conf

  2.命令行参数

  3.SparkConf对象

  spark-defaults.conf的初始值可以从spark-defaults.conf.template复制而来,如下:

  

  提交程序时,也可以通过命令行的方式指定参数,且优先级大于配置文件,如下:

  ./bin/spark-submit --name "SparkPi" --master yarn --conf "spark.shuffle.spill=false -XX:+PrintGCTimeStamps" myApp.jar

  在Spark 程序中也可以指定配置项,而且优先级最高,不过灵活性不如前面的两种方式,每次改动配置都需要更新代码并编译。Spark程序中通过SparkConf【Spark1.x】对象来设置配置项。如下:

  val conf = new SparkConf().setMaster("local[2]").setAppName("SparkPi").set("spark.executor.memory", "1g")

  val sc = new SparkContext(conf)

  

五.配置Spark日志

  日志配置是另一项单独的配置,它使用配置文件目录下的log4j.properties作为配置文件。

# Set everything to be logged to the console
log4j.rootCategory=INFO, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n

# Set the default spark-shell log level to WARN. When running the spark-shell, the
# log level for this class is used to overwrite the root logger's log level, so that
# the user can have different defaults for the shell and regular Spark apps.
log4j.logger.org.apache.spark.repl.Main=WARN

# Settings to quiet third party logs that are too verbose
log4j.logger.org.spark_project.jetty=WARN
log4j.logger.org.spark_project.jetty.util.component.AbstractLifeCycle=ERROR
log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO
log4j.logger.org.apache.parquet=ERROR
log4j.logger.parquet=ERROR

# SPARK-9183: Settings to avoid annoying messages when looking up nonexistent UDFs in SparkSQL with Hive support
log4j.logger.org.apache.hadoop.hive.metastore.RetryingHMSHandler=FATAL
log4j.logger.org.apache.hadoop.hive.ql.exec.FunctionRegistry=ERROR

 

posted @ 2020-04-08 20:24  云山之巅  阅读(521)  评论(0编辑  收藏  举报