当前位置: 首页 > 知识库问答 >
问题:

Dataproc:配置火花驱动程序和执行程序 log4j 属性

胡鸿志
2023-03-14

如前所述,更改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

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

共有3个答案

步联
2023-03-14

2022年第3季度更新

数据进程中火花的默认 log4j 配置可在 /etc/火花/配置/log4j.属性中使用。它将根记录器配置为在 INFO 级别进行记录。但在运行时,驱动程序日志(在客户端模式下)将由 Dataproc 代理定向到 GCS 并流式传输回客户端,并且执行器日志(以及集群模式下的驱动程序日志)将由 YARN 重定向到容器的 YARN 日志目录中的 stderr 文件。请参阅此答案,了解如何获取数据过程的 YARN 容器日志。

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

如果要在集群级别配置Spark驱动程序和执行器日志,最简单的方法是添加--properties Spark-log4j:

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

  1. --驱动程序日志级别(仅适用于驱动程序),例如:
gcloud dataproc jobs submit spark ...\
  --driver-log-levels root=WARN,org.apache.spark=DEBUG

--files。如果驱动程序和执行程序可以共享相同的log4j配置,那么gcloud dataproc作业提交火花…--files gs://my-桶/log4j.properties将是最简单的。注意文件名应该完全是log4j.properties,这样它就可以覆盖默认的。

--文件--属性火花。驱动程序|executor].extraJavaOptions=-Dlog4j.configuration= (对于驱动程序和执行程序)。请注意,-Dlog4j.配置应设置为文件:

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

姚文轩
2023-03-14

最近,通过 --properties 标记添加了对 log4j 属性的支持。例如:您现在可以使用“--属性'hadoop-log4j:hadoop.root.logger=WARN,控制台'”。有关详细信息,请参阅此页面(https://cloud.google.com/dataproc/docs/concepts/configuring 群集/群集属性)

吕天逸
2023-03-14

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

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

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

 类似资料:
  • 我在一个单独的Docker中运行spark-master和spark-worker。 我能看见他们在跑 PS-EF grep火花根3477 3441 0 1 05?00:04:17/usr/lib/jvm/java-1.8-openjdk/jre/bin/java-cp/usr/local/spark/conf/:/usr/local/spark/jars/*-xmx1g org.apache.s

  • 我是Spark的初学者,我正在运行我的应用程序,从文本文件中读取14KB的数据,执行一些转换和操作(收集、收集AsMap),并将数据保存到数据库 我在我的macbook上本地运行它,内存为16G,有8个逻辑核。 Java最大堆设置为12G。 这是我用来运行应用程序的命令。 bin/spark-submit-class com . myapp . application-master local[*

  • 背景我试图运行一个火花提交命令,该命令来自Kafka,并在AWS EMR(版本5.23.0)中使用scala(版本2.11.12)执行JDBC接收器到postgres DB。我看到的错误是 假设问题我认为错误告诉我,在执行器上找不到JDBCPostgres驱动程序,这就是为什么它不能下沉到postgres。 以前的尝试我已经做了以下事情: 在我的结构化流作业中将我的驱动程序标识为 在我的火花提交作

  • 我经常在每个分布式计算开源项目中看到以下术语,尤其是在Apache spark中,希望用一个简单的例子来解释。 spark.driver.cores - 仅在群集模式下用于驱动程序进程的核心数。 火花驱动程序内存 - 用于驱动程序进程的内存量 spark.executor.cores - 每个执行器上使用的核心数 spark.executor.memory - 每个执行程序进程要使用的内存量 火花

  • 我们正在将Spark工作负载从Cloudera迁移到Kubernetes。 出于演示目的,我们希望在集群模式下使用spark-submit在minikube集群中运行一个spark作业。 我想使用spark.file conf将一个类型安全配置文件传递给我的执行程序(我也尝试了--files)。配置文件已在生成时复制到/opt/spark/conf目录下的spark docker映像中。 然而,当

  • 我使用log4j(1.2.15)来登录我的应用程序,其中我有两个用于两个不同包(darius.log4j.sql和darius.log4j.net)的文件追加器和一个控制台追加器。其配置如下: 我现在需要的是以编程方式添加一个新的文件appender,如果出现特定的数据组合。我知道如何定义这个新的文件appender(前C),但我不知道如何设置级别和新的appender到第三个包: 其中C是第三个