我希望我的用Python编写的Spark驱动程序能够输出一些基本的日志信息,现在我看到有三种方法可以实现:
- 使用PySpark py4j桥接获取Spark使用的Java log4j日志记录工具。
log4jLogger = sc._jvm.org.apache.log4j
LOGGER = log4jLogger.LogManager.getLogger(__name__)
LOGGER.info("pyspark脚本日志记录器已初始化")
直接使用标准的控制台打印。
使用 Python 标准库模块
logging
。这似乎是理想和最符合 Python 规范的方法,但至少在默认情况下,它不起作用,日志消息似乎无法被恢复。当然,可以将其配置为记录到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 与控制台相比,有哪些优缺点?
logging.getLogger('py4j')
不起作用,因为 py4j 不使用 log4j 记录器,而是使用 java.utils.logger。 - dragonx.py
提交到集群还是独立机器?你想要记录每个工作进程的事件还是仅在客户端记录? - Jocer