【发布时间】:2020-05-03 10:18:59
【问题描述】:
我在 Databricks 集群上运行我的作业。对于每个作业运行,都会生成由 stdout、sterr 和 log4j 文件组成的 spark 驱动程序日志。我还在我的代码中使用了相同的 log4j 库进行日志记录,因此我的日志被打印为驱动程序 log4j 日志文件的一部分。
问题是大多数驱动程序 log4j 文件包含由 databricks 或 spark 生成的日志,搜索我的项目相关日志变得非常困难。我确实在我的日志中添加了一个前缀,以使我的搜索更容易一些,但仍然不够方便。
Log4j 文件看起来像这样 -
19/12/03 15:45:30 INFO ScalaDriverWrapper: setupRepl:ReplId-54fb1-f8f43-0a75c-a: finished to load
19/12/03 15:45:30 WARN ScalaDriverLocal: User entity information is incomplete, missing userId,user.
19/12/03 15:45:30 INFO ProgressReporter$: Added result fetcher for 6123522818505864650_7748591541637124368_job-186-run-1-action-185
19/12/03 15:45:35 INFO MY_LOGS: Entry Point Params :
19/12/03 15:45:35 INFO MY_LOGS: Methods 1 begins
19/12/03 15:45:35 INFO MY_LOGS: Applying some pre-checks
19/12/03 15:45:36 INFO DAGScheduler: Got job 0 (collect at webConfig.scala:27) with 1 output partitions
19/12/03 15:45:36 INFO DAGScheduler: Final stage: ResultStage 0 (collect at webConfig.scala:27)
19/12/03 15:45:36 INFO DAGScheduler: Parents of final stage: List()
19/12/03 15:45:35 INFO MY_LOGS: Applying some post-checks
.
.
.
.
我需要从在 Databricks 上运行的每个作业中创建的标准 log4j 文件中过滤驱动程序日志,以便我能够创建一个新文件,其中仅包含使用我的代码记录的那些日志,然后将它们写入一个新文件在一些 dbfs 位置。我已经附加了一个唯一的字符串来标识这些日志 (MY_LOGS),但我似乎无法找到一种方法来(可能)覆盖 databricks 集群使用的现有 log4j 属性。
到目前为止,我已经尝试编写一个简单的测试批处理脚本并将其附加到初始化脚本中,如建议的here。 但它不起作用,并且集群在初始化期间无法启动。
【问题讨论】:
标签: apache-spark log4j databricks