【问题标题】:PySpark Logging?PySpark 日志记录?
【发布时间】:2016-09-14 11:20:27
【问题描述】:

我希望我的 Spark 驱动程序(用 Python 编写)输出一些基本的日志记录信息。我可以看到三种方法可以做到这一点:

  1. 使用 PySpark py4j 网桥访问 Spark 使用的 Java log4j 日志记录工具。

log4jLogger = sc._jvm.org.apache.log4j LOGGER = log4jLogger.LogManager.getLogger(__name__) LOGGER.info("pyspark script logger initialized")

  1. 只需使用标准控制台打印。

  2. logging Python 标准库模块。这似乎是理想的和最 Pythonic 的方法,但是,至少开箱即用,它不起作用,并且记录的消息似乎不可恢复。当然,这可以配置为记录到 py4j->log4j 和/或控制台。

所以,官方编程指南 (https://spark.apache.org/docs/1.6.1/programming-guide.html) 根本没有提到日志记录。这令人失望。应该有标准的文档化推荐方式来从 Spark 驱动程序记录日志。

搜索了这个问题,发现了这个:How do I log from my Python Spark script

但是那个帖子的内容并不令人满意。

具体来说,我有以下几个问题:

  • 我是否缺少从 PySpark 驱动程序记录的标准方法?
  • 记录到 py4j->log4j 与控制台有什么优缺点吗?

【问题讨论】:

  • 你有没有得到这个答案?在我看来 1 是唯一的解决方案。 2 对我不起作用(我对此感到惊讶)。查看您链接到的另一个问题,我认为logging.getLogger('py4j') 不起作用,因为 py4j 不使用 log4j 记录器,它使用 java.utils.logger。
  • 我得出的结论是 Spark 基本上不打算让自定义 Spark 作业进行自己的日志记录。通常,您编写一个驱动程序来编码一个相当简单的工作流,而 Spark 本身会完成繁重的工作并提供各种监控和诊断工具供使用。
  • 您是将.py 提交到集群还是独立机器?你想记录每个工作人员的事件还是只记录你的客户端?

标签: logging apache-spark pyspark


【解决方案1】:

更简洁的解决方案是使用标准 python 日志记录模块和自定义分布式处理程序来收集来自 spark 集群的所有节点的日志消息。

"Logging in PySpark" of this Gist.

【讨论】:

【解决方案2】:

在我的 python 开发环境(单机 Spark 设置)中,我使用这个:

import logging


def do_my_logging(log_msg):

    logger = logging.getLogger('__FILE__')
    logger.warning('log_msg = {}'.format(log_msg))

do_my_logging('Some log message')

使用 spark-submit 脚本工作。

【讨论】:

  • 如果你 -1 这个,最好在 cmets 中添加原因......如果这是一个不合适的答案,那么我将其删除。
  • 你的意思是在集群上的多台机器上? OP 询问驱动程序的日志记录。不要使用此设置登录集群。
  • 我得到:找不到记录器__FILE__的处理程序
  • 您应该删除撇号。现在它将寻找一个以该确切字符串作为名称的记录器。也许还可以尝试用(小写)“名称”替换“文件”(但不确定这是否重要)。
  • @YtsendeBoer 你能解释一下“不要使用这个设置登录集群”是什么意思吗?问题是在火花的背景下。如果您想记录被转储到 Hive 的数据帧,由于并行性,这是否是一个好的解决方案?
猜你喜欢
  • 1970-01-01
  • 2021-07-11
  • 1970-01-01
  • 2016-09-15
  • 2018-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多