fro*_*tin 5 apache partitioning bigdata apache-flink flink-streaming
我正在研究我的学士学位的最终项目,这是关于Apache Spark Streaming和Apache Flink(仅限流媒体)之间的比较,我刚刚在Flink的文档中找到了"物理分区".问题是,在本文档中,它并没有很好地解释这两个转换是如何工作的.直接来自文档:
shuffle():根据均匀分布随机分区元素.
rebalance():分区元素循环,每个分区创建相等的负载.在存在数据偏斜时用于性能优化.
资料来源:https://ci.apache.org/projects/flink/flink-docs-release-1.2/dev/datastream_api.html#physical-partitioning
两者都是自动完成的,所以我理解的是它们都是shuffle()均匀地重新分配(>均匀分布和rebalance()>循环)以及随机数据.然后我推断出rebalance()以更好的方式分配数据("每个分区的负载相等"),因此任务必须处理相同数量的数据,但shuffle()可能会创建越来越大的分区.于是,在这种情况下,可能你更喜欢使用shuffle()比rebalance()?
我想到的唯一事情是可能rebalance()需要一些处理时间,因此在某些情况下,它可能会花费更多时间来进行重新平衡,而不是在未来转换中改进的时间.
我一直在寻找这个,没有人谈过这个,只在Flink的邮件列表中,但他们没有解释如何shuffle()工作.
Til*_*ann 10
正如文档所述,shuffle将随机分发数据,而rebalance将以循环方式分发数据.后者更有效,因为您不必计算随机数.而且,根据随机性,你最终可能会得到某种不那么均匀的分布.
另一方面,rebalance将始终开始将第一个元素发送到第一个通道.因此,如果您只有少量元素(比子任务更少的元素),那么只有一些子任务将接收元素,因为您总是开始将第一个元素发送到第一个子任务.在流式传输的情况下,这最终无关紧要,因为你通常有一个无界的输入流.
两种方法存在的实际原因是历史原因.shuffle首先介绍.为了使批处理流API更加相似,rebalance然后介绍了.
| 归档时间: |
|
| 查看次数: |
2455 次 |
| 最近记录: |