Flink: разделение по умолчанию / стратегия перестановки / функции
Какие стратегии (хеширование, сортировка) по умолчанию использует Flink для сокращения / группировки наборов данных (например, groupBy или сокращение функций)? И какие API-функции использует Flink для
- разбиение во время шаффл-шага и
- сортировка элементов внутри раздела
по умолчанию?
1 ответ
По умолчанию Flink использует хеш-разбиение и сортировку для выполнения функций Reduce и GroupReduce. В случае снижения или комбинирования 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