所有方法收集并举例说明
介绍
实际上,有很多方法可以做到这一点。
有些人比较难,但哪一种最适合你取决于你自己。我会尽力把它们都展示出来。
#1在你的应用程序中
这似乎是最简单的,但你需要重新编译你的应用程序来改变这些设置。就个人而言,我不喜欢它,但它工作得很好。
例子:
import org.apache.log4j.{Level, Logger}
val rootLogger = Logger.getRootLogger()
rootLogger.setLevel(Level.ERROR)
Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
Logger.getLogger("org.spark-project").setLevel(Level.WARN)
仅使用log4j API就可以实现更多功能。
来源:[Log4J配置文档,配置部分]
#2传递log4j。火花提交期间的属性
这个问题很棘手,但并非不可能。也是我的最爱。
Log4J在应用程序启动期间总是寻找和加载Log4J。来自类路径的属性文件。
然而,当使用Spark -submit Spark Cluster的类路径优先于应用程序的类路径!这就是为什么把这个文件放在你的fat-jar不会覆盖集群的设置!
添加-Dlog4j。Configuration =<配置文件>到
spark.driver.extraJavaOptions(用于驱动程序)或
spark.executor.extraJavaOptions(用于执行程序)。
注意,如果使用a
文件,文件:协议应该显式提供,和文件
需要在所有节点上本地存在。
为了满足最后一个条件,您可以将文件上传到节点可用的位置(如hdfs),或者如果使用部署模式客户端,则可以使用驱动程序本地访问它。否则:
上传一个自定义的log4j。属性使用spark-submit,将其添加到
要与应用程序一起上传的文件的——files列表。
来源:Spark docs, Debugging
步骤:
log4j . properties的例子:
# Blacklist all to warn level
log4j.rootCategory=WARN, 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
# Whitelist our app to info :)
log4j.logger.com.github.atais=INFO
执行spark-submit,用于集群模式:
spark-submit \
--master yarn \
--deploy-mode cluster \
--conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=file:log4j.properties" \
--conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:log4j.properties" \
--files "/absolute/path/to/your/log4j.properties" \
--class com.github.atais.Main \
"SparkApp.jar"
注意,如果使用客户端模式,必须使用——driver-java-options。Spark docs, Runtime env
执行spark-submit,用于客户端模式:
spark-submit \
--master yarn \
--deploy-mode client \
--driver-java-options "-Dlog4j.configuration=file:/absolute/path/to/your/log4j.properties" \
--conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:log4j.properties" \
--files "/absolute/path/to/your/log4j.properties" \
--class com.github.atais.Main \
"SparkApp.jar"
注:
使用——Files上传到spark-cluster的文件将在根目录下可用,因此不需要在file:log4j.properties中添加任何路径。
——Files中列出的文件必须提供绝对路径!
配置URI中的前缀是必须的。
#3编辑集群的conf/log4j.properties
这将更改全局日志配置文件。
更新$SPARK_CONF_DIR/log4j. xml文件。属性文件,它将是
与其他配置一起自动上传。
来源:Spark docs, Debugging
要找到你的SPARK_CONF_DIR,你可以使用spark-shell:
atais@cluster:~$ spark-shell
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.1.1
/_/
scala> System.getenv("SPARK_CONF_DIR")
res0: String = /var/lib/spark/latest/conf
现在只需编辑/var/lib/spark/latest/conf/log4j.属性(从方法#2的例子)和所有的应用程序将共享这个配置。
#4覆盖配置目录
如果你喜欢解决方案#3,但想要自定义每个应用程序,你可以复制conf文件夹,编辑它的内容,并在spark-submit期间指定为根配置。
如果需要指定默认的“SPARK_HOME/conf”以外的配置目录,可以设置“SPARK_CONF_DIR”。Spark将使用配置文件(Spark -defaults.conf, Spark -env.sh, log4j. conf)。属性等)。
来源:Spark docs, Configuration
步骤:
复制集群的conf文件夹(更多信息,方法#3)
编辑log4j。该文件夹中的属性(方法#2中的示例)
在执行spark-submit之前,将SPARK_CONF_DIR设置为该文件夹,
例子:
出口SPARK_CONF_DIR = /绝对路径/定制/ conf /
spark-submit \
——主纱\
——部署模式集群\
——class com.github.atais.Main \
“SparkApp.jar”
结论
我不确定是否有其他方法,但我希望这涵盖了从A到z的主题,如果没有,请在评论中联系我!
享受你的人生!