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允许你使用代码的方式自定义复杂的依赖关系,而不是用配置文件。
这是非常有用的,因为在现实世界里面的依赖关系是很凌乱的。下面的这些依赖关系,你有可能会遇到:

luigi学习4-构建工作流的更多相关文章
- Android官方技术文档翻译——构建工作流
本文译自androd官方技术文档<Build Workflow>,原文地址:http://tools.android.com/tech-docs/new-build-system/buil ...
- Spring boot学习1 构建微服务:Spring boot 入门篇
Spring boot学习1 构建微服务:Spring boot 入门篇 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...
- (译)学习如何构建自动化、跨浏览器的JavaScript单元测试
作者:Philip Walton 译者:Yeaseon 原文链接:点此查看 译文仅供个人学习,不用于任何形式商业目的,转载请注明原作者.文章来源.翻译作者及链接,版权归原文作者所有. ___ 我们都知 ...
- Spring实战第五章学习笔记————构建Spring Web应用程序
Spring实战第五章学习笔记----构建Spring Web应用程序 Spring MVC基于模型-视图-控制器(Model-View-Controller)模式实现,它能够构建像Spring框架那 ...
- postman使用--构建工作流和newman
构建工作流 在使用“Collection Runner”的时候,集合中的请求执行顺序就是请求在Collection中的显示排列顺序.但是,有的时候我们不希望请求按照这样的方式去执行,可能是执行完第一个 ...
- 《TensorFlow学习指南深度学习系统构建详解》英文PDF+源代码+部分中文PDF
主要介绍如何使用 TensorFlow 框架进行深度学习系统的构建.涉及卷积神经网络.循环神经网络等核心的技术,并介绍了用于图像数据和文本序列数据的模型.给出了分布式深度学习系统在TensorFlow ...
- Activiti工作流学习笔记(四)——工作流引擎中责任链模式的建立与应用原理
原创/朱季谦 本文需要一定责任链模式的基础,主要分成三部分讲解: 一.简单理解责任链模式概念 二.Activiti工作流里责任链模式的建立 三.Activiti工作流里责任链模式的应用 一.简单理解责 ...
- SharePoint 2013 开发——构建工作流开发环境
博客地址:http://blog.csdn.net/FoxDave 本篇我们来讲述一下如何搭建SharePoint 2013工作流开发环境. Windows Azure Workflow作为单独的可下 ...
- luigi学习9--执行模型
luigi的执行和触发模型非常简单. 一.luigi的执行模型 当你执行一个luigi的工作流的时候,worker调度所有的task,并且执行task在一个单独的进程中. 这种scheme最大的好处是 ...
随机推荐
- datetime时区转换
http://www.dannysite.com/blog/122/ Python标准库中的datetime模块提供了各种对日期和时间的处理方法.从本文的主题着手,首先利用datetime中提供的ut ...
- sizeof usage & big / little endian
http://blog.csdn.net/w57w57w57/article/details/6626840 http://people.cs.umass.edu/~verts/cs32/endian ...
- 命令行重新安装.net framework
①运行cmd ②运行命令: cd c:\\windows\\microsoft.net\\framework\v4.0.30319 ③在上述目录下执行如下命令 aspnet_regiis.exe -i ...
- 《Code Complete》ch.21 协同构建
WHAT? 所有的协同构建技术都试图通过这样那样的途径,将展示工作的过程正式化,以便将错误暴露出来 WHY? 提高缺陷检出率,从而缩短开发周期,降低开发成本 发现不明显的错误信息,如不恰当的注释.硬编 ...
- 《Code Complete》ch.18 表驱动法
是什么 一种scheme,用表来做信息存取,代替逻辑语句(if/else) 为什么 简化逻辑语句,避免大量嵌套的 if/else 或者 switch/case 怎么用 三种访问表的方式 直接访问:将源 ...
- Android 在程序中动态添加 View 布局或控件
有时我们需要在程序中动态添加布局或控件等,下面用程序来展示一下相应的方法: 1.addView 添加View到布局容器 2.removeView 在布局容器中删掉已有的View 3.LayoutPar ...
- svn上传文件
转自:http://zhouhaitao.iteye.com/blog/1122918 如何将指定文件或文件夹直接提交到svn指定目录? 如何将指定文件或文件夹直接提交到svn指定目录? 一般我们都是 ...
- selenium 速查手册 python版
1.安装与配置 pip install selenium 基本使用selenium都是为了动态加载网页内容用于爬虫,所以一般也会用到phantomjs mac下如果要配置phantomjs环境的话 e ...
- 用github pages展示你的静态网页,多项目支持
我看到有分享用github pages来做博客的,不过我并不想挂博客在上面,我只是想将我的一些作品挂上去,然后链接到我的简历里,这样HR可以直接看到. 首先是最基本的操作,在github上创建一个新的 ...
- 使用Kinect2.0获取点云以在GLUT中显示
这篇文章用来记录Kinect2.0如何生成点云. 以下示例源自Kinect提供的example修改完成,其名称会在小标题下方注解. 首先,要获取点云需要获取图像的深度数据和颜色数据.最后再将深度数据与 ...