在之前的文章中,留有很多的坑,本来是想如果有时间一点点的展开细说,但是现实的情况是时间是有限的。趁着现在也许还记得当时的思考点,就来从宏观上简单的回答下这些问题吧!
1. 既然是Sort-based Shuffle 那么Shuffle后的数据是否是有序的?
这个不一定了。在Sort-based Shuffle 中,数据会被划分为多个分区(Partitions),每个分区内的数据会被排序。
对于整体数据集合来说,分区间的顺序是无法保证的。也就是说,不同分区之间的数据顺序是无法确定的。具体哪个分区先处理完、先输出的顺序可能会发生变化。
总结起来,Sort-based Shuffle 保证了每个分区内的数据有序,但不保证整体数据集合的顺序。
2. Remote Shuffle Service 和 Push-based Shuffle 他们的优劣分别是什么?
Remote Shuffle Service 和 Push-based Shuffle 都是用于大规模数据处理中的 Shuffle 方式,但在实现上其原理是不同的。Remote Shuffle Service 属于集中式的数据管理,Push-based Shuffle需要更好的硬件资源和更复杂的处理逻辑。
Remote Shuffle Service 的优势:
1.数据集中管理:RSS可以作为专门的服务来处理 Shuffle 操作,将数据集中管理,简化了计算框架的复杂性,可以说集中式的数据管理,使得RSS可以承受体量更大的数据量。
2.硬件资源分配灵活:通过使用 RSS,可以将 Shuffle 过程与计算节点分离,灵活地进行硬件资源的分配,提高系统的扩展性和资源利用率,例如可以分配高性能的机器给到Shuffle计算上。
3.支持更复杂的任务:RSS可以有效处理大规模的数据和复杂的计算任务,适合在集群环境中使用。
4.网络带宽利用率高:RSS可以对数据进行高效的分发,利用网络带宽实现快速的数据传输,并提高整体的计算效率。
Remote Shuffle Service 的劣势:
1.需要额外的服务:使用 RSS 需要引入额外的服务组件,增加了系统的复杂性和维护成本。
2.对网络带宽要求较高:RSS依赖于网络传输大量的数据,对网络带宽要求较高,可能会对集群的整体性能产生影响,这个是优势也是劣势。
3.不适合小shuffle场景。
Push-based Shuffle 的优势:
1.数据传输延迟低:PBS通过直接推送数据到相应的节点,减少了数据传输的中间环节,降低了传输延迟,提高了计算速度。
2.网络传输效率高:PBS 避免了额外的排序操作,将数据直接发送到相应的节点,减少了网络传输的数据量,提高了传输效率。
3.内存占用更小:PBS在数据推送过程中,可以按需释放内存,减少了对内存的占用,适合处理大量的数据。
4.PBS不仅适用于大shuffle的场景,对于大量小shuffle文件,这种严重影响磁盘IO性能的情况下, 也有很好的性能提升。
Push-based Shuffle 的劣势:
1.需要更多的处理逻辑:Push-based Shuffle 往往需要计算节点进行更多的处理逻辑,包括接收和处理推送的数据,可能会增加计算节点的负载。
2.需要适当的硬件资源:Push-based Shuffle 需要有足够的网络带宽和计算资源来处理大规模数据的推送,否则可能会导致性能下降。
3.对于特别大的Shuffle场景,有可能会撑不住。
对于PBS的实现细节和介绍可以参考:
[SPARK][CORE] 面试问题之谈一谈Push-based shuffle
[SPARK][CORE] 面试问题之 3.2新的特性Push-based Shuffle源码解析