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. 并发之 volatile

    使用volatile: 每次读取volatile变量的值,都强制从主存读取最新的值. (每次修改volatile变量都会同步到主存中) i++ 之所以不能保证线程安全,是因为volatile不能解决非 ...

  2. Ecshop 安装时错误

    网上提示方法将install/includes/lib_installer.php以下内容修改后仍然提示失败: include(ROOT_PATH . 'install/languages/' . $ ...

  3. springmvc的3中路径风格

    1.导入相应的jar包,文件放置情况 2.web.xml <?xml version="1.0" encoding="UTF-8"?> <we ...

  4. Delphi Socket 阻塞线程下为什么不触发OnRead和OnWrite事件

    //**********************************************************************************//说明: 阻塞线程下为什么不触 ...

  5. px、pt、in、dp、dpi

        PPI 与 DPI ppi的运算方式是:PPI = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数.即:长.宽各自平方之和的开方,再除以屏幕对角线的英寸数. 以iphone5为例, ...

  6. poj 1007 (nyoj 160) DNA Sorting

    点击打开链接 DNA Sorting Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 75164   Accepted: 30 ...

  7. 第二章 I - The 3n + 1 problem(2.4.2)

    这是一道很坑爹的题,一定注意输入的两个数的大小,并且不能简单的交换,因为在最后的输出的时候还需要将原来的数按照原来的顺序和大小,这就是为什么还得开辟两个值得原因 Description Problem ...

  8. 《Code Complete》ch.25 代码调整策略

    WHAT? 本章讨论程序性能调整问题.但是对用户来说,程序员按时交付软件,提供一个清爽的用户界面,避免系统经常死机常常比程序性能更加重要 WHY? 在程序设计这种文化中,编写出能够节省几微秒的代码可以 ...

  9. contentSize、contentInset和contentOffset的区分

    一.  frame.bounds和center的区分 frame:由左边原点和矩形面积组成,其中原点代表其在父视图中的起点位置. bounds:就是原点始终为(0,0)的frame. center:本 ...

  10. WPF学习系列之八(形状,画刷和变换)

    形状,画刷和变换   概述: 在许多用户界面技术中,普通控件和自定义绘图之间具有清晰的区别.通常来说,绘图特性只用于特定的应用程序--如游戏,数据可视化和物理仿真等.而WPF具有一个非常不同的原则.它 ...