Apache flink Flink:默认分区/洗牌策略/函数

Apache flink Flink:默认分区/洗牌策略/函数,apache-flink,Apache Flink,默认情况下,Flink使用哪些策略(哈希、排序)来减少/分组数据集(例如groupBy或reduce函数)?Flink使用哪些API函数 在洗牌步骤和 对分区内的元素进行排序 默认情况下?默认情况下,Flink使用哈希分区和排序来执行reduce和groupReduce函数。在reduce或可组合groupReduce的情况下,组合器也使用基于排序的策略执行。基于散列的合并策略目前正在代码审查中,很快就会提供。 请注意,Flink默认使用流水线洗牌。这意味着生产发送方任务和接收方分拣机同时执行

默认情况下,Flink使用哪些策略(哈希、排序)来减少/分组数据集(例如groupBy或reduce函数)?Flink使用哪些API函数

  • 在洗牌步骤和
  • 对分区内的元素进行排序

  • 默认情况下?

    默认情况下,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
    
    您可以按如下方式对分区进行本地排序:

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

    谢谢你的回答。你能推荐一篇博客文章或一个指向github上源代码的URL以获取更多信息吗?我正在寻找有关Flinks哈希分区/分区内排序行为的参考(源引用)。不确定是否有专门的关于流水线洗牌行为的博客文章。在去年的Flink Forward上,Dongwon Kim进行了一次演讲,讨论并分析了流水线与批量洗牌。视频和幻灯片是免费的。这篇文章描述了Flink的内存管理和排序实现,可能也会有所帮助。