我尝试在~/.config/dask/distributed.yaml
和~/.config/dask/yarn.yaml
中使用以下内容,
logging-file-config: "/path/to/config.ini"
或
logging:
version: 1
disable_existing_loggers: false
root:
level: INFO
handlers: [consoleHandler]
handlers:
consoleHandler:
class: logging.StreamHandler
level: INFO
formatter: sample_formatter
stream: ext://sys.stderr
formatters:
sample_formatter:
format: '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
然后在我的函数中得到工作人员的评估:
import logging
from distributed.worker import logger
import dask
from dask.distributed import Client
from dask_yarn import YarnCluster
log = logging.getLogger(__name__)
@dask.delayed
def worker_func(args):
logger.info("This will show up in the worker logs")
log.info("This does not show up in worker logs")
return
if __name__ == "__main__":
dag_1 = {'worker_func': (worker_func, arg_1)}
tasks = dask.get(dag_1, 'load-1')
log.info("This also shows up in logs, and custom formatted)
cluster = YarnCluster()
client = Client(cluster)
dask.compute(tasks)
当我尝试使用以下方法查看纱线记录时:
yarn logs -applicationId {application_id}
我没有看到log.info
内部worker_func
的日志,但确实看到了distributed.worker.logger
以及控制台上该函数外部的日志。我也尝试使用client.get_worker_logs(),但是返回了一个空字典。有没有办法查看从工作人员那里求值的函数内部的自定义日志?
答案 0 :(得分:1)
这个问题有很多事情要做,所以我将回答“如何为轻纱工人配置日志记录”,并希望其他所有内容都能通过回答而变得清楚。
Dask的配置系统已本地加载到您从中启动dask群集的计算机上(通常是边缘节点)。此配置不会自动分配给工作人员,您需要自己负责。您在这里有一些选择:
/etc/dask/
中进行管理/ IT配置,这将影响所有用户。{prefix}/etc/dask/
加载配置,其中prefix
是sys.prefix
。例如,如果您在/path/to/environment
拥有conda环境,则可以执行以下操作以捆绑配置
# Create the configuration directory in the environment
mkdir -p /path/to/environment/etc/dask/
# Add your configuration to this directory
mv config.yaml /path/to/environment/etc/dask/config.yaml
# Package the environment
conda pack -p /path/to/environment -o environment.tar.gz
在config.yaml
中设置的任何配置值现在将在所有工作节点上可用。设置一些日志记录配置的示例配置文件为:
logging:
version: 1
root:
level: INFO
handlers: [consoleHandler]
handlers:
consoleHandler:
class: logging.StreamHandler
level: INFO
formatter: sample_formatter
stream: ext://sys.stderr
formatters:
sample_formatter:
format: '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
使用YARN cli可以检索完成的dask-yarn应用程序中的日志
yarn logs -applicationId <application-id>
可以使用client.get_worker_logs()
来检索正在运行的 dask-yarn应用程序的日志。请注意,这些日志将仅包含写入distributed.worker
记录器的记录。您无法写自己的记录器,而使它们出现在client.get_worker_logs()
的输出中。要写入此记录器,请通过
import logging
logger = logging.getLogger("distributed.worker")
logger.info("Writing with the worker logger")
任何经过适当配置以登录到stdout
或stderr
的记录器都会出现在通过yarn CLI访问的日志中,但是{{1}仅distributed.worker
记录器输出可用。 }}。
旁注
我尝试在〜/ .config / dask / distributed.yaml和〜/ .config / dask / yarn.yaml中使用以下内容
配置文件的名称无关紧要,dask会将所有get_worker_logs()
文件加载到所有配置目录中并合并其内容。有关更多信息,请阅读the configuration docs