【发布时间】:2016-09-14 11:20:27
【问题描述】:
我希望我的 Spark 驱动程序(用 Python 编写)输出一些基本的日志记录信息。我可以看到三种方法可以做到这一点:
- 使用 PySpark py4j 网桥访问 Spark 使用的 Java log4j 日志记录工具。
log4jLogger = sc._jvm.org.apache.log4j
LOGGER = log4jLogger.LogManager.getLogger(__name__)
LOGGER.info("pyspark script logger initialized")
只需使用标准控制台打印。
loggingPython 标准库模块。这似乎是理想的和最 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