返回
Luigi V3.0.3 正式版

Luigi

立即下载

小编提示:PC版不适合移动端,如下载有问题点击反馈!

软件介绍

Luigi是一款专业的自动化流程管道构建软件。建立自动化工作方便你的工作你可以来试试Luigi。软件可以帮助用户快速构建自动化流程管道,建立复杂的任务,设置任务配置的方案,设置调度,使任务自动运行,这是您未来的方便,这方便了需要建立一个工作流程,需要视觉任务的朋友有用。处理数据时,您可以通过此软件创建自动化工作。您可以使用内置任务模板快速创建工作流管理方案。您可以设置任务依赖项。您可以设置任务。数据输出模式,您可以设置与作业相关的范围,允许您的工作通过滚动方式可视化,如果您需要这个软件,可以下载它!

软件功能:

Luigi是一个Python(测试3.6,3.7,3.8,3.9)包,可帮助您为批处理作业构建复杂的管道。它处理依赖性分辨率,工作流管理,可视化,处理失败,命令行集成等。

Luigi的目的是解决与长期批次批次相关的所有管道问题。您想将许多任务链接到自动化,否则将发生故障。这些任务可以是任何东西,但通常是长期运行任务,例如Hadoop作业,将数据转储到数据库,或转储数据,运行机器学习算法,或其他任何其他操作。

还有其他包专注于较低级别的数据处理,例如蜂巢,猪或级联。 Luigi没有取代这些框架。相反,它可以帮助您组合许多任务,每个任务都可以是Hive查询,java中的Hadoop作业,Scala中的火花作业,或Python,Python代码段,从数据库传输表或其他任何其他任务。很容易建立一个长期运行管道,包含数千任务,需要几天或几周才能完成。 Luigi负责许多工作流管理,因此您可以专注于任务本身及其依赖项。

您可以构建任何必需的任务,但Luigi还附带包含多个常用任务模板的工具箱。它包括在Hadoop和Hive和Pig工作中运行Python MapReduck作业的支持。它还具有HDFS文件系统抽象和本地文件,以确保所有文件系统操作都是原子。这很重要,因为这意味着您的数据管道在包括部分数据的状态下不会崩溃。

官方教程:

执行模型

Luig有一个非常简单的执行和触发模型。

没有执行工人和任务的最重要方面。运行Luigi Workflow时,员工将计划所有任务并在此过程中执行这些任务。

这个程序的优势在于,因为在过程中执行所有执行,它很容易调试。这也使部署成为非事件。在开发过程中,您通常可以从命令行运行Luigi工作流程,并且在部署时,您可以使用Crontab或任何其他调度程序触发它。

缺点是Luigi不会免费提供可扩展性。事实上,在开始数千个任务之前,这不是问题。

Luigi自动化并安排这些工作流不是吗?在某种程度上。 Luigi可以帮助您对任务的依赖项进行编码和创建链。此外,Luigi的调度程序确保了依赖关系图的集中视图,并且在多个工人的同时不执行相同的作业。

调度程序客户端仅在允许运行()单线程中央调度程序的情况下启动任务。由于任务数量通常是罕见的(与任务处理的PB数据相比),我们可以提供简单的集中

服务器便利性。

Luigi

触发任务

Luigi不包括自己的触发器,因此您必须实际触发外部调度程序(例如CRONTAB)中的工作流程。

在实践中,这不是一个重要的障碍,因为Luigi避免了通常由它引起的混乱。例如,安排复杂的工作流程非常简单。 CRONTAB。

未来,Luigi可以实施他的触发器。可以避免的CRONTAB(或任何外部触发机制)有点尴尬。

例如,如果您每天都有外部数据转储,则触发示例,并且您的工作流程取决于此,请写出依赖于此数据转储的工作流程。然后,CRONTAB可以在一分钟内触发此工作流程以检查数据是否到达。如果是,它将运行完整的依赖图。

Luigi

在你的Cronline中,你会遇到类似的

30 0 * * * my-user luigi runall --module my_tasks

即使在多台计算机之间,您也可以从CRONTAB触发任何数量的触发器,因为中央调度程序将确保每个聚合任务同时启动。请注意,这可能意味着可以运行多个任务,因为有一个具有不同参数的示例,这可以提供某种形式的并行化(例如,AggregationTask(2013-01-09)可以在并行聚合中运行(2013- 01-08))。

当然,某些任务类型(例如HadoopJobTask)可以将执行传输到其他地方,而是根据每个任务的定义。

Luigi模式

代码重用

Luigi的一个优点是,很容易依赖于其他存储库中定义的任务。在执行路径中也是非常简单的,其中任务的输出可能成为许多其他任务的输入。

目前,不支持“中间”输出的语义,这意味着所有输出都将无限期保留。这样的优点是,如果您尝试运行x-> y和y崩溃,则可以使用以前构建的x恢复。缺点是文件系统上会有许多中间结果。有用模式是将这些文件放在特殊目录中,并进行某些常规垃圾收集清洁。

触发很多任务

方便模式是几个依赖项结束时的虚拟任务,因此您可以通过在命令行中仅指定一个任务来触发多个管道,类似于make。

Luigi

这个简单的任务本身不会做任何事情,但会有许多其他任务。每次打电话时,Luigi都会尽可能多的暂停(具有所有依赖项的所有作品)。

您需要使用WrapperTask而不是通常的任务类,因为此作业不会产生其自己的任何输出,因此有必要指示完成的时间。这样的任务仅用于包装其他任务,并且根据定义,如果存在所有任务,则完成任务。

触发定期任务

常见要求是每晚日报(或其他报告)。有时,由于各种原因,任务将继续崩溃或缺乏超过一天所需的依赖,这将导致日期缺乏可交付成果。该死。

为了确保上述AllReports任务最终每天完成一次(日期参数的值),例如需要。添加循环以在self.date之前生成几天的依赖项。然后,只要Luigi不断被调用,在解决间歇性问题之后,工作量的量将更好地赶上。

Luigi实际上具有可重复使用的工具来实现这一目标,称为范围内(Resp.RangeHourlyBase)。普通话

luigi --module all_reports rangeyailybase  -  allreports  -  artart 2015-01-01

从2015年1月1日起,CRONTAB中的代码将很容易地避免差距。注意:从2015年1月1日到当前的时间,它不会循环播放,但默认情况下是3个月前 - 查看范围内显示该文档并更多的调整行为。另请参阅下面监控。

有效地触发重复性任务

如上所述,RangedailyBase被命名为,因为存在更有效的子类范阶范围(Resp.rangehously),这是针对数百个任务类定制的,这是多年的连续的。同时调度同时需求(这将导致使用心房循环方法的冗余完整性检查和调度程序过载)。用法:

luigi --module all_reports rangeaily  -  allreports  -  artart 2015-01-01

它具有相同的旋钮作为范围内的旋钮,但还有一些要求。也就是说,此任务必须实现有效的Bulk_Complete方法,或者您必须将输出写入文件系统目标,并且始终在文件路径中表示日期参数值。

回填任务

这也是一个常见的用例,有时你已经调整了现有的重复任务代码,并且出于某种原因或其他原因,希望将其重新计算时间分离为日期。最多的co.

持注是使用上述范围工具,只需指定开始(包括)和停止参数:

luigi --module all_reports范围范围 -  AllReportsv2  -  Start 2014-10-31  -  Strotop 2014-12-25

处理多个参数值作为单个运行

有时,运行多个家庭作业作为批量来运行比单独的个别作业更快。在这种情况下,您可以使用Batch_Method来标记构造函数中的某些参数来告诉员工如何组合多个值。常见的实现方法只是运行最大值。这对于运行较新数据时涵盖旧数据的任务是有用的。您可以通过将Batch_Method设置为Max来执行此操作,如下所示:

Luigi

令人兴奋的是,如果您发送多个调度程序,它可以组合它们并返回一个。因此,如果a(日期= 2016-07-28),a(日期= 2016-07-29)和a(日期= 2016-07-30)已准备好运行,您将开始运行a(日期= 2016- 07 -30)。虽然这是运行的,但调度程序将显示一个(日期= 2016-07-28),a(日期= 2016-07-29)批量运行,A(日期= 2016-07-30)正在运行。当运行(日期= 2016-07-30)时,它失败或完成,其他两个任务将更新到相同的状态。

如果要限制批量生产的数量,请刚刚设置MAX_BATCH_SIZE。所以,如果你有

Luigi

然后调度程序将在一起最多需要10个作业。您可能不想使用Max Batch方法执行此操作,但如果使用其他方法,则可能会提供帮助。您可以使用任何方式使用参数值列表并返回单个参数值。

如果您有两个最大的批处理参数,将获得两个参数的最大值。如果您的参数没有批处理方法,则它们将被分开归纳。所以,如果你有类似的话

Luigi

您创建了一项任务,您将获得批处理和。 a(p1 = 1,p2 = 2,p3 = 0)a(p1 = 2,p2 = 3,p3 = 0)a(p1 = 3,p2 = 4,p3 = 1)a(p1 = 2,p2 = 3,p3 = 0)a(p1 = 3,p2 = 4,p3 = 1)

请注意,批处理任务不遵循[资源],只有最终运行任务只使用资源。调度程序仅检查每个任务是否在批处理每个任务之前具有足够的资源。

定期涵盖相同数据源的任务

如果每个运行覆盖相同的数据源,则需要确保不能同时运行批处理。您可以通过将batch_method设置为max来轻松执行此操作,并设置唯一的资源:

Luigi

现在,如果您有多个任务,例如(日期= 2016-06-01),a(日期= 2016-06-02),a(日期= 2016-06-03),调度只会让您运行对于一个可用于标记Batch_running的下层。如果有一个新任务,并且其他任务正在运行,请使用唯一的资源将阻止多个任务同时编写相同的位置。

避免同时编写单个文件

从多个任务更新单个文件几乎总是一个坏主意,并且您必须非常确定在执行此操作之前没有其他好的解决方案。但是,如果没有其他选择,您至少可以确保没有两个任务来尝试_simultaneosly_写入文件。

通过将“资源”转换为Python属性,它可以返回任务参数或其他动态属性的值:

Luigi

由于资源的使用受到限制,默认情况下,如果它们具有相同的重要_file_name属性,则不会运行两个任务A的实例。

减少正在运行的资源

在调度时,Luigi调度程序需要知道任务运行后可能具有的最大资源消耗。然而,对于一些任务,减少其操作方法内的两个步骤之间消耗的资源量可能是有益的(例如,在大量计算之后)。在这种情况下,可以安排等待等待特定资源的其他任务。

Luigi

监控任务管道

Luigi有一些现有方法,而Luigi.Notifications可以在任务崩溃时接收通知。电子邮件是最常见的方式。

上述重复任务的范围工具不仅可以实现可靠的调度,还可以用于设置延迟监视器的事件。这样,当您长时间缺少输入数据或需要其他关注时,您可以执行警报。

原子写问题

Luigi管道经常提交的普遍错误是将数据部分写入最终目的地,而不是原子土地。问题是因为Luigi的完成检查是天真Luigi.target.target.exists()。在许多情况下,这意味着它意味着磁盘上有一个文件夹。在我们的部分写入数据期间,根据输出执行的任务将考虑其输入已完成。它可能会造成破坏性的影响,例如感恩节。

您可以解释存储在本地磁盘上的数据,并通过运行命令来解释概念:

Luigi

如前所述,问题是在一段时间内只有一些数据,但我们认为数据是完整的(),因为输出文件夹已存在。这是一个强大的版本:

Luigi

实际上,一个好的方法不是那么微不足道。它涉及提供唯一的目录名称和相当复杂的MV线,它是MV需要这些,因为我们不希望MV将目录移动到潜在的现有目录。例如,在特殊情况下,当中央锁定失败并且在某种程度上运行两次,目录可能已经存在了。最后,在从未超过文件移动的特殊情况下,可能需要删除从未使用过的临时目录。

请注意,这是它存储在本地磁盘上的示例。但是,对于每个存储(硬盘文件,HDFS文件,数据库表等),此过程会有所不同。但每个Luigi用户都需要这种复杂性吗?不,幸运的是,Luigi开发人员已经意识到这些,Luigi带来了许多内置解决方案。如果要处理文件系统(FileSystemtarget),则应考虑使用临时_path()。对于其他目标,应该确保将最终输出目录的写入模式为原子。

向任务发送消息

中央调度程序可以向特定任务发送消息。运行任务时,它可以访问存储传入消息的多步化.queue对象。您可以实现自定义行为响应和响应消息:

Luigi

可以直接从调度程序UI发送消息,该调度器UI还会显示响应(如果有的话)。请注意,此功能仅在配置调度程序发送消息时可用(请参阅[调度程序]),并且任务配置为接受消息。

Luigi

软件特色:

可视化器页面

Luigi Server还有一个Web界面,因此您可以在所有任务中搜索和过滤。

Luigi

依赖图形

让您知道Luigi的功能,这是我们在生产中运行的内容的屏幕截图。使用Luigi的可视化工具,我们可以很好地看到工作流的依赖。每个节点代表必须运行的任务。绿色使命已经完成,黄色任务尚未运行。这些任务中的大多数都是Hadoop作业,但有些东西可以在本地运行并构建数据文件。

Luigi

从概念上,Luigi类似于GNU制作,您可以在其中有一些任务,这些任务可能取决于其他任务。与Oozie和Azkaban也有一些相似之处。主要区别是Luigi不仅为Hadoop而构建,而且易于扩展到其他类型的任务。

Luigi的所有内容都在Python中。而不是XML配置或类似的外部数据文件,在指定的Python中指定了依赖性映射。这使得构建任务的复杂依赖性图更容易,其中依赖关系可能涉及到与同一任务的日期代数或递归引用其他版本。但是,工作流可能触发Python以外的事件,例如运行猪脚本或SCP文件。

精品推荐
猜你喜欢
用户评论