参与者:Ayush Saxena、郑振宇、刘胜
背景:2019年,本团队在 Apache Hadoop 开源社区上游完成了 ARM 平台适配并使能了 Hadoop ARM CI 以便保证 Hadoop 在后续的版本开发中均保证 ARM 平台适配,并且团队成员正在推动 Hadoop 开源社区发布 ARM 平台的软件包,以便用户可以直接下载使用。在 ARM 的基本适配工作完成后,性能调优成了我们下一步的工作重心。
近期,华为计算开源生态部技术团队进行了 Apache Hadoop 在 ARM 及 X86 平台上的初步性能比拼测试及简要分析,可以为关心 ARM 数据中心大数据场景的读者提供一些参考。
测试环境及工具
本次测试使用华为云,我们在华为云上搭建了两套三节点测试集群(一套ARM,一套X86),个节点均为8vCPU 16GB RAM,但在CPU指标上,由于硬件限制,X86集群使用 Intel Xeon Gold 6266C
主频为 3.0 GHz
而 ARM 节点使用 Huawei Kunpeng 920
主频为 2.6 GHz
,但从成本角度来看,ARM 节点的单价仅为 X86 节点单价的 70%,在参考性能比拼结果时,需要考虑上述指标。硬盘方面,我们使用了IOPS上限4,200,IOPS突发上限5,000的500G硬盘作为系统盘;网络方面,为虚拟机配置了5Mbit/s的带宽。
本次测试分别对上述Hadoop集群进行了业界常用的TeraSort
测试,结合Hadoop支持的各种压缩算法,对50GB数据进行TeraSort
对比测试,并对测试结果进行简要分析。
测试数据及简要分析
首先,需要再次明确的是,本次测试所使用的CPU在主频方面并不相同,大约有13%的性能差距(2.6G Hz vs 3.0GHz),我们可以对性能指标乘以一定的系数来进行平衡,但由于ARMv8以及X86指令集自身的不同,简单的系数并不能完全反映出实际情况。这里我们先通过简单系数的方式来进行初步的理论分析,来看一看Apache Hadoop在ARM运行在ARM数据中心上是否与运行在X86数据中心上有可比性,为读者提供一定的参考;后面我们也会继续探索更为合理和精确的对比方式。
从上面得测试数据可以发现,ARM平台上的表现整体比X86稍差,性能差距大约在10%-20%之间;将我们上面提到的CPU主频大约有13%的性能差距考虑在内,ARM平台上的整体表现与X86平台上的性能表现之间的差距大约在10%以内。
针对这一情况,我们进行了更进一步的分析,分析结果表明,ARM平台在Mapper阶段(包括QuickSort和压缩)表现的较X86平台要差;而在Reducer阶段(包括MergeSort和解压缩)ARM的表现较X86平台要更好;通过优化Mapper阶段的实现,ARM平台的性能有可能超越X86平台。在压缩环节,ARM耗时较X86落后的比较多,同时ZSTD
是当前在ARM平台上表现的最好的压缩算法,与X86之间的性能差距最小。
除了Hadoop本身代码上的区别,我们还发现在ARM平台和X86平台上启动JVM的性能有所差距,这里我们单独编写了一份脚本来进行测试,在这个脚本中我们将启动Mapper
和Reducer
各1500个,然后退出,用于观察启动JVM的性能差距:
从结果可以看出,在这项对比中,ARM与X86相比也有15%-18%的性能差距,同样,CPU主频是否对该时间有影响并且有多大的影响也是需要进行进一步分析的。但是,从这个测试我们可以得到一个结论,那就是如果可以重用JVM,那么可以一定程度上缩小ARM和X86之间的性能差距。
总结及后续工作
- 总体来说,Apache Hadoop运行在ARM数据中心上与运行在X86数据中心上在性能上约有10%到20%的性能差距,将CPU主频差别考虑进去后,ARM与X86的整体性能差距基本在10%以内。
- ARM在Mapper阶段性能较X86差,但是在Reducer阶段较X86性能好;更进一步来看,ARM在Mapper阶段的数据压缩阶段性能与X86相比差距较为明显,其中ZSTD的差距最小。
- ARM和X86目前在启动JVM方面约有15%-18%的性能差距,如果可以在MR中重用JVM,那么可以一定程度上缩小ARM和X86之间的性能差距。
- 从性价比角度考虑,当前测试所使用的ARM集群成本仅为X86集群成本的70%,但性能差距只有10%-20%。可以预见,同等成本的ARM集群将能够提供与X86集群同等性能、甚至更好的性能,因此ARM数据中心在大数据领域还是十分有实用价值的。
后续,我们将持续进行更为细致的测试,并且根据测试结果推动社区上游进行有针对性的改进,逐步缩小ARM与X86之间的性能差距。