如何检索Dask纱线作业的工作日志?

如何检索Dask纱线作业的工作日志?,dask,dask-distributed,Dask,Dask Distributed,我有一个简单的Dask脚本,它只执行一个任务:从HDFS加载一个文件,如下所示。但是,我在代码中遇到了一个bug,所以我在函数中添加了一个print语句,但是我没有看到在我使用warn logs-applicationId{application\u id}获得的工作日志中执行该语句。我甚至尝试了方法Client.get\u worker\u logs(),但是它也不显示stdout,只显示一些有关工作人员的信息。代码执行完成后,如何获取工作日志 import sys import numpy

我有一个简单的Dask脚本,它只执行一个任务:从HDFS加载一个文件,如下所示。但是,我在代码中遇到了一个bug,所以我在函数中添加了一个
print
语句,但是我没有看到在我使用
warn logs-applicationId{application\u id}
获得的工作日志中执行该语句。我甚至尝试了方法
Client.get\u worker\u logs()
,但是它也不显示
stdout
,只显示一些有关工作人员的
信息。代码执行完成后,如何获取工作日志

import sys
import numpy as np
import scipy.signal
import json

import dask
from dask.distributed import Client
from dask_yarn import YarnCluster


@dask.delayed
def load(input_file):
    print("In call of Load...")
    with open(input_file, "r") as fo:
        data = json.load(fo)
    return data


# Process input args
(_, filename) = sys.argv


dag_1 = {
    'load-1': (load, filename)
}

print("Building tasks...")
tasks = dask.get(dag_1, 'load-1')

print("Creating YARN cluster now...")
cluster = YarnCluster()
print("Scaling YARN cluster now...")
cluster.scale(1)
print("Creating Client now...")
client = Client(cluster)

print("Getting logs..1")
print(client.get_worker_logs())

print("Doing Dask computations now...")
dask.compute(tasks)

print("Getting logs..2")
print(client.get_worker_logs())

print("Shutting down cluster now...")
cluster.shutdown()


我不确定这里发生了什么,打印语句应该(并且通常是这样)最终出现在Thread存储的日志文件中

如果希望调试语句出现在
get\u worker\u logs
的工作日志中,可以直接使用工作日志:

from distributed.worker import logger
logger.info("This will show up in the worker logs")

谢谢@jiminy\u crist!还可以使用Python自己的日志模块。有什么区别吗?
get\u worker\u logs
只会获取使用
distributed.worker.logger
写入的日志,因此您必须写入同一个日志才能正常工作。有没有办法配置此日志?级别、格式、处理程序等?我尝试在Dask配置文件中使用两个键
logging
logging file config
~/config/Dask/distributed.yaml
~/config/Dask/warn.yaml
,但它们没有任何效果?本地配置不用于工作人员,您需要将配置与您的环境捆绑在一起,或者确保它存在于每个节点上。如果您正在打包一个环境(例如,使用conda pack),您可以在
yourenvironment/etc/dask/dask.yaml
创建一个文件,将配置放入其中,然后将其作为环境tarball的一部分分发。Dask的配置系统读取几个不同目录中的所有yaml文件,因此文件名并不重要,重要的只是位置。有关更多信息,请参阅。另请注意,它是
~/.config/dask/..
而不是您上面键入的
~/config/dask/..