美文网首页编排调度
luigi记录(1)

luigi记录(1)

作者: _Megamind_ | 来源:发表于2018-06-04 15:41 被阅读0次
    • 基础

      • Task
        • 每个任务模块以class的形式存在,继承luigi.Task

            class TestTask(luigi.Task):
              //任务参数
              _params = luigi.Parameters()
              def require(self):
                // 每个任务的入口
                return LastTask()
              def run(self):
                // 每个任务具体执行内容
                pass
              def output(self):
                // 每个任务的出口
                pass
          
        • 每个任务模块重载方法:

          • require方法:
              def require(self):
                return LastTask()
            
            1. 这里主要是说明依赖关系,当前任务需要上一个任务LastTask()的执行结果(一般是有文件生成),如若需要可以将结果作为输入
            2. 可以依赖多个任务
              return [LastTask1(), LastTask2()]
              or
              return {'x': LastTask1(), 'y': LastTask2()}
              or
              yield LastTask1()
              yield LastTask2()
          • output方法:
              def output(self):
                return LocalTarget(path)
            
            1. 这里主要是说明任务执行的输出结果(一般是输出文件),作为检验任务是否完成的依据
            2. 返回的是一个luigi.Target对象
            3. 可以有多个输出结果
              return [LocalTarget(path1), LocalTarget(path2)]
          • run方法:
            1. 执行内容中需要把结果写入文件中,路径对应于output方法返回的Target的路径
            2. 在执行内容前可以用Target的方法makedirs()检查输出文件夹是否存在并创建
            3. 引用输出路径: self.output().path or self.output()['x'].path or self.output()[0].path
              引用依赖路径: self.input().path or self.input()['x'].path or self.input()[0].path
        • Parameters

          • 流程入口的Task的变量需要由Parameters对象来定义:
              class TestTask:
                test1 = luigi.Parameters()
                test2 = luigi.Parameters()
            
          • 命令行执行流程时可以直接给Parameters类的变量赋值:
            --test1 1 --test2 2
    • 流程


      luigi_pipeline.png
    1. 由流程入口workflow定义整个流程中并行运行(yield调用)的任务块 TaskA & TaskB
    1. 任务调用时,会先检查output方法中定义返回的文件是否存在:
      • 如果存在则表示该任务已经成功执行过了,就不会再继续执行,就会从这个节点跳过(包括该节点下的子任务)
      • 如果不存在则会检查该任务的require方法中定义返回的任务对象TaskSon,从而跳转检查TaskSon任务的output方法
      • 该检查会一直顺着任务树一直往下,直到找到一个已完成的子任务,然后回溯(即递归调用)
    1. 当任务树中某个任务节点的子任务已完成,则该任务会执行run方法(注,run方法中必须生成output方法中Target包装的文件)

    相关文章

      网友评论

        本文标题:luigi记录(1)

        本文链接:https://www.haomeiwen.com/subject/vucysftx.html