如何只允许特定的机器在Luigi中运行任务

2024-09-23 16:25:32 发布

您现在位置:Python中文网/ 问答频道 /正文

Machine A能够访问SQL数据库,Machine B能够访问Google Drive。如果UploadToDrive依赖于DownloadSQLData某个地方,如何确保任务在正确的机器上运行?你知道吗

目前Machine A运行DoSomethingElseWithDataMachine B运行UploadToDrive几分钟后。直到有一天Machine A可能不起作用,此时Machine B将尝试DownloadSQLData作为上游依赖项并失败为止,这都是正常的。你知道吗

class DownloadSQLData(luigi.Task):

    # ...

    def run(self):
        # Only Machine A can do this
        # ...

class TransformData(luigi.Task):

    # ...

    def requires(self):
        return DownloadSQLData(date=self.date)

class UploadToDrive(luigi.Task):

    # ...

    def requires(self):
        return TransformData(date=self.date)

    def run(self):
        # Only Machine B can do this
        # ...

class DoSomethingElseWithData(luigi.Task):

    #...

    def requires(self):
        return TransformData(date=self.date)

这个例子中的SQL数据库实际上不是SQL数据库,而是我们公司内部的一个旧系统。当未经授权的用户试图访问它时,它不会优雅地失败,我们希望避免任何来自Machine B的尝试。你知道吗


Tags: self数据库tasksqldatereturndefmachine
1条回答
网友
1楼 · 发布于 2024-09-23 16:25:32

Luigi本身不能进行调度,即在某些机器上运行某些任务或将任务调度到某个时间运行。也就是说,有很多方法可以实现你想要的。你知道吗

解决方案1:让我们介绍机器C,它可以访问机器AB。使用许多工具(https://wiki.python.org/moin/SecureShell)机器C可以运行任务从A检索数据,在C上转换数据,然后在上载之前传输到B。你知道吗

解决方案2:此解决方案很可能工作量过大和/或不可行。在网络调度器(类似slurmhttps://www.schedmd.com/)中设置机器A,B,C,以C作为头调度器,并将AB指定为特定类型的资源(可能是SQLGDrive)。然后,从C开始,将slurm任务安排为luigi作业(https://github.com/pharmbio/sciluigi可以提供帮助)。这些slurm任务应该指定每个任务所需的给定资源。这就是它!你知道吗

相关问题 更多 >