Flink:默认分区/改组策略/功能

lar*_*ary 3 apache-flink

Flink默认使用哪些策略(散列,排序)对数据集进行缩小/分组(例如groupBy或reduce函数)?Flink使用哪些API函数

  1. 在洗牌步骤中进行分区并
  2. 对分区中的元素进行排序

默认?

Fab*_*ske 5

默认情况下,Flink使用哈希分区和排序来执行reduce和groupReduce函数。在reduce或可组合groupReduce的情况下,还使用基于排序的策略来执行组合器。目前正在对基于散列的合并策略进行代码审查,并将很快推出。请注意,Flink默认情况下使用流水线混洗。这意味着产生发送方任务和接收方分类器是同时执行的。

您可以按以下不同方式对数据集进行分区:

val data: DataSet[(String, Int)] = ...
data.partitionByHash(0) // hash-partitions on String field
data.partitionByRange(1) // range-partitions on Int field (w/ online sampling overhead)
data.partitionCustom(new MyPartitioner(), 0) // use a custom function to partition on String field
Run Code Online (Sandbox Code Playgroud)

您可以按以下方式在本地对分区进行排序:

val data: DataSet[(String, Int)] = ...
data.sortPartition(0, Order.ASCENDING) // sorts partitions on String field in ascending order
Run Code Online (Sandbox Code Playgroud)

  • 不知道是否有专门的博客文章关于流水线洗牌的行为。Dongwon Kim在去年的Flink Forward上发表了一篇演讲,讨论并分析了流水式与批量洗牌。视频和幻灯片位于[此处](http://2015.flink-forward.org/?post_type=session)。此[blog post](http://flink.apache.org/news/2015/05/11/Juggling-with-Bits-and-Bytes.html)也描述了Flink的内存管理和排序实现。 (2认同)