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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2019-04-08 Spark Streaming流计算特点及代码案例