Shuffle阶段,将按照Range大小排序的Range File 文件发送给对应的Sort程序。
Sort阶段,Sort任务等待所需的数据都到齐了,就启动基于基数排序的排序操作,将排序结果写入磁盘。
Partition和Sort阶段是并行执行的,待Sort完成后,输出多个排序文件,由于Shuffle的时候已经按照Range大小进行了排序,最终输出的排序文件在全局是有序的。
4.前面您提到在软件算法方面也做了不少优化,能否具体介绍一下腾讯云做了哪些努力吗?
蒋杰:参加这次比赛,我们在软件算法上的优化主要有以下三点:
(1)更强大的调度能力。此次比赛,腾讯云参加了GraySort和MinuteSort两个大项的比赛,GraySort比拼的是完成100TB数据排序的耗时,主要评测的是系统对大规模数据的处理能力,MinuteSort比拼的是1分钟内的排序数量,主要评测的是系统的效率。为了在1分钟内完成尽可能多的数据排序,系统任务调度的开销就变得不容忽视,调度效率显得尤为关键,在系统上消耗的时间越少,越利于比赛成绩的提高,得益于平台强大的调度能力,我们在1分钟内完成了55.3TB数据的排序,是之前最好纪录的5倍。我们的调度系统曾做了大量的优化,在腾讯的内部系统上,每天调度达2亿次,在海量系统上得以验证。
(2)内存存储的最大化利用。在排序过程中的中间数据,尽量存储在内存中,当内存中数据达到一定阈值,快要占满整个内存空间的时候,才会启动向磁盘中写入数据,最大化利用内存存储。而我们的系统具备调度感知的能力,当系统内存充足的时候,会让该环节的计算任务完全在内存中完成计算,无需落地到磁盘,极大的提升了系统的处理能力。
(3)并行操作和IO优化。在Partition阶段和Sort阶段,我们都采取了多任务的并行操作。在这里我们会根据机器和网络的性能来调整机器上的并发数,来提高整个系统的运行效率。为了提升网络的传输效率,优化了整个网络传输系统。在网络的传输中,过小的分片数据会带来额外的控制信息的传输,造成网络带宽实际上并不能完全跑满。对此我们采用大数据块的传输,在发送端对小的数据片进行合并,在接收端,对收到的数据包进行聚合后再传递给上层协议栈,来提高整个系统的数据传送能力,从而榨干这些机器间的网络带宽,通过优化,集群的整体吞吐可以得到极大的提升。