基于hadoop子项目——Hive的云计算性能测试

时间:2022-07-28 06:27:01

基于hadoop子项目——Hive的云计算性能测试

摘 要:针对信息化时代海量数据的问题,神秘大象——hadoop的出现给云计算领域带来了新的浪潮。针对hadoop框架,采用基于Hadoop的子项目Hive对其性能进行测试,并总结了决定MapReduce分布式计算性能的因素。

关键词:Hadoop;MapReduce;Hive;分布式;云计算;性能测试

中图分类号:TP302.7 文献标识码:A 文章编号:16727800(2012)011001403

________________________________________

基金项目:中南民族大学中央高校基本科研业务费专项资金项目(CZY11007)

作者简介:沙恒(1991-),男,中南民族大学计算机科学学院学生,研究方向为Java语言、分布式系统;帖军(1976-),男,中南民族大学计算机科学学院副教授、硕士研究生导师,研究方向为移动计算、分布式系统。0 引言

这是一个信息爆炸的时代,互联网上的信息正在以几何级数的速度增长。IDC的一项预测曾指出,“数字宇宙”(digital universe)项目统计得出2006年的数据总量为0.18ZB,而2011年的数据量已达到1.8ZB,(1ZB=10亿TB)。这相当于世界上每人一个磁盘驱动器所能容纳数据的数量级。

在这个大背景下,消耗CPU最多的计算逐渐从“提升软件本身性能”方面转移到信息处理方面。与此同时,摩尔定律似乎也不再像以前那样准确发挥作用了。在这样的严峻形势下,各大厂商面临着极大的挑战,他们需要从TB乃至PB级的数据中挖掘信息,并对这些海量的数据进行快捷、高效的处理。在这时期,Google公司以MapReduce为基石,结合GFS、BigTable逐步发展成为全球互联网的领头羊。然而,Google并未公开其MapReduce细节。正在这时,神秘大象——hadoop出现了,它的开源给人们带来了希望。

1 Hadoop简介

Hadoop是一个开源的框架,可编写和运行分布式应用处理大规模数据。它是Apache Lucene创始人Doug Cutting创建的,起源于Apache Nutch,一个开源的网络搜索引擎。Hadoop分布式集群优势在于以下几点:

(1)可运行在一般商用硬件上,成本低廉,配置方便。

(2)Haoop致力于一般商用硬件上,其硬件难免出现故障,它可从容地处理大部分此类故障,具有良好的健壮性。

(3)Hadoop通过增加集群节点,可线性地扩展以处理更大的数据集,有良好的可扩展性。

(4)Hadoop编程简单,可以使用户高效地写出并行代码。

Hadoop原理如图1所示。

________________________________________

图1 Hadoop架构原理

采用Master/Slave结构。NameNode维护内部元数据,DataNode存储数据,负责处理数据的读写请求,并定期向NamenNde上报心跳,NameNode通过响应心跳来控制DataNode。

MapReduce是大规模数据处理的利器,Map和Reduce是它的主要思想,Map负责将数据打散,Reduce负责将数据进行聚集。MapReduce的实现也采用Master/Slave的主从结构,Master叫做JobTracker,Slave叫做TaskTracker。用户提交的计算叫做Job,每一个Job会被划分成若干个Tasks。JobTracker负责Job和Tasks的调度,而jobTracker负责执行Tasks。

2 Hadoop分布式集群配置

硬件:浪潮NF5220、16CPU、13GB内存。

操作系统:LinuxCentOS6.1,并使用系统自带的KVM虚拟机进行其它节点的虚拟。

实验模型:本次实验首先分布了4个集群节点:1个主节点和3个从节点,其中,Master在原CentOS上配置,其余3个Slave从节点配置在KVM虚拟机上,为每个Slave节点分配了同样的配置:4CPU、1GB内存、100GB HDFS。

本次实验的目的在于测试基于Hive的MapReduce分布式计算性能。

MapReduce较HPC的优势在于数据本地化,即计算数据在本地。HPC海量数据计算适用于密集型计算,它的瓶颈在于网络带宽,而Hadoop的MapReduce改善了这一点:Hadoop首先将海量数据负载均衡地分布在每一个计算节点上的HDFS。在Map阶段,任务的执行节点和输入数据的存储节点为同一节点,减少了网络带宽的依赖,提高了其计算性能。

在Map阶段,将输入数据分割成固定大小的片段,成为分片(splits),这个大小一般为64M,与HDFS的块大小相同。因为如果分片大小超过了HDFS块大小,则一个Map任务不可以在一个HDFS块内完成,需要其它节点的数据,这样就需要消耗网络带宽并增加其它一些开销,大大降低计算性能。

当访问磁盘时,如果数据较小,则访问总时间由磁盘的寻址时间决定,而数据较大时,则由数据的传输时间决定。同样,Hadoop的MapReduce对待计算的数据也有数据大小的权衡,它适用于大数据的计算。MapReduce的Map任务通常是在一个时间内运行操作一个块,因此,如果任务数过少,作业的运行速度显然就比预期的慢。如果集群数量足够大,待计算数据较大,那么这个数据会被负载均衡到每一个计算节点,并进行并发map计算,达到良好的预期效率。

本实验测试目的就在于测试Hadoop分布式计算的性能与待计算数据大小的关系以及分布式计算的性能与计算节点数量的关系。

3 实验结果及结论

首先将一个比较小的待计算数据存储至HDFS中,大小为260M。

将原始数据复制50份形成一个新文件存储至HDFS,同样分别复制100、200、300份形成另外3个文件存储至HDFS。

分别对这4份数据基于Hive的HiveQL(其低层是MapReduce计算)进行同一条数据记录查询,并分别记录对应的结果,进行数据分析。见图2。

图表中,X轴代表job执行的时间,Y轴代表对应原始数据拷贝数的文件。由图中数据曲线可知,当数据拷贝数在50份到100份间,计算效率达到了一个峰值。说明MapReduce的效率随待处理数据的增大而增大,到了一个固定值就几乎稳定不变,即达到了最大并发量的map。

图2 三计算节点效率统计

接下来新增一计算节点,考察计算节点数目增多时MapReduce的效率线性增加问题。

由于NF5220 CPU、内存等硬件条件有限,无法继续使用KVM虚拟节点,故使用一台普通的4CPU、4G内存的PC机做新增的计算节点。

使用Hadoop框架自带的负载均衡器将之前的3台计算节点上HDFS中的数据负载均衡到新增加的计算节点上,然后进行同上的HiveQL查询,并进行数据统计做对照图,如图3所示。

图3 三节点与四节点效率对照

其中,红色曲线是4计算节点时的性能曲线,黑色曲线是3计算节点时的性能曲线。通过对比可知,4计算节点的效率峰值在原始数据拷贝数为100~200的文件之间,即反应了增加计算节点后可并发执行的map数量显著增加,并行计算速率提高,并且job执行的总时间也相对减少。

另外,通过分析MapReduce节点工作情况,也验证了task的mapper的数量与性能的关系。两次查询同一条记录时,由于查询的是同样的数据集,对应相同的spilts,mapper总数不会变。但第一次查询测试将mapper slots设置为4(即对应的taskTracker可最大并发执行的map数量),对应19个task,除第19个外,前18个每个taskTracker有4个map任务,实验结果见图4。

图4 第一次查询数据统计

第二次查询测试将mapper slots改为8,对应10个tasks,前9个每个并行执行8个map任务。实验结果见图5。

由此数据说明,第二次查询平均每个task所用时间是第一次的2倍,说明8个map其实并没有真正地进行并发执行。因为对于每个task,其mapper不可能同时获得CPU资源做到并行计算,需要等待调度,总效率还是没有提高。

图5 第二次查询数据统计

实验结论:

在有限的计算节点下,所能达到的并行计算任务的数量是有限的,这主要取决于每个计算节点的slots(CPU CORE)*N(N为节点总数),这些也会受到内存等因素的影响。

提高并行计算的效率需要多增加计算节点,进而降低每个tasktracker节点上的mapper数量(这个数量应该等于CPU CORE的数量,并且设置mapper slots等于CPU CORE的数量,做到并行调度),从而增加task的数量,使task被均匀分配到每个节点,达到负载均衡,让所有mapper都并行执行,提高效率。

参考文献:

[1]刘鹏.实战Hadoop——开启通向云计算的捷径[M].北京:电子工业出版社,2011.

[2][美]CHUCK LAM.Hadoop in Action[M].北京:人民邮电出版社,2011.

[3]易见.Hadoop介绍[J].Hadoop开发者,2010(1).

[4]Apache Hadoop[EB/OL].http://.2010.

[5]黑继伟.基于分布式并行文件系统HDFS的副本管理模型[D].长春:吉林大学,2010.

上一篇:Windows异常处理机制研究 下一篇:KMeans算法在计算机等级考试成绩分析中的应...