【问题标题】:Apache Spark logging redirects WebSphere log outputApache Spark 日志记录重定向 WebSphere 日志输出
【发布时间】:2015-11-25 11:58:00
【问题描述】:

出于测试目的,我想在 WebSphere Application Server 上以本地模式运行 Spark。问题是,一旦本地 Spark 上下文被初始化,它就会通过 Spark 记录器重定向 WebSphere 服务器内的 all 日志记录。

我所说的“重定向”是指:所有日志行,无一例外,无论哪个 WebSphere 组件或应用程序,都根据 WebSphere 日志记录到 SystemErr。在每条记录的消息上,您可以在实际日志消息之前看到另一个时间戳以及日志级别和记录器名称。

从其他问题中,我发现 WebSphere 和 Spark 在内部都使用 SLF4J。如何防止 Spark 中的 SLF4J 通过自身重定向来自其他应用程序的所有日志记录?

我正在使用 WebSphere Application Server v8.5.5.6 和 Apache Spark v1.4.1 CHD4 二进制分发版。

【问题讨论】:

  • 您好,您使用的是 Liberty 还是经典 WebSphere?
  • 那将是“经典”WebSphere,绝对不是 Liberty。

标签: logging apache-spark websphere slf4j


【解决方案1】:

以下方法似乎解决了我的日志记录问题:

  1. 删除 Spark jar 文件中org 文件夹下的slf4j 文件夹。 (任何用于修改 ZIP 文件的标准工具都可以在这里使用。)
  2. 除了修改的 Spark jar 之外,将 SLF4J 的 API 和 JDK14 jar 作为库添加到 Web 应用程序。

(说实话,我没有再花太多精力来尝试配置 Spark 的日志记录,而且我的方法可能有点生硬,但它确实有效。)

上述步骤成功地阻止了 Spark 接管 WebSphere 日志记录。相反,所有 Spark 生成的日志都由 WebSphere 处理。

当然,这不会解决其他缺陷,例如 Spark 只允许每个 JVM 使用单个 SparkContext(并且 WebSphere 节点上的所有应用程序都在单个 JVM 中运行),因此这种设置将继续用于测试目的仅限。

【讨论】:

    【解决方案2】:

    我的猜测是带有 spark 的 slf4j 正在配置根记录器(例如 SLF4J 桥处理程序),它将所有 JUL 记录器输出路由到 SLF4J,然后将记录到 System.err。

    Liberty 需要并使用 JUL(除了我们自己的)。任何与根 JUL 日志处理程序混淆的东西都会与 Liberty 的日志记录混淆(感谢 JVM 单例)。看起来 Apache Spark 假设/强制使用 log4j,并假设它也应该通过 log4j 路由所有 JUL。

    您需要配置 log4j 以不同方式处理 Liberty 消息,或者与 Apache Spark 搏斗(可能在那里进行一些修改)以允许使用 JUL(然后 Liberty 通过 server.xml 配置进行管理)。

    或者根据这篇文章修改 slf4j(logback.xml) 配置: How to customize logging levels for Cassandra and Spark

    【讨论】:

    • 谢谢,我明天去看看。我曾希望我可以毫不费力地让它工作,所以希望我可以说服它做我想做的事,而不必自己编译。
    猜你喜欢
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多