数据流触发器概述
数据流触发器(Dataflow triggers)是事件框架用来启动任务以响应管道中发生的事件的指令。例如,当pipeline将文件写入HDFS后,可以使用数据流触发器启动MapReduce作业。或者,可以使用数据流触发器在JDBC Query Consumer origin处理完所有可用数据之后停止管道。
事件框架由以下组件组成:
event generation(事件产生)
事件框架生成与管道相关的事件和与阶段相关的事件。事件框架仅在管道启动和停止时才生成管道事件。当特定的阶段相关动作发生时,事件框架生成阶段事件。生成事件的操作因阶段而异,并且与阶段处理数据的方式有关。
例如,Hive Metastore destination 更新了Hive Metastore,所以每次修改Metastore时都会生成事件。相反,Hadoop FS destination 将文件写入HDFS,所以每次关闭文件时都会产生事件。
事件产生事件记录(event records)。与管道相关的事件记录被立即传递给指定的事件使用者。与阶段相关的事件记录通过事件流中的管道传递。
task execution(任务执行)
要触发一个任务,需要一个executor(执行器)。executor阶段执行SDC或外部系统中的任务。每次执行器接收到一个事件,它就执行指定的任务。
例如,Hive Query执行器每次接收到事件都会运行用户定义的Hive或Impala查询,MapReduce执行器在接收到事件时触发MapReduce作业。在Data Collector中,Pipeline Finisher executor在接收到事件时停止管道,将管道转换为完成状态。
event storage(事件存储)
要存储事件信息,请将事件传递到destination。destination将事件记录写入destination系统,就像其他数据一样。
例如,您可以存储事件记录,以保留管道源读取的文件的审计跟踪。
管道事件
事件框架在管道生命周期中的特定点在Data Collector独立管道中生成管道事件。可以配置管道属性,将每个事件传递给执行程序或另一个管道进行更复杂的处理。
事件框架生成以下与管道相关的事件:
Pipeline Start
管道启动事件是在管道初始化时生成的,即在管道启动之后,在各个阶段初始化之前。这可以允许执行程序在阶段初始化之前有时间执行任务。
管道在继续阶段初始化之前等待执行器完成任务。例如,如果您将JDBC Query执行器配置为在管道开始之前truncate一个表,那么管道将等待任务完成后才能处理数据。
MapReduce执行器和Spark执行器启动作业,而不是等待提交的作业完成。当您使用这些执行器之一时,管道只等待作业成功提交,然后继续进行阶段初始化。
如果executor无法处理该事件,例如Hive Query executor无法执行指定的查询或查询失败,则初始化阶段失败,管道不会启动。相反,管道将转换到故障状态。
Pipeline Stop
当管道手动、编程或由于失败而停止时,将生成管道停止事件。停止事件是在所有阶段完成处理和清理临时资源(如删除临时文件)之后生成的。这允许执行程序在管道处理完成后,在管道完全停止之前执行任务。
与启动事件使用者类似,使用事件的执行器的行为决定管道是否在允许管道停止之前等待执行器任务完成。此外,如果管道停止事件的处理由于任何原因失败,即使数据处理成功,管道也会转换为失败状态。
管道事件与阶段事件的区别如下:
-
虚拟处理——与阶段事件不同,管道事件不是通过在画布中配置的阶段来处理的。它们被传递给您在管道属性中配置的事件使用者。
事件使用者不会显示在管道的画布中。因此,管道事件也不能在数据预览或管道监控中可视化。
-
一次性事件——您只能为管道属性中的每种事件类型配置一个事件消费者:一个用于启动事件,一个用于停止事件。
必要时,可以将管道事件传递到另一个管道。在事件消费管道中,您可以包含更复杂处理所需的任意多个阶段。
有关描述使用管道事件的两种方法的解决方案,请参见将数据从关系源加载到Hadoop。
管道事件的用法
您可以在独立的管道中配置管道事件。在配置管道事件时,可以将其配置为由执行程序或另一个管道使用。
当执行器可以执行您需要的所有任务时,将事件传递给执行器。可以为每种事件类型配置一个执行器。
当您需要在消费管道中执行更复杂的任务时,将事件传递给另一个管道,例如将事件传递给多个执行器或传递给一个执行器和存储目的地。
-
事件传递给Executor
可以配置管道将每种事件类型传递到执行器阶段。这允许您在管道启动或停止时触发任务。您可以分别为每种事件类型配置行为。您可以丢弃您不想使用的任何事件。
注意:如果指定的执行器不能处理事件,例如Shell执行器执行脚本失败,管道就会转换到失败状态。
要将管道事件传递给执行器,请执行以下步骤:
-
在管道属性中,选择要使用该事件的执行程序。
-
在管道属性中,配置执行器以执行任务。
例子
假设您想在管道启动时发送电子邮件。首先,将管道配置为为管道启动事件使用Email执行器。因为你不需要Stop事件,你可以简单地使用默认的丢弃(Discard)选项:
然后,同样在管道属性中,配置电子邮件执行程序。您可以设置邮件发送的条件。如果没有设置条件,那么executor在每次接收到事件时都会发送电子邮件:
-
事件传递给另一个pipeline
未完待续。。。。。。
点击公众号底部《实时数仓》菜单,查看历史文章