Flink:默认 Partitioning/Shuffling Strategy/Functions
Flink: Default Partitioning/Shuffling Strategy/Functions
Flink 默认对 reducing/grouping 的 DataSet(例如 groupBy 或 reduce 函数)使用哪些策略(散列、排序)? Flink 使用了哪些 API-functions for
- 在洗牌步骤和
期间进行分区
- 对分区内的元素进行排序
默认?
默认情况下,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
Flink 默认对 reducing/grouping 的 DataSet(例如 groupBy 或 reduce 函数)使用哪些策略(散列、排序)? Flink 使用了哪些 API-functions for
- 在洗牌步骤和 期间进行分区
- 对分区内的元素进行排序
默认?
默认情况下,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