dataproc 上调整 Spark 日志级别的最优雅、最可靠的方法是什么?

What is the most elegant and robust way on dataproc to adjust log levels for Spark?

如之前的答案所述,更改 Spark 集群冗长程度的理想方法是更改​​ corresponding log4j.properties。但是,在 Yarn 上的 dataproc Spark 运行s 上,因此我们必须调整全局配置而不是 /usr/lib/spark/conf

几点建议:

在 dataproc 上,我们有几个可以在集群创建期间传递的 gcloud 命令和属性。 See documentation 是否可以通过指定

来更改 /etc/hadoop/conf 下的 log4j.properties
--properties 'log4j:hadoop.root.logger=WARN,console'

也许不是,正如文档所述:

The --properties command cannot modify configuration files not shown above.

另一种方法是在集群初始化期间使用 shell 脚本和 运行 sed:

# change log level for each node to WARN
sudo sed -i -- 's/log4j.rootCategory=INFO, console/log4j.rootCategory=WARN, console/g'\
                     /etc/spark/conf/log4j.properties
sudo sed -i -- 's/hadoop.root.logger=INFO,console/hadoop.root.logger=WARN,console/g'\
                    /etc/hadoop/conf/log4j.properties

但这足够了还是我们还需要更改环境变量hadoop.root.logger?

目前,您说得对,--properties 不支持额外的 log4j 设置,但这肯定是我们讨论过要添加的内容;一些考虑因素包括与保持 minimal/simple 设置相比,如何平衡对 Spark、Yarn 与其他 long-运行 守护进程的日志配置(hiveserver2、HDFS 守护进程等)进行细粒度控制的能力它以共享的方式连接到所有内容。

至少对于 Spark driver 日志,您可以使用 --driver-log-levels 设置作业提交时间,该时间应优先于任何 /etc/*/conf设置,但正如您所描述的那样,init 操作是目前在集群启动时编辑文件的合理方式,请记住它们可能会随着时间和版本而改变。

最近,通过 --properties 标签添加了对 log4j 属性的支持。例如:您现在可以使用“--properties 'hadoop-log4j:hadoop.root.logger=WARN,console'”。查看此页面(https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/cluster-properties)了解更多详情