Flink运行时之批处理程序生成计划

批处理程序生成计划

DataSet API所编写的批处理程序跟DataStream API所编写的流处理程序在生成作业图(JobGraph)之前的实现差别很大。流处理程序是生成流图(StreamGraph),而批处理程序是生成计划(Plan)并由优化器对其进行优化并生成优化后的计划(OptimizedPlan)。

Read More

Flink批处理优化器之InterestingProperties

Interesting Properties(以下简称IP)用来表述在对生成的计划进行分析时一些可能对优化产生重要影响的属性。网络上关于IP的资料并不多,但在Flink的论文里多次出现,Flink在它的一些论文中声明其借鉴自《Goetz Graefe. The Volcano Optimizer Generator- Extensibility and Efficient Search》(以下简称Volcano或Volcano的论文)和它的改进版《Goetz Graefe. The cascades framework for query optimization》(以下简称cascades或cascades的论文)中的优化技术。但是在另一些论文中声明其借鉴自《Pat Selinger, Access Path Selection in a Relational Database Management System》(以下简称System R的优化器论文)这一论文中的“Interesting Ordering”。其实,在这三篇论文中IP只在cascades的论文中出现过一次。

Read More

Flink运行时之合久必分的特定任务

合久必分的特定任务

前面我们谈到了TaskManager对每个Task实例会启动一个独立的线程来执行。在分析线程执行的核心代码时,我们看到最终执行的是AbstractInvokable这样执行体的invoke方法。所谓合久必分,鉴于流处理任务跟批处理任务执行模式上存在巨大的差异,在对AbstractInvokable的实现时,它们将会走向两个不同的分支。

Read More

Flink运行时之结果分区消费端

task-exchange-dataflow-for-consumer

结果分区消费端

在前一篇,我们讲解了生产者分区,生产者分区是生产者任务生产中间结果数据的过程。消费者任务在获得结果分区可用的通知之后,会发起对数据的请求。我们仍然以生产者分区的例子作为假设,其在消费端示意图如下:

Read More

Flink运行时之生产端结果分区

生产端结果分区

生产者结果分区是生产端任务所产生的结果。以一个简单的MapReduce程序为例,从静态的角度来看,生产端的算子(Map)跟消费端的算子(Reduce),两者之间交换数据通过中间结果集(IntermediateResult)。形如下图:

Read More