数据处理:配置 Spark 驱动程序和执行程序 log4j 属性



正如前面的回答所解释的,更改Spark集群详细程度的理想方法是更改相应的log4j.properties。但是,在 dataproc 上,Spark 在 Yarn 上运行,因此我们必须调整全局配置,而不是/usr/lib/spark/conf

几点建议:

在 dataproc 上,我们有几个 gcloud 命令和属性,我们可以在集群创建期间传递。请参阅文档是否可以通过指定来更改/etc/hadoop/conf 下的 log4j.properties

--properties 'log4j:hadoop.root.logger=WARN,console'

也许不是,从文档中:

-

-properties 命令无法修改未显示的配置文件 以上。

另一种方法是在集群初始化期间使用 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

但是这是否足够,或者我们还需要更改env变量hadoop.root.logger?

此答案截至 2022 年第 3 季度已过时,请查看以下答案以获取最新信息

目前,你是对的,--properties不支持额外的log4j设置,但它肯定是我们讨论过添加的东西;一些考虑因素包括如何平衡对Spark vs Yarn与其他长时间运行的守护程序的日志记录配置(hiveserver2,HDFS守护程序等(进行细粒度控制的能力与保持最小/简单的设置相比,该设置以共享方式渗透到所有内容。

至少对于 Spark 驱动程序日志,可以使用作业提交时间--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(

2022 年第 3 季度更新

默认配置

Spark

on Dataproc 的默认 log4j 配置可在 /etc/spark/conf/log4j.properties 中找到。它将根记录器配置为 INFO 级别的 stderr。但在运行时,驱动程序日志(在客户端模式下(将由 Dataproc 代理定向到 GCS 并流式传输回客户端,执行程序日志(和群集模式下的驱动程序日志(将由 YARN 重定向到容器的 YARN 日志目录中的stderr文件。有关如何获取 Dataproc 的 YARN 容器日志,请参阅此答案。

请考虑使用 /etc/spark/conf/log4j.properties 作为自定义配置的模板,并继续使用控制台作为日志的目标。

集群级别

如果要在群集级别配置 Spark 驱动程序和执行程序日志,最简单的方法是在创建群集时添加--properties spark-log4j:<key>=<value>,...。标志中的属性将追加到/etc/spark/conf/log4j.properties该将用作群集中所有 Spark 驱动程序和执行程序的默认 log4j 配置。或者,您可以编写 init 操作来更新文件。

作业级别

在提交作业时,还可以使用以下任一方式在作业级别配置 Spark 驱动程序和/或执行程序日志:

  1. --driver-log-levels(仅适用于驱动程序(,例如:
gcloud dataproc jobs submit spark ...
  --driver-log-levels root=WARN,org.apache.spark=DEBUG
  1. --files .如果驱动程序和执行器可以共享相同的 log4j 配置,那么gcloud dataproc jobs submit spark ... --files gs://my-bucket/log4j.properties将是最简单的。请注意,文件名应完全log4j.properties,以便它可以覆盖默认文件名。

  2. --files--properties spark.[driver|executor].extraJavaOptions=-Dlog4j.configuration=(适用于驱动程序和执行者(。请注意,-Dlog4j.configuration应设置为 file:<filename>,因为这些文件将存在于驱动程序/执行程序的 YARN 容器的工作目录中。

gcloud dataproc jobs submit spark ... 
  --files gs://my-bucket/driver-log4j.properties,gs://my-bucket/executor-log4j.properties 
  --properties 'spark.driver.extraJavaOptions=-Dlog4j.configuration=file:driver-log4j.properties,spark.executor.extraJavaOptions=-Dlog4j.configuration=file:executor-log4j.properties'

另请参阅 https://spark.apache.org/docs/latest/running-on-yarn.html#debugging-your-application

最新更新