第29卷第2期 2021年4月
Vol.29 No.2Apr. 2021
电脑与信息技术Computer and Information Technology
文章编号:1005-1228(2021)02-0079-03
通过HiBench 基准测试比较 Hadoop 与Spark 的性能
吴 岳
(国家林业和草原局林产工业规划设计院, 北京 100010)
摘 要:Hadoop MapReduce 和Apache Spark 都适用在大型集上以并行和分布式模式有效地处理大量数据。为了比较这两个框架的性能,作者使用HiBench 基准套件基于执行时间和内存消耗两个标准进行测试。测试结果表明,这些框架的性能根据用例实现的不同而有很大差异。从而可以得出结论:在一般情况下,Spark 能够比Hadoop 更有效地处理大量数据。但是,因为Spark 要将待处理数据加载到内存中,并在缓存中保留一段时间,所以Spark 需要更高的内存占用。
关键词:大数据;HiBench 基准;Hadoop;MapReduce;Spark 中图分类号:TP311.1 文献标识码:A
The Comparison of the Performance Between Hadoop and Spark
with HiBench Benchmarks
WU Yue
(National Administration of Glassland Forestry Forest Industry Planning and Design Institute, Beijing 100010, China)Abstract:Both Hadoop MapReduce and Apache spark can effectively process large amounts of data in parallel and distributed mode on large clusters. In order to compare the performance of the two frameworks, the author uses the Hibench benchmark suite to test based on two criteria: execution time and ram consumption. Test results show that the performance of these frameworks varies greatly according to the implementation of use cases. It can be concluded that spark can process a large amount of data more effectively than Hadoop in general. However, spark needs a higher memory consumption because it will load the pending data into memory and keep it in the cache for a period of time. Key words: big data; HiBench; hadoop; MapReduce; spark
收稿日期:2020-09-09
作者简介:吴岳(1983-),男,北京人,高级工程师,大学本科,主要研究领域:林业信息化、分布式计算和网络工程。
1 HADOOP 和SPARK 的差异
1.1 Hadoop 和Spark 中的Map 阶段
Hadoop 的Map 阶段的主要操作是从键值对中返回一组新的键值对集合,并将输出将数据储在分布式文件系统HDFS(环形缓冲区)中。如果缓冲区数据量达到80%以上,Map 函数将数据分成多个小数据块,并将缓冲区数据写入磁盘中。将所有数据文件进行合并排序后创建成单个大文件。之后,将此文件依次发送给Combiner 函数和Partitioner 函数,并将这两个函数的结果存储在数据库中[1]。
在Spark 中,每个任务在完成后都会直接将其输出写入磁盘。它依赖于操作系统在磁盘高速缓存中建
立的缓冲区,而不是将数据保留在内存中的缓冲区。与Hadoop 不同,这些写入文件不是中间过程文件,因为Spark 最终不会将它们合并成单个大文件。Map 任务根据Reduce 容器数量创建写入文件[2-3]。1.2 Hadoop 和Spark 中的Reduce 阶段
Hadoop 的Reduce 阶段的主要操作是:当Map 任务完成后,将在内存中保留自己的工作空间,Reduce 阶段也会在内存中为映射文件保留缓存区[4]。当缓存区中数据量超过70%的时候,缓存区中的数据会被写入磁盘。与Map 阶段相同,数据也将被合并为单个大文件写入磁盘,之后触发启动Reduce 函数[5]。
在Spark 中,中间结果(shuffling files)作为Map
电脑与信息技术 2021年4月·80·
阶段的输出被推送到Reduce任务。中间结果(shuffling files)直接写入Reduce任务的内存。最后,初始化Reduce函数[6]。
2 实验设计
2.1 HiBench基准套件
有许多基准可以测试Hadoop和Spark框架的性能。在本文中,作者选择了HiBench基准测试。HiBench是根据Apache License发布的一组Shell脚本,可以从速度、吞吐量和系统资源使用方面帮助评估不同的大数据框架。在本文中,作者使用了HiBench 套件的9个基准测试。输入数据由每个基准测试中的准备脚本自动生成,各不相同。主要依靠执行时间和内容消耗这两个指标来比较这两个大数据框架的性能差异。
2.2 部署Hadoop和Spark集
为了模拟服务器集环境,作者在虚拟机上部署了Hadoop和Spark。虚拟机部署速度快,易于维护并且可以提高集节点的可靠性。该实验被部署在CentOS操作系统中,以伪分布式的模式部署Hadoop 集。在“Spark in MapReduce(SIMR)”模式下部署Spark,使用户能够在Hadoop MapReduce集上运
行Spark作业以及Spark Shell,而无需安装Spark或拥有管理员权限[7-8]。
3 实验结果
实验结果见表1-表4,本节将对各项执行结果进行分析。
表1 Hibench工作负载下Spark的执行结果
应用类型输入数据量执行时间(秒)
Aggregation12*104pages43.480
Bayesian1*105pages91.257
Join12*104pages48.669
Pagerank5000pages22.457
Scan183MB33.535
Sleep0185.447
Sort328MB43.448
Terasort320MB55.993
表2 Hibench工作负载下Hadoop的执行结果
应用类型输入数据量执行时间(秒)
Aggregation12*104pages192.550
Bayesian1*105pages122.097
Join12*104pages326.472
应用类型输入数据量执行时间(秒)
Pagerank5000pages406.296
Scan183MB49.650
Sleep039.093
Sort328MB55.847
Terasort320MB100.187
表3 Wordcount工作负载下Spark的执行结果
数据量字数执行时间(秒)
1GB2*10847.852
5GB1*109162.585
hadoop与spark的区别与联系10GB2*109292.665
表4 Wordcount工作负载下Hadoop的执行结果
数据量字数执行时间(秒)
1GB2*108139.712
5GB1*109592.503
10GB2*1091029.360
3.1 执行时间
如图1所示,在Hibench基准测试中,Spark在Pagerank工作负载的性能表现要比Hadoop提高18倍。在SQL类的工作负载测试中,Spark性能提高明显,如Aggregate和Join,Spark的性能比Hadoop分别提高4.4倍与6.7倍。除了Sleep工作负载外,其他工作负载在Spark集上的执行时间都有所减少,只有在Sleep工作负载下,Hadoop的执行时间比在Spark 的执行时间减少78.92%。对于排序类的工作负载,如Bayesian、Scan、Sort和Terasort,Spark的执行时间与Hadoop的执行时间相差均在2倍以,可以看作内大致相同。
图1 Hibench工作负载的执行时间
如图2所示,在Wordcount工作负载下,输入数据的规模为1GB、5 GB和10 GB。随着输入数据量的增加,Spark和Hadoop
的执行时间也会相应增加。
第29卷第2期·81·
吴 岳:通过HiBench基准测试比较 Hadoop与Spark的性能
无论哪种规模的输入数据量,Spark的处理时间都要小于Hadoop的处理时间。主要由于Wordcount工作负载无需迭代即可运行,输入数据中的每个单词将被分配一个键,所有具有相同键的单词将被统一计数。对于MapReduce过程中的每个步骤,Hadoop必须在下一步开始之前将输出数据存储在HDFS上。在大多数Hadoop应用程序中,超过90%的执行时间用于HDFS读写操作。
图2 Wordcount工作负载的执行时间
3.2内存消耗
Hadoop和Spark在HiBench基准测试中消耗内存的百分比如图3所示。在Pagerank、Sort、Terasort、Aggregation和Scan工作负载中,Spark会比Hadoop 消耗更多的内存。在Bayesian和Join工作负载下,Hadoop和Spark的内存消耗大致相同。在Wordcount 工作负载下,Hadoop和Spark消耗内存的百分比如图4所示。当输入数据规模太大时内存消耗与数据规模成比例增加。通常,Spark会比Hadoop消耗更多的内存资源。因此,Spark的内存消耗可能会影响其性能。如果输入数据量巨大并且系统没有太多内存,Spark 无法创建新的RDD,性能会受到很大限制。
图3 Hibench工作负载的内存消耗
图4 Wordcount工作负载的内存消耗4 结束语
通过对实验结果的分析,在HiBench基准提供的各类工作负载测试中,Apache Spark的性能都优于Hadoop MapReduce,尤其是涉及迭代算法的案例。导致明显性能差异的主要原因是Spark基于分布式弹性数据集(RDD)处理内存中的数据,而不是像在Hadoop那样在每次Map/Reduce操作之后将数据存储在磁盘上。而且,Spark具有比Hadoop更多的优化功能,例如每秒磁盘访问次数,内存带宽利用率和IPC 速率。
Spark会比Hadoop消耗更多的内存资源,因为它将数据加载到内存中并会在那里缓存一段时间。因此,如果服务器没有足够的内存,Spark的性能会受到很大影响。因此,如果没有预算配置太多的内存并且对执行速度不是特别的敏感,Hadoop将是更好的选择。
参考文献:
[1] 张佳,周雪. 基于云计算的大数据处理技术探讨[J]. 电脑
编程技巧与维护, 2019 (12): 104-105.
[2] 李元亨,邹学玉.Hadoop综述[J].电脑知识与技术, 2018 (9):
8–9.
[3] 司雅楠.Hadoop2.0平台概述[J].科技与创新, 2019 (5):
65–66.
[4] 张仁美.基于Hadoop平台的数据处理及应用[J]. 电子技
术与软件工程, 2018 (24): 139.
[5] 王凌晖,解云月,周美华.Hadoop分布式存储架构的性能
分析[J]. 现代电子技术, 2018 (18): 92–95.
[6] 刘文杰.基于HDFS的大数据文件传输实验设计[J]. 实验
室研究与探索, 2019 (12): 132-134.
[7] 冯祥,张媛媛.基于Hadoop的MapReduce运行流程研究[J].
福建电脑, 2018 (12): 118.
[8] 王玉.Spark大数据处理平台的构建及应用[J]. 大众标准
化
, 2019 (18): 28-29.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论