Hadoop云存储策略的研究与优化
2016-09-23林穗朱岩杨有科
林穗,朱岩,杨有科
(1.广东工业大学计算机学院,广州 510006;2.广东讯飞启明科技发展有限公司,广州 510530)
Hadoop云存储策略的研究与优化
林穗1,朱岩1,杨有科2
(1.广东工业大学计算机学院,广州510006;2.广东讯飞启明科技发展有限公司,广州510530)
0 引言
随着互联网的日益普及以及分布式计算的快速发展,各种网络业务生成了海量的数据信息,对于这些数据的存储和处理将成为新时代的研究难题和研究重点。云计算的普及恰恰解决了这个问题,云计算因为其廉价实用的基础架构成为越来越多公司存储数据的首选。云计算是分布式计算、网络存储、虚拟化等传统计算机技术和网络技术发展融合的产物[1]。而作为云计算的核心技术之一,海量数据的存储也是在这种背景下得到了很好的研究和发展。它的存储方式是采用分布式存储实现,从而能保证了可靠性、经济性以及高可用性。现在比较常用的云计算框架有Amazon的EC2,IBM的智慧云,Google的GFS,Apache的Hadoop云计算框架[4,6]。因为Hadoop是开源框架,且已经被很多大型的公司应用,如Facebook,亚马逊,雅虎等,其技术已经趋于成熟,其存储模块HDFS更是被广泛的研究和应用的热点。
1 HDFS简介
Hadoop框架是Apache开源基金组织旗下的一个在一般商用机器集群上运行分布式并行计算的开源框架,其核心设计思想是MapReduce和HDFS。MapReduce是Google提出的编程模型,用于大规模数据集的并行运算。它主要作用于对数据的处理,而它工作过程中会产生很多的中间数据,这些中间数据就被暂存在Hadoop的另一个重要组成部分——HDFS中。
HDFS(Hadoop Distributed File System)是一种分布式文件系统,有着高容错性(fault-tolerent)的特点,并且被设计部署在低廉的硬件上,它提供高吞吐量来访问应用程序的数据以适合那些有着大量数据集的应用程序。HDFS采用了主/从(Master/Slave)结构模型,即一个Master多个Slave,前者叫做名字节点(NameNode),后者叫数据节点(DateNode),在集群系统中一般一个节点就是一个DateNode组成,DataNode管理着该节点的存储。HDFS支持传统的层次文件结构,同现有的一些文件系统很类似,你可以创建或删除一个文件,把一个文件从这个目录迁移到另一个目录,重命名文件等。
对于具体的文件数据来说,一个文件数据其实是被分割成一个一个的块(HDFS中默认是64M)被存储的。这些块冗余存储在DataNode集合数据里。NameNode在集群系统中扮演着总管理者的身份,HDFS系统中文件的目录结构存储在NameNode上。NameN-ode负责执行文件系统的Namespace管理工作,同时负责维护数据块到具体DataNode的映射。客户机的读写需求是通过DataNode节点响应,而DataNode在NameNode的统一管理下对数据块进行创建、删除、复制操作。
2 HDFS数据默认存储策略分析
可靠而合理的对大规模数据进行存储是Hadoop框架研究的重点。因为在HDFS中是有许多集群构架而成,节点众多,而节点出现故障的可能性一直存在,为了避免个别节点失效而导致整个系统运行异常导致数据永久性丢失,HDFS采取了副本策略,将数据的多个副本存储在集群中不同节点上,这样当有节点失效时,系统仍然可以读取数据。为了保证数据的安全性,数据的副本应该存储在距离本节点较远的机架上,但是由于MapReduce要对数据进行频繁的操作,因而大量数据的移动会显得影响运算的性能,所以数据存储应当遵循本地性,即数据应存储在距离运算节点较近的节点上,以减小数据移动所带来的性能损耗。
针对这一问题,默认的HDFS系统采用了机架感知策略,即将数据块的多个副本存放在本地机架的不同节点上,然后随机选取一个远端机架某一节点存储另外一个副本。这样当客户发起读取数据请求时就可以从本地节点读取数据,且当本地节点失效时,就可以从远端节点恢复数据。但是该策略在选取远端节点所采用的随机策略却可能导致数据恢复时不必要的性能损失,且所随机选取的节点可能会因为数据存储量不同而导致数据负载不均衡。
在HDFS中系统默认的为数据存放三个副本,其默认的存放策略如图1所示。
按照机架感知策略进行存放,保证了数据良好的本地性;另外一个副本存放在随机选择的远端机架的一个节点上,保证了数据的安全性。如果还有更多的副本,则将其存放于在整个集群中随机选取的节点。只有当整个本地节点失效时,HDFS才会通过复制远端机架上的数据副本来恢复到标准的副本数量。
图1 HDFS默认副本存储示意
在HDFS默认的数据存放策略中,较好地平衡了数据的本地性和平衡性,但由于HDFS的集群框架由大量廉价设备所组成,系统中常常存在程序bug,操作系统崩溃,人为操作失误等不可预知错误所导致的节点失效。这种情况时有发生,所以数据恢复是系统运行的常态。而数据恢复所占用的时间就成了影响整个系统性能的一个重要因素。因为其采用的是随机选取远端机架节点的策略,如果副本存放在较远的机架上,当数据副本恢复时就会因为耗费过长的时间而造成整个系统的时间损失。另外,因为采用的是随机选取远端机架节点,可能在系统运行的过程中会出现有些节点存储了很多数据而有的节点却存储很少数据,影响了数据的平衡性,当新的节点加入整个集群时这种情况尤其明显。虽然在HDFS中提出了Balancer程序可以对各个节点进行相应的存储负载平衡,但是在调用Balancer程序的时候,不会将数据中一个节点移动到另一个节点中,需要手动进行操作,且占用很大的网络带宽。
针对默认存储策略的这些问题,对HDFS系统中数据副本个数以及节点的选择进行研究,综合考虑远端网络节点的距离,数据节点的负载均衡,副本数量个数的优化,可以提升HDFS系统的性能。
3 改进的HDFS存储策略
由于HDFS的默认数据副本存储是3个,这种策略的使用会提高数据的可靠性同时也可以实现数据并发读性能要求,但是若将全部的数据都按照3个副本的数量存储的话,可能会造成存储空间的浪费、系统性能的损失以及维护成本的提升。因为在整个集群中各个节点的网络环境或者是硬件性能都有所差异,因此其各个节点的数据可用性不尽相同。据此根据数据节点的失效率、数据块的可用性提出了一种基于概率模型的数据复制策略。
该策略的核心思想是:建立基于概率的数据复制优化模型。综合考虑以上几种问题,通过求解模型并在满足数据可用性的要求下优化数据的复制个数。下面对这种模型做出具体的描述。
假设在Hadoop系统中有m个数据块需要存储在n个数据节点中。假设fi是数据节点的失效概率(0<i<n+1),预先对数据块j的设计的复制个数为rj(0<j<m+ 1),概率事件P(Ni)表示节点i的可用性,用概率事件P(Bj)表示数据块j的可用性,则其失效率(Bj),因为在系统中每个数据块的复制份数为rj,且每个数据块副本都存在各自独立的数据节点上,因此数据块Bj的失效率为:
假设一个文件F是由c个数据块组成,且每个文件块的存放相互独立。则整个文件F的失效率为:
则此文件的可用性为:
我们假设希望数据的可用性是E,则理论上E应该满足不等式:
这样我们就可以提前预设一个数据的期望可用性E,并根约束不等式来计算出优化后的数据复制个数。为了保证整个系统数据的安全性,数据副本个数rj∈[2,4]。
根据HDFS默认的数据放置策略可知,在默认的副本个数即3个情况下,其中有一个副本是要安置在远端机架上的某个节点,因为采取的随机选择策略,所选择的远端节点可能会距离本地节点较远,从而影响数据复制或者恢复的效率。
因此,在选择远端节点进行副本存储的时候综合考虑节点所在网络的带宽,以及远端节点与本地节点的距离。虽然根据公式(1)计算出的副本个数可能低于3,但是还是要确保一个副本存储在远端节点,这是为了保证数据的安全可靠性,这样在本地机架发生故障的时候,仍然可以确保数据恢复成功。将数据存放在距离本地节点较近的机架上可以是数据的传输较快完成,从而提升数据存储或恢复时的性能。另外,用来存放数据副本的存储节点的负载应该保持一定的均衡,防止出现节点空转或者节点负载过重的现象,提高节点的利用率。
NameNode选择DataNode存储数据副本的时候,可以综合考虑这两方面的因素,先从集群中选取一定数量的不同机架的DataNode,再获取各个DataNode距离本地节点的距离信息和其本身的负载信息,结合这两方面信息从而给出一个评价系数V,最后NameNode根据V的值选取合适的DataNode进行副本存储,过程如图2所示。
图2 DataNode评价系数的选择
如上面所说,对于每一个节点,都会根据其当前的负载信息和距离计算出一个评价系数V,其具体的计算公式可表示为:
其中l为节点的负载系数,与节点当前的存储状况成负比关系。d为节点的距离系数,反比与该DataNode与当前DataNode的距离。B表示平衡因子,B∈[0,1],反映在系统中与d的权重。B可由系统管理人员根据系统的负载要求和传输要求自行设置。
在Hadoop中距离的计算是将整个集群网络看成是树的结构,而两个节点之间的距离就是这两个节点分别到共同祖先节点的距离之和。同一个机架上的两个节点距离是2,同一数据中心不同机架上的节点之间的距离为4,对于不同数据中心之间两个节点之间的距离则要视情况而定。
整个改进放置策略的算法表示:
①当有新的数据块到达要进行副本存储。根据公式(1)计算出要存储的副本个数C,根据副本存储规则计算出所需要选取的远端节点M的个数。
②如果已经选取的节点小于指定值N(N≤机架总数),并将已经选取的节点加入节点集nodeList,然后随机选取节点randomNode。
③如果randomNode与nodeList中的任意节点都不在都一个机架上,那么将randomNode加入nodeList。遍历nodeList,如果在nodeList中存在待评价的节点,对这些节点逐个计算评价系数V。
④将所有节点的V加入评价系数列表ValueList。
⑤将ValueList按降序排序。选择V值最高的M个节点。其中M是所需要的远端节点的个数,由C确定。
⑥返回这M个已经选取的节点。
4 实验结果与分析
采用的仿真平台由5台普通PC以及一台客户端PC组成的,其中一台PC作为控制节点,另外四台作为数据节点,基本配置如表1。整个仿真平台运行在千兆内网内的,操作系统选用 Ubuntu 11.10 server,对Hadoop中六个配置文件进行配置,完成Hadoop平台的整体部署。
表1 平台机器配置
实验选取不同规模的数据集,比较默认存储策略与优化后的策略所需要的存储时间。选择的数据集大小是64M,96M,128M,256M,512M,768M,1G,分别设置评价系数为0.35和0.5,得到存储时间综合对比如图3所示。可以看到,当存储数据规模较小时,改进策略比默认策略的存储时间接近,性能改善并不明显。但随着存储大规模数据时,改进策略因为其减少了不必要的数据传输时间和有效控制了副本个数,存储时间随着数据块的增大而减缓增长,存储性能的优势逐渐体现。同时,设置的评价系数小即设置的网络距离的权重高,存储的时间也会随之降低。改进策略通过用户可配置的方式,让用户根据实际需要来设置评价系数,增加了用户的体验性。
图3 存储时间对比图
5 结语
云计算环境下的分布存储主要研究数据在数据中心上的组织和管理,数据中心通常由百万级以上节点组成,存储其上的数据规模往往达到PB级甚至EB级,数据失效将会极大地限制了云计算的应用和推广。因此,提高云存储的可扩展性和容错性成为关键。论文重点研究基于复制的容错技术中的数据复制策略,包括副本的创建时机、副本的数量、副本的放置等问题。通过对副本个数的灵活性选择,避免了不必要的数据复制;通过计算节点的评价系数,避免了数据传输及恢复时因为距离过远导致的数据传输时间损失。实验表明,随着数据规模的增加,改进后的策略提高了系统的存储性能。
[1]李乔,郑啸.云计算研究现状综述[J].计算机科学,2011,38(4):32-37.
[2]Tom Wbite.Hadoop权威指南[M].周敏奇,王晓玲,金澈清等译.北京:清华大学出版社,2011.
[3]张兴旺,李晨晖,秦晓珠.构建于廉价计算机集群上的云存储的研究与初步实现[J].情报杂志,2011.30(11):166-172.
[4]秦秀磊,张文博,魏峻等.云计算环境下分布式缓存技术的现状与挑战[J].软件学报.2013,24(1):50-66.
[5]王意洁,孙伟东,周松等.云计算环境下的分布存储关键技术[J].软件学报,2012,23(4):962-986.
[6]Dhruba Borthakur,Jonathan Gray,Joydeep Sen Sarma,et al.Apache Hadoop Goes Realtime at Facebook[C].Proceedings of the 2011 International Conference on Management of data,2011:1071-1080.
[7]冯登国,张敏,张妍等.云计算安全研究[J].软件学报,2011,22(1):71-83
HDFS;Storage Strategy;Data Copy;Evaluation Coefficient
Research and Optimization of the Hadoop Cloud Storage Strategy
LIN Sui1,ZHU Yan1,YANG You-ke2
(1.School of Computer,Guangdong University of Technology,Guangzhou 510006;2.Guangdong Moring Star Technology CO.LTD.,Guangzhou 510530)
1007-1423(2016)02-0033-05
10.3969/j.issn.1007-1423.2016.02.008
林穗(1972-),女,广东人,副教授,研究方向为云计算、云存储等
朱岩(1990-),男,山东人,硕士,研究方向为云存储
杨有科(1977-),男,广东人,研究方向为大数据与云计算
2015-12-04
2015-12-30
分布式文件系统(HDFS)是海量数据的主要存储方式。HDFS默认的存储策略中,采用固定的数据副本个数以及随机选择远端节点的策略来保证数据的本地性和安全性,但当系统发生故障需要进行数据恢复时,默认策略将会造成系统时间的损失和节点存储负载的不均衡。提出一种改进的HDFS存储策略,根据节点的失效率以及期望的数据可用性建立一种概率模型,通过模型来优化数据副本个数,并根据节点的评价系数来选择远端节点进行副本存储。实验结果表明该策略针对海量数据时提高系统的存储性能。
分布式文件系统;存储策略;数据副本;评价系数
广州市科技项目(No.2014XYD-007)
HDFS is the main storage method of massive data.In the default storage strategy,HDFS uses fixed data replica and randomly chooses remote node to ensure data locality and security.However,when system needs data recovery because of system fault,random strategy will cause loss of system time and imbalance of node storage load.In this case,puts forward an improved HDFS storage strategy to generate a probability model based on node failure rate and expected data availability.It can optimize the number of data replica by the model and select remote node as copy storage according to its evaluation coefficient.The experiment result shows the strategy can improve system performance aiming at massive data.