Alink教程(Python版)
该文档涉及的组件

第2.5节 触发Alink任务的执行


Alink的批式任务/流式任务本质上是通过触发Flink的ExecutionEnvironment与StreamExecutionEnvironment的execute方法来执行的。为了调用起来更简练、方便,Alink包装了如下两个方法:

  • BatchOperator.execute()触发批式任务的执行。
  • StreamOperator.execute()触发流式任务的执行。

在实际使用中,经常需要触发一些小的批式任务,获取执行的结果。Flink的DataSet提供了print方法、collect方法和count方法,Alink的批式组件也提供了相应的方法。这些方法为用户了解中间过程的数据提供了便利,但是其会被多次触发执行,各个任务之间会有许多重复执行部分。尤其当数据量较大时,每个任务的执行时间较长,而重复计算会消耗大量的计算资源。针对这样的问题,Alink引入了Lazy方式,并相应地定义了lazyPrint()、lazyCollect()等方法。

Lazy方式

“Lazy”的概念与“Eager”的概念相对,在许多开发语言中都会应用。Lazy方式被称作懒操作或者延迟操作方式,Eager方式被称作急操作或者实时操作方式。Eager方式与Lazy方式的区别在于用户发出数据请求(显示、获取、加载等)时,是立即行动,还是可以慢一些。

对于Alink的批式处理场景,我们在执行任务时,需要看到原始数据中间数据,以及统计、评估指标等。若每一个任务均采用Eager方式,则每次数据请求都会触发一个Flink任务,而且由于Flink机制的原因,后续的Flink任务还会重复执行前序任务的部分计算。如果采用Lazy式,个任务并不急于显示,可以通过一个Flink任务完成整个流程,在任务结束后,再返回各项数据从数据获取速度上看采用Lazy方式比较慢有延迟但是从整体的计算时间和资源的消耗方面看采用Lazy方式更优。

Flink提供三种方执行批式任务:printcollectexecute。它们都是Eager方式的比如,运行到print方法,立即会启动Flink任务进行执行,并将结果打印出来。Alink的批式组件形如***BatchOp提供了打印的方法;统计和评估类组件提供了collect方法,用户可以立即获取统计和评估结果,这些方法的命名规则为collect+结果名称,比如collectSummary。执行批式组件可以使用BatchOperator.execute()

AlinkLazy方式需要在操作前加上lazy”前缀,主要有如下两类操作:

    • 采用Lazy方式打印数据、统计结果或模型信息的操作,方法定义为lazyPrint***()。
    • 采用Lazy方式获取结果的操作,方法定义为lazyCollect***()。

下图详细列举了在各个使用场景下对应的方法。