• luigi学习4-构建工作流


    luigi提供了两个基本单元来构造一个工作流,这两个基本单元分别是Task和Target。这两个单元都是抽象类,我们实现他们中的某些方法就可以了。除了这两个基本单元,还有一个重要的概念是Prameter,它可以控制task的运行方式。

    一、target

    target对应的是磁盘上的一个文件,或者是HDFS上的一个文件,或者数据库中一条记录。一个自定义的target只需要实现exists方法,如果文件存在那么返回true,如果不存在则返回false。

    实际上,自定义一个Target类的概率是很小的,luigi提供了很多现成的实现,这些实现足够满足大部分应用的需求。这些实现包括LocalTarget,HdfsTarget。除了这两个常用的文件系统,luigi也提供了对其他文件系统的支持,

    比如:luigi.s3.S3Target,luigi.contrib.ssh.RemoteTarget,luigi.contrib.ftp.RemoteTarget,luigi.contrib.mysqldb.MySqlTarget,luigi.contrib.redshift.RedshiftTarget等等。

    大多数的target都是和文件系统有点相似的,比如LocalTarget和HdfsTarget都对应在本地或者hdfs上的一个文件。他们不但包装了底层的文件系统的操作,来使得所有的操作都是原子性的,并且他们都实现了open()方法,通过这个方法

    传入"mode='r'"来获取读取流,传入"mode='w'"来获取输入流。

    luigi也提供了压缩的功能,只需要配置format=format.Gzip就可以,当然添加其他的压缩支持也是很方便的。

    二、task

    task是做计算的地方。其中有一些方法区实现来改变它的行为,最为显著的方法是run(),output()和requires()。

    task通常情况下需要消费其他的task产生的target,并且通常情况下也会生产出(output)一些target。

    我们可以通过requires()方法来定义几个task之间的依赖关系。

    每一个task通过output方法来定义它的输出。并且可以通过input()方法来得到对应的依赖的target对象。

    官网的这个图很明了的显示了input()和output()之间的关系:

    三、parameter

    parameter可以向task传递参数。比如你有一个hadoop job每天夜里计算一哥报告,那么你可能需要一个date类型的参数来指明计算日期。

    四、dependencies

    使用task、target、parameter,luigi允许你使用代码的方式自定义复杂的依赖关系,而不是用配置文件。

    这是非常有用的,因为在现实世界里面的依赖关系是很凌乱的。下面的这些依赖关系,你有可能会遇到:

  • 相关阅读:
    HTTP的POST提交的四种常见消息主体格式
    postman设置token等关联参数
    基于Appium的APP自动化测试基础--美团APP的实例
    Genymotion安装apk问题,不能部署Genymotion-ARM-Translation_v1.zip
    http://dl-ssl.google.com/android上不去解决方案
    算法中,什么是哈希值,哈希值怎么生成的,有什么用?
    理解Python中的__builtin__和__builtins__
    SQL语句中exists和in的区别
    Selenium_python自动化跨浏览器执行测试
    python assert断言函数
  • 原文地址:https://www.cnblogs.com/dongdone/p/5706956.html
Copyright © 2020-2023  润新知