APP下载

基于云计算的虚拟实验系统的设计及应用

2016-05-19欧跃发黄文明

电脑知识与技术 2016年8期
关键词:负载均衡分布式计算

欧跃发+黄文明

摘要:传统HDFS缺乏存储和访问优化,以致在多用户并发系统中难以发挥集群优势。该文设计了一个基于HDFS的中间件,主要对数据块、存储负载均衡和数据访问三方面进行了优化,并提出了相应的改进算法。仿真实验证明,改进后的HDFS系统,在多用户并发和低延时访问方面有了明显提高,进而能够在网盘系统、视频系统、数字化校园等系统中得到更好的应用。

关键词:Hadoop;HDFS;MapReduce;负载均衡;分布式计算

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)08-0243-04

Abstract: As the traditional HDFS lack the optimization of storage and access, it is difficult to play a cluster edge in multi-user concurrent systems. This paper is designed a middleware based on HDFS,which is mainly optimized on the data block, the load balancing of storage and data access and it presents the corresponding improved algorithm. Simulation results show that the improved HDFS systems has been significantly improved in multi-user concurrency and low latency access, thus it will get a good application in network disk system, video system, and other digital campus system in the future.

Key words: Hadoop; HDFS; MapReduce; load balancing; distributed computing

1 引言

1.1 HDFS框架

HDFS[1]是Hadoop[3]分布式文件系统的实现。它采用主从(Master/Slave)体系结构,名字节点Namenode、数据节点DataNode和客户端Client是HDFS中的3个重要角色。名字节点是一个中心服务器,是分布式文件系统的管理者,负责管理文件系统的命名空间、集群配置和数据块复制等。数据节点是文件存储的基本单元,以数据块的形式进行存储。客户端和名字节点、数据节点进行通信,访问HDFS,并对文件进行操作。基于HDFS的云存储平台,可以减少专用服务器的数量,降低应用成本,提高系统的性能、稳定性和效率,所以它不仅在工业界得到推崇,在如传媒、电信、金融、学校等传统行业中也备受青睐。当前HDFS主要应用在数据的存储和为MapReduce高性能计算提供底层支持两个方面,在多用户并发访问系统中却没有发挥出集群优势。

文献[1-4] 主要对Hadoop和HDFS进行了详细介绍;文献[5]详细介绍了GFS的系统架构,工作负荷分析,并使用一些小规模基准测试来展现了GFS在实现上的一些固有瓶颈;文献[6]描述了Bigtable提供的简单的数据模,Bigtable的设计和实现,并从引入局部性群组、压缩、增加缓存提高读操作等策略来提高Bigtable的性能;文献[7]阐明了访问大量小文件会严重影响HDFS的IO性能和HDFS的扩展性;文献[8]结合Sequence File文件合并技术,构建了具有访问特点的云存储系统,但该系统缺乏对多用户并发访问优化的考虑;文献[9]详细描述了一种建立在P2P上的分布式存储系统的体系结构,并提出了预分组的理论和算法;文献[10]从三个方面对文件下载策略进行了改进,优化了负载均衡性能,忽略了HDFS系统内部优化对并发文件访问的影响。

基于以上分析,本文在客户端和HDFS系统之间架构了一层中间件OBDR(Optimization of Block choice DataNode and Read Datablock.),对HDFS做进一步的优化,以提高HDFS在多用户并发系统中的应用。

1.2 当前HDFS框架存在的不足

HDFS具有高容错性、易扩展性等优点,允许用户将Hadoop部署在廉价的硬件上,构成分布式存储系统,是云存储的一种落地实现形式。对于一些诸如网盘系统、视频系统、数字化校园系统以及一些中小型企事业单位的内部系统,他们需要以相对廉价的方式搭建自己的云平台,但并不需要高性能计算或者海量数据的处理,存储和多用户并发访问是他们的主要需求。针对这方面的应用,当前的HDFS缺乏系统优化,使得其难以发挥集群优势,进而在上述类似系统中,很难得到广泛应用。该文主要从以下三方面讨论当前HDFS存在的不足:

首先,HDFS缺乏对数据块的优化。DataNode节点存储数据是以数据块的形式进行存储的,每个Block的大小默认为64MB(除最后一个Block外),而海量数据文件大小不一,如果数据块大小设定不合理,将会给主节点带来负担,同时不停切换DataNode节点,必然消耗系统资源,导致集群效率降低。在存储海量数据时,依据文件实际大小动态设定合理的数据块大小至关重要。

其次,HDFS缺乏负载均衡策略。HDFS在选择节点存取数据块时,节点在满足基本条件下,是随机选择的,这就有可能造成存储容量大的节点没有得到充分利用,存储容量小的节点几乎接近饱和,从而引起负载不均衡现象,使得存储效率降低,用户访问数据块节点时,由于存储节点性能问题,影响访问效率。

再次,缺乏访问优化策略。HDFS文件读取策略中,每个客户端读取文件时,总是依次读每个数据块,最后组装成整个文件返回客户端,这种缺乏并发机制的数据读取方式,必然使得Hadoop集群在客户端获取数据低延时方面或者交互式应用方面会遇到很大的瓶颈问题。

2 OBDR中间件架构

基于以上对HDFS框架中存在的不足,本文在HDFS和客户端之间架构了一个中间件OBDR,以对传统HDFS进行进一步优化。改进后的HDFS架构如图1所示,OBDR中间件主要三个组成模块,数据块优化模块(ODBR-Block)存储的数据节点负载均衡模块(ODBR-DataNode)和数据访问的多线程优化模块(ODBR-ReadThread)。

2.1 OBDR结构与优化策略

2.1.1 OBDR-Block

数据块大小由变量blocksize来设定。决定blocksize大小的因素是文件大小,存储文件大小由filesize来表示,如果文件比较大,而设置的bolocksize比较小,必然导致数据块数量变大,增加NameNode节点内存压力,客户端读取文件时,访问NameNode和切换DataNode节点次数增加,在同等网络质量的前提下,文件读取效率降低。反之,如果设置的blocksize太大,集群DataNode节点得不得充分利用,效率也会降低。由于系统默认数据块大小为64M,实际Blocksize大小最好应是64M的整数倍。OBDR-Block功能模块通过优化算法1,依据上传文件的大小,去改写HDFS配置文件dfs.block.size的属性值,以实现数据块的合理设置。

算法1 数据块优化算法

[filesize]代表上传文件的实际大小,[Blocksize]代表优化后的数据块大小,一个合理数据块大小设定公式,一般需要经过大量的实验测试数据验证总结而确定。本文通过部分实验数据验证,总结出如下算法公式,实验证明对HDFS性能改进有较大帮助。当[filesize≤128Mb?2]时,

2.1.2 OBDR-DataNode

HDFS在存储数据块时,选择合理的DataNode节点对提高存取效率至关重要。比如某DataNode节点,存储新的数据块后,硬盘空间已经基本饱和,而其他DataNode节点硬盘空间可能很空闲,这就会使得客户端在读取数据文件时候,由于某个或者某些DataNode节点的问题,而导致整个文件存储和读取速度降低,集群内的资源得不到充分利用,所以数据块存储的负载均衡是提高客户端数据读取效率的一个重要因素。合理的存储节点的选择主要取决于该节点剩余资源的大小。

定义1. 设dfs.download.remaining为配置文件中设定的某DataNode剩余资源百分比,用[Noderemain]表示。

在类DatanodeInfo中,可以使用remaining属性获得各数据节点的剩余资源。

算法2 数据块存储优化算法

算法4多线程数据块并行下载算法

1)初始化:设[m]为Hadoop设置副本的数量,[bsize]为文件块大小,[filesize]为文件大小。[m]的值可以从Hadoop配置文件中dfs.replication读取;[bsize]通过dfs.block.size获取;文件大小[filesize]是通过客户端调用DistributedFileSystem的open()方法建立与NameNode的连接而获得。

2)DistributedFileSystem对象通过RPC从NameNode返回一个LocationBlocks对象给DFSInputStream。

3)调用LocationBlocks.size得到文件的数据块个数[n],下载优化器产生[n]个下载线程,并初始化[n]个数据块下载状态标示数组flag[[n]]={0,0…0}。

4)采用算法3选择优化下载点,得到availableNodes[],从availableNodes[]中随机选择一个DataNode节点作为下载点,下载线程利用FSDataInputStream.read()进行下载。

5)当4中第[i](1=<[i]<=[n])块Block下载完毕,调用FSDataInputStream.close方法进行关闭与资源释放,并设置下载状态标示数据flag[[i]]=1。

6)循环检查flag[[n]]数组,当数组全为1时,则表示所有数据块下载完毕,将[n]个数据块在优化器力合并为完整文件,并返回给客户端,否则,转到4,继续下载。

7)结束。

2.2基于OBDR的HDFS存取数据流程

1)基于OBDR的HDFS文件存储流程

客户端上传文件时,OBDR中间件OBDR-Block模块和OBDR-DataNode模块被启动,OBDR-Block模块依据上传文件的大小,按照算法1,计算出合理的数据块大小,并改写HDFS配置文件dfs.block.size的值,此时数据块大小已确定。然后,HDFS将文件分成[n]个数据块,存放到DataNode节点上,数据块存放的数据节点,是由OBDR-DataNode模块按照算法2选出的最优节点序列。

2)基于OBDR的HDFS文件读取或下载流程

客户端在读取或者下载文件时,OBDR中间件的OBDR-ReadThread模块被启动,HDFS的NameNode节点将该文件的所有数据块存储的DataNode节点的地址列表返回给OBDR中间件,中间件依据算法4,生成[n]个线程与相应的DataNode建立连接,进行数据块下载。每个线程在与DataNode连接时,首先经过OBDR-ReadThread模块,通过算法3,随机选择出符合条件的节点来下载。最后将所有下载好的数据块整合成所需文件,返回给客户端。

3 实验及分析

3.1实验环境

本实验运行在由5台PC机组成的Hadoop集群上,其中一台为NameNode节点,主机Slave1,Slave2,Slave3和Slave4为DataNode节点。五台机器的系统配置如下:

NameNode: cpu i5-2400 3.1Ghz*4,内存: 4G,硬盘: 500G,操作系统:ubuntu12.04;

DataNode: cpu i5-3470 3.1Ghz*4,内存: 4G,硬盘: 500G,操作系统:ubuntu12.04;

实验主要是通过对多客户端并发访问下载集群中数据文件的效率,来对比Hadoop框架优化前后的性能,从而提高HDFS在多用户并发访问系统中的应用。

同时,为了能够实时画出性能曲线分析图,实验中使用JFreeChart插件,并通过java xml编码将实验数据实时传到HDFS,画出实验分析图。实验是在Eclipse集成开发环境下进行程序开发的。

3.2实验结果与分析

实验1:数据块大小和存储优化对访问HDFS文件的影响

实验是由20个客户端同时分别下载10M、20M、40M、80M、160M、1G、3G、6G和10G的9个不同大小的文件。第一种方式是使用原始集群框架,数据块大小是系统默认的64M,各下载文件上传至集群时未使用存储优化。第二种方式是使用优化后的HDFS集群框架,在上传10M、20M、40M、80M、160M、1G、3G、6G和10G文件至集群时,启动OBDR-Block和OBDR-DataNode优化模块,采用算法1和算法2将数据存储成功,然后通过公式1测试20客户端下载9个不同大小的文件时的平均速度,测试结果如图2所示:

随着文件大小的增加,系统默认的数据块大小使得大文件被分割成大量的数据块,给主节点造成了较大负担,同时读取或者下载该文件时,由于不断地切换集群DataNode节点,使得文件整体下载效率降低。而启动了OBDR-Block和OBDR-DataNode优化模块以后,文件在上传至集群时,数据块存储得到了优化,数据块大小也得到了合理设定,集群性能得到充分发挥,由图2可知,优化后的HDFS在大文件的访问上效率有了明显提高。

实验2:文件的多线程并发访问对HDFS性能的影响

由于小文件和低并发下载很难明显体验出多线程的优势,所以本实验采用固定大文件,递增并发访问的方式来测试。实验中,通过对比1到30个节点并发下载1G大小文件的平均速度,来验证HDFS改进前后的效率问题。改进后的HDFS集群,客户端在读取和下载时采用基于算法4的多线程并发访问,各节点的下载平均速度按照公式1计算得出。由图3所示,改进后的HDFS在文件下载方面比普通HDFS文件下载的平均速度要高,说明,使用多线程能够充分利用集群资源,提高集群效率。同时,由图3也可以看出,不同节点数下载的平均速度并非是一个平滑的曲线,而是有些节点出现了跳跃,这是因为在实际测试环境下,集群机器本身性能差异以及网络的不稳定等原因所造成,属于不可避免的。但是,从整体趋势来看,改进后的HDFS在文件下载方面,效率有了明显的提高。

4 结束语

本文分析了HDFS集群内部在优化方面存在的不足,在原HDFS架构中,增加了一个中间件,分别从数据块大小、存储的负载均衡和文件的多线程访问三个方面进行设计和改进,并分别提出了相应改进算法,通过模拟实验表明,优化后的HDFS集群在文件下载的平均速度上有了明显提高,从而反映出集群性能有了比较明显的提高,这就使得HDFS在图书管理系统、网盘系统、视频播放系统等此类需要多用户并发访问且响应时间要求不是很严格的系统中得到更加广泛的应用,而不仅仅只是用来存储和为Mapreduce提供基础服务。

下一步的主要工作如下:① 针对HDFS集群NameNode性能瓶颈问题进行进一步的研究;② 在本文算法的基础上,选择合适的算法与Map/Reduce进行匹配,达到存储、计算和访问下载协同工作。③实现已存储的数据块进行重新分块。

参考文献:

[1] Dhruba Borthaku. The Hadoop Distributed File System:Architecture and Design.2007

[2] Luo Junzhou,Jin Jiahui,SongAibo,etal.Cloud computing:Architecture and key technologies[J]. Journalon CommuNications,2011,32(7):3-21.

[3] 周敏奇,王晓玲,金澈清等.Hadoop权威指南[M]. 北京: 清华大学出版社, 2011.1-73.

[4] 刘鹏.实战Hadoop [M]. 北京: 电子工业出版社, 2011.1-83.

[5] GHEMAWAT S,GOBIFFH ,LEUNG S-T. The Google file system[C]//Proceeding of 19th ACM Symposium on Operating System Principles.New York:ACM,2003:29-43.

[6] CHANG F, DEAN J,GHEMAWAT S,etal.Bigtable:a distributed storage ststem for structured data[C]//Proceedings of the 7th USENIX Syrup on Operating Systems Design and Implementation.

[7] Bo Dong,Jie Qiu,Qinghua Zheng,etal. A Novel Approach to Improving the Efficiency of Storing and Accessing Small Files on Hadoop:a Case Study by PowerPoint Files[C].Proceedings of the 7th IEEE 2010 Interanational Conference on Services Computing,2010:65-72.

[8] 黎平国.基于HDFS的数字图书馆云存储系统研究[J].情报探索,2012,9:98-101.

[9] 徐飞,杨广文,鞠大鹏.基于Peer-to-Peer的分布式存储系统的设计[J].软件学报,2004,15(2):268-277.

[10] 廖彬,于炯,张陶,等.基于P2P的分布式文件系统下载效率优化[J].计算机应用,2011,31(9):2317-2321.

猜你喜欢

负载均衡分布式计算
异构环境下改进的LATE调度算法
云计算中MapReduce分布式并行处理框架的研究与搭建
面向异构分布式计算环境的并行任务调度优化方法