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允许你使用代码的方式自定义复杂的依赖关系,而不是用配置文件。

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

luigi学习4-构建工作流的更多相关文章

  1. Android官方技术文档翻译——构建工作流

    本文译自androd官方技术文档<Build Workflow>,原文地址:http://tools.android.com/tech-docs/new-build-system/buil ...

  2. Spring boot学习1 构建微服务:Spring boot 入门篇

    Spring boot学习1 构建微服务:Spring boot 入门篇 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...

  3. (译)学习如何构建自动化、跨浏览器的JavaScript单元测试

    作者:Philip Walton 译者:Yeaseon 原文链接:点此查看 译文仅供个人学习,不用于任何形式商业目的,转载请注明原作者.文章来源.翻译作者及链接,版权归原文作者所有. ___ 我们都知 ...

  4. Spring实战第五章学习笔记————构建Spring Web应用程序

    Spring实战第五章学习笔记----构建Spring Web应用程序 Spring MVC基于模型-视图-控制器(Model-View-Controller)模式实现,它能够构建像Spring框架那 ...

  5. postman使用--构建工作流和newman

    构建工作流 在使用“Collection Runner”的时候,集合中的请求执行顺序就是请求在Collection中的显示排列顺序.但是,有的时候我们不希望请求按照这样的方式去执行,可能是执行完第一个 ...

  6. 《TensorFlow学习指南深度学习系统构建详解》英文PDF+源代码+部分中文PDF

    主要介绍如何使用 TensorFlow 框架进行深度学习系统的构建.涉及卷积神经网络.循环神经网络等核心的技术,并介绍了用于图像数据和文本序列数据的模型.给出了分布式深度学习系统在TensorFlow ...

  7. Activiti工作流学习笔记(四)——工作流引擎中责任链模式的建立与应用原理

    原创/朱季谦 本文需要一定责任链模式的基础,主要分成三部分讲解: 一.简单理解责任链模式概念 二.Activiti工作流里责任链模式的建立 三.Activiti工作流里责任链模式的应用 一.简单理解责 ...

  8. SharePoint 2013 开发——构建工作流开发环境

    博客地址:http://blog.csdn.net/FoxDave 本篇我们来讲述一下如何搭建SharePoint 2013工作流开发环境. Windows Azure Workflow作为单独的可下 ...

  9. luigi学习9--执行模型

    luigi的执行和触发模型非常简单. 一.luigi的执行模型 当你执行一个luigi的工作流的时候,worker调度所有的task,并且执行task在一个单独的进程中. 这种scheme最大的好处是 ...

随机推荐

  1. java学习___File类的创建

    一.使用File创建文件 File file = new File("."+File.separator+"data.dat"); //如果不存在则创建 fil ...

  2. 把exe嵌入到自己的exe中。delphi xe3

    下面是一个把exe程序嵌入到我们自己的exe中.开发环境 Delphi XE3 Version 17.0.4625.53395.OS环境WIN7 SP1,由于xe3版本的引用库发生变化.换成其他版本的 ...

  3. 使用 Heka 导入自定义的nginx日志到Elasticsearch

    重置Heka执行进度 heka的进度配置文件存在配置项 base_dir 设置的目录,只需要删除这个文件夹下面的内容,就可以完全重置heka的进度. base_dir 配置项默认是在下面目录: '/v ...

  4. [SQL]SqL给局部变量赋值有两种方法

    给局部变量赋值有两种方法: .SET @variable_name=value .SELECT @variable_name=value 两者的区别:SET赋值语句一般用于赋给变量一个指定的常量,SE ...

  5. 再战map

    以前自己整理过map容器,但是好像没有这篇这么系统... Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处 ...

  6. 日志挖掘Logmnr

    日志挖掘 9.1 日志中数据用途 所有对用户数据以及数据字典的改变全部被保存在联机日志中.当然nologging,insert/*+append+/情况比较特殊除外,因此归档日志可以用来做数据库的恢复 ...

  7. Mysql中的count()与sum()区别

    首先创建个表说明问题 CREATE TABLE `result` ( `name` varchar(20) default NULL, `subject` varchar(20) default NU ...

  8. OC基础(12)

    new方法实现原理 类的本质 类的启动过程 *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bo ...

  9. Visual 中控制台程序如何使用MFC类库

    unresolved external symbol __beginthreadex错误的解决Win32 Consle Application使用MFC的一些类如CString时编译时相信会很经常遇到 ...

  10. 解决VS2008 开发Windows Mobile 项目生成速度慢的问题

    最近用VS2008开发Windows Mobile程序,使用C#..NET Compact Framework,发现项目生成速度比较慢.用VS2008打开项目后,开始一段时间生成速度还能忍受,时间一长 ...