如何从 DataProcPySparkOperator 发出 Airflow 日志

How do I emit Airflow logs from a DataProcPySparkOperator

我看过一些关于从 , and for configuring Airflow logs 发出日志的内容,但还没有找到任何可以让我从容器化进程中发出日志的东西,例如DataProcPySparkOperator。

我已经在 运行 Operator 集群中的 pyspark 脚本顶部添加了以下内容:

import logging
logging.info('Test bare logger')
for ls in ['airflow', 'airflow.task', __name__]:
    l = logging.getLogger(ls)
    l.info('Test {} logger'.format(ls))
print('Test print() logging')

它不产生任何输出,尽管 Operator 脚本在其他方面 运行 是预期的。

我假设我可以从集群内部建立到云存储(或数据库)的连接,可能会搭载用于读取和写入文件的现有连接,但是... 这似乎是为了满足共同需求而做的大量工作。我非常希望在计算的中间阶段获得关于记录数或其他数据的偶尔引用的状态检查。

Airflow 是否默认在集群中设置了一个 Python 记录器?如果有,我该如何访问它?

如果您使用 Cloud Composer 来 运行 Airflow,您应该知道 Cloud Composer 仅包括 Airflow 日志和 Streaming 日志。

当您 运行 Dataproc 集群中的 PySpark 作业时,作业驱动程序输出存储在 Cloud Storage 中(参见 Accessing job driver output

您还可以启用 Dataproc 以将作业驱动程序日志保存在 Cloud Logging 中。

Dataproc documentation 中所述,要在 Logging 中启用作业驱动程序日志,请在创建集群时设置以下集群 属性:

dataproc:dataproc.logging.stackdriver.job.driver.enable=true

还需要以下集群属性,并且在创建集群时默认设置:

dataproc:dataproc.logging.stackdriver.enable=true
dataproc:jobs.file-backed-output.enable=true