我正在使用Cloud Dataproc运行PySpark作业,并希望使用logging
Python模块记录信息.目标是将这些日志推送到Cloud Logging.
从这个问题,我了解到我可以通过向流畅的配置添加日志文件来实现这一点,该配置位于/etc/google-fluentd/google-fluentd.conf
.
但是,当我查看日志文件时/var/log
,我找不到包含我的日志的文件.我已经尝试使用默认的python记录器和'py4j'记录器.
logger = logging.getLogger() logger = logging.getLogger('py4j')
任何人都可以了解我应该使用哪个记录器,以及应该将哪个文件添加到流畅的配置中?
谢谢
TL;博士
现在不支持本机,但将在Cloud Dataproc的未来版本中本机支持.也就是说,在此期间有一个手动解决方法.
解决方法
首先,确保将python日志从spark上下文发送到正确的log4j记录器.为此,请将您的记录器声明为:
import pyspark sc = pyspark.SparkContext() logger = sc._jvm.org.apache.log4j.Logger.getLogger(__name__)
第二部分涉及一种原生支持的解决方法.如果你看下面的spark属性文件
/etc/spark/conf/log4j.properties
在群集的主服务器上,您可以看到如何为spark配置log4j.目前它看起来如下:
# Set everything to be logged to the console log4j.rootCategory=INFO, console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.target=System.err log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c: %m%n # Settings to quiet third party logs that are too verbose ...
请注意,这意味着log4j日志仅发送到控制台.dataproc代理将获取此输出并将其作为作业驱动程序输出返回.但是,为了能够流畅地获取输出并将其发送到Google Cloud Logging,您需要使用log4j写入本地文件.因此,您需要修改log4j属性,如下所示:
# Set everything to be logged to the console and a file log4j.rootCategory=INFO, console, file # Set up console appender. log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.target=System.err log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c: %m%n # Set up file appender. log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=/var/log/spark/spark-log4j.log log4j.appender.file.MaxFileSize=512KB log4j.appender.file.MaxBackupIndex=3 log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.conversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c: %m%n # Settings to quiet third party logs that are too verbose ...
如果您将文件设置为/var/log/spark/spark-log4j.log,如上所示,Dataproc群集上的默认流畅配置应该将其拾取.如果您想将文件设置为其他内容,可以按照此问题中的说明轻松获取该文件.