您的位置:新文秘网>>毕业相关/毕业论文/文教论文/调研报告/>>正文

毕业论文:基于HDFS的云灾备存储系统——可靠存储及负载均衡方法研究

发表时间:2013/8/15 17:54:53


毕 业 设 计 论 文

题目: 基于HDFS的云灾备存储系统——可靠存储及负载均衡方法研究
院(系)    计算机科学与技术   
专 业     网络工程    
届 别     2012 

摘 要

随着计算机技术及因特网技术的发展,数据信息已成为现代企业以及每个人的重要资源,数据的丢失或被窃取将带来重大的损失,数据的安全存储及备份显得尤为重要。本文设计一个基于Hadoop的云灾备存储系统来存储数据。
论文采用在Linu*虚拟机上创建hadoop分布式文件系统,由分布式系统管理并备份用户的数据。分布式系统由一个名字节点和多个数据节点构成,名字节点对数据的存储进行管理,而数据节点则负责数据的物理存储。为了防止名字节点的故障导致系统的崩溃,必须配置一个第二名字节点来作为冗余并定时处理保存名字节点的系统日志。为了数据的安全备份,必须把数据复制为多个副本存储在多个数据节点上。系统不仅要实现海量数据的存储,同时也要实现海量用户的的管理。为了防止某个数据节点的负载过重,导致用户的操作延迟太大,还必须处理好系统数据节点的负载均衡,使海量用户能够同时流畅的访问hdfs系统。
本文,通过配置多台数据节点,并在名字节点上设置一个文件要保存的副本数,来实现数据的安全备份,用户数据分为多份存储在不同的服务器上。名字节点则通过一张排序表来控制用户访问数据时是由哪个数据节点负责响应,排序表实现了负载低的数据节点首先响应用户的访问,从而达到各数据节点的负载均衡。

关键词:Hadoop;云灾备;可靠存储;负载均衡
ABSTRACT

With the development of computer technology and Internet technology, information has become a modern enterprise as well as important resources for everyone.So data’s lost or stolen will bring a significant loss. Secure storage and backup of data is particularly important. This paper designed a cloud disaster recovery storage system witch based on Hadoop to store data.
Paper using the Linu* virtual machine to create a hadoop distributed file system, distributed systems management and backup the user’s data. The distributed system consists of a namenode and multiple datanodes, the namenode manage the data’s storage.And the datanode is responsible for the physical storage of data. In order to prevent the namenode’failured led to the collapse of the system, we should configure a secondary namenode as the namenode’s redundancy and regularly deal with save system log. For the security of data backup, data replication for the storage of multiple copies of multiple datanodes. The system must not only mass data storage, but also mass user’s management. In order to prevent the overloading of a datanode, which lead to the delay become too large for users operation, we must deal with the datanodes’ load balancing, so that the mass users’ access will be simultaneously smooth.
The article, by configuring multiple datanodes and set the number of copiesf to save for each file on the namenode to achieve the security of data backup, user data is divided into pay would be stored on different servers. The namenode control witch datanode for user’s access through a sorting table .This sorting table is used to achieve the low-loaded datanode first to respond to user access, so as to achieve load balancing of all datanodes .
Key words
……(新文秘网https://www.wm114.cn省略3883字,正式会员可完整阅读)…… 
失。
第五章:实现HDFS的负载均衡。本章主要介绍当今应用较广泛的负载均衡技术,以及负载均衡的重要性,最后介绍本文是通过何种方法来实现HDFS的负载均衡的。
第六章:系统的测试和评估。本章主要对系统实现的各个功能进行测试,检查是否达到设计的需求。最后还将对测试结果进行详细的分析,指出系统存在的优缺点。
第七章:总结。本章对全文的工作进行总结,并谈谈自己在工作中的诸多心得体会,最后还将提出所研发系统以后的改进计划。

2 Hadoop的相关知识
2.1 数据的存储和分析
现在,不管是企业,行政部门等各个组织还是个人,都离不开数据,数据的处理和安全越显重要,并且各种数据的产生量都在急剧增长,面对如此快速增长的海量数据,我们必须寻求一个便捷的手段和方法来存储和分析这些数据。
硬盘的容量逐年快速增长,然而,硬盘的访问速度却未能与时俱进。数据的读写速度仍不够快。从一个驱动器上读取所有的数据需要相当长的时间,当然写更慢。一个简单的提高读写速度的办法是从多个硬盘上并行读写数据。但是这又出现了新的问题。因为一份数据分散的存储在多个不同的硬盘上,如果有一个硬盘故障,便会导致整份数据的无法还原。一旦开始使用多个硬件设备,其中某个硬盘出现故障的概率是非常高的。为了避免单个硬件故障而导致数据丢失,常见的做法是冗余备份;通过系统保存的冗余副本,在故障发生时,就可以使用此副本来确保数据的完整。这就是冗余磁盘阵列的工作方式。Hadoop分布式文件系统也是这种工作方式,可以在名字节点上设置文件需要保存的副本数,然后存储到多个数据节点上以保证存储的安全可靠。
还有个问题是在读取数据时,如何保证数据的正确性,即读取的数据和保存时的数据是完全一样的。因为数据保存在多个硬盘上,要读取一个数据,必须从多个硬盘上分别读取出属于的数据块,然后再合并成完整的数据。在这个问题上,HDFS客户端软件实现了对HDFS文件内容的校验和检查。当客户端创建一个新的HDFS文件,会计算这个文件每个数据块的校验和,并将校验和作为一个单独的隐藏文件保存在同一个HDFS名字空间下。当客户端获取文件内容后,它会检验从名字节点获取的数据跟相应的校验和文件中的检验和是否匹配,如果不匹配,客户端可以选择从其他的数据节点上获取该数据的副本块。
总而言之,hadoop提供了一个稳定的共享存储和分析系统。
2.2 Hadoop的发展和现状
Hadoop是Apache Lucene创始人Doug Cutting创建的,Lucene是一个广泛使用的文本搜索系统库。Hadoop起源于Apache Nutch,一个开源的网络搜索引擎, 它本身也是Lucene项目的一部分。
Nutch项目始于2002年,一个可以运行的网页爬取工具和搜索引擎系统很快"浮出水面"。但后来,开发者认为这一架构可扩展度不够,不能解决数十亿网页的搜索问题。2003年发表的一篇论文为此提供了帮助,文中描述的是谷歌产品架构,该架构称为谷歌分布式文件系统,简称GFS。 GFS或类似的架构,可以解决他们在网页爬取和索引过程中产生的超大文件的存储需求。特别关键的是,GFS能够节省系统管理(如管理存储节点)所花的大量时间。在2004年,他们开始着手实现一个开源的实现,即Nutch的分布式文件系统(NDFS)。
2004年,谷歌发表论文向全世界介绍他们的MapReduce系统。 2005年初,Nutch的开发人员在Nutch上实现了一个MapReduce系统,到年中,Nutch的所有主要算法均完成移植,用MapReduce和NDFS来运行。
Nutch的NDFS和MapReduce实现不只是适用于搜索领域。在2006年2月, 开发人员将NDFS和MapReduce移出Nutch形成Lucene的一个子项目,称为 Hadoop。大约在同一时间, Doug Cutting加入雅虎,雅虎为此组织了一个专门的团队和资源,将Hadoop发展成一个能够处理Web数据的系统。在2008年2月,Yahoo!宣布其搜索引擎使用的索引是在一个拥有1万个内核的Hadoop 集群上构建的。
2008年1月,Hadoop已成为Apache的顶级项目,证明了它的成功、多样化、活跃性。到目前为止,除Yahoo!之外,还有很多公司使用了Hadoop,例如Last.fm、 Facebook和《纽约时报》等[7]。
2008年4月,Hadoop打破世界纪录,成为最快的TB级数据排序系统。通过一个910节点的群集,Hadoop在209 秒内完成了对1 TB数据的排序,击败了前一年的297秒冠军。同年11月,谷歌在报告中声称,它的MapReduce对1 TB数据排序只用了68秒。
以下是Hadoop大事记[7]:
2004年--由Doug Cutting 和Mike Cafarella实现了现在HDFS和MapReduce的最初版本。
2005年12月--Nutch移植到新框架,Hadoop在20 个节点上稳定运行。
2006年1月--Doug Cutting加入Yahoo!。
2006年2月--Apache Hadoop项目正式启动以支持MapReduce和HDFS的独立发展。
2006年2月--Yahoo!的网格计算团队采用Hadoop。
2006年4月--在188个节点上(每个节点10 GB)运行排序测试集需要47.9个小时。
2006年5月--Yahoo!建立了一个300个节点的Hadoop研究集群。
2006年5月--在500个节点上运行排序测试集需要42个小时(硬件配置比4月的更好)。
2006年11月--研究集群增加到600个节点。
2006年12月--排序测试集在20个节点上运行1.8个小时,100个节点上运行3.3小时,500个节点上运行5.2小时,900个节点上运行7.8个小时。
2007年1月--研究集群增加到900个节点。
2007年4月--研究集群增加到两个1000个节点的集群。
2008年4月--在900个节点上运行1 TB排序测试集仅需209秒,成为世界最快。
2008年10月--研究集群每天装载10 TB的数据。
2009年3月--17个集群总共24 000台机器。
2009年4月--赢得每分钟排序,59 秒内排序500 GB(在1400个节点上)和173分钟内排序100 TB 数据(在3400个节点上)。
可见,hadoop自发展以为以极快的速度在系统冗余节点数上,在海量数据的存储量上以及数据的存取速度上都有了急速的增长。越发体现出hadoop分布式文件系统的优越性和潜在性能。
2.3 Hadoop在数据容灾的优越性
Hadoop 是一个能够对大量数据进行分布式处理的软件框架,它在数据容灾方面的优越性主要体现在Hadoop 它是以一种可靠、高效、可伸缩的方式进行处理的。
1) Hadoop是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。而且副本数可以通过配置来自己改变,这样对于集中存储具有高度重要性的文件系统,可以配置更多的副本数以确保更大的安全性。
2) Hadoop 是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。运行在HDFS上的应用和普通的应用不同,需要流式访问它们的数据集。HDFS的设计中更多的考虑了数据批处理,而不是用户交互处理。比数据访问的低延迟问题,更关键的在于数据访问的高吞吐量。而且HDFS为应用数据的计算提供了将它们自己移动到数据附近的接口。一个应用请求的计算,离它的数据越近就越高效,在海量数据的处理面前更是如此,把计算移到数据附近,再把计算结果返回给用户,相对与传输用户需要的大量数据给用户再进行运算,要高效非常多。这样就能降低网络阻塞的影响,提高系统数据的高吞吐量。
3) Hadoop 还是可伸缩的,能够处理 PB 级数据。HDFS上的一个典型文件大小一般都在G字节至T字节。因此,HDFS被调节以支持大文件存储。它应该能提供整体上高的数据传输带宽,能在一个集群里扩展到数百个节点。
4) Hadoop 依赖于社区服务器,因此它的成本比较低,任何人都可以使用。而且HDFS被设计成具有平台的可移植性。这种特性方便了HDFS作为大规模数据应用平台的推广。
2.4 Hadoop分布式文件系统
2.4.1 HDFS的设计
HDFS是以流式数据访问模式存储超大文件而设计的文件系统,在廉价的商用硬件集群上运行。超大文件是指几百MB,几百GB或者几百TB大小的文件。HDFS的流式数据访问模式旨在一次写入,多次访问,一个数据集通常由数据源生成或复制,接着在此基础上进行各种各样的分析,每个分析至少都会涉及数据集中的大部分数据,因此读取整个数据集的时间比读取第一条记录的延迟更为重要。Hadoop不需要运行在昂贵并且高可靠性的硬件上。它被设计成运行在低廉的商用硬件集群上,它以众多的数据节点来实现可靠性,因此允许集群中多个节点的故障,但仍能保证系统的正常运行。HDFS是针对海量数据的处理的,因此需要达到高的数据吞吐量,虽然这可能会一提高数据的传输延迟为代价,但还是值得的。

2.4.2 数据块
HDFS将每个文件存储成一系列的数据块,除了最后一个,所有的数据块都是同样大小的,默认每个块的大小是64MB,每个分块作为单独的单元进行存储。使用块为单元的好处在于,第一,hadoop是处理海量数据的,可能存在超大文件使得集群中单个磁盘装不下的,这样通过分块,便能够把此超大文件分块存储在多个磁盘上,而且它们能够利用集群上任意一个磁盘。第二,数据块很适合于为提供容错和实用性而做的的复制操作。为了应对损坏的块以及磁盘或机器的故障,每个块都在少数其他分散的机器进行复制。如果一个块损坏了,系统会在其他地方读取另一个副本,而这个过程对用户是透明的。一个因损坏或机器故障而丢失的块会从其他的候选地点复制到正常运行的机器上,以保证副本的数量回到正常水平 。
2.4.3 名称节点和数据节点
HDFS采用的是Master/Slave结构。集群中存在两种节点,NameNode名字节点和DataNode数据节点。名字节点只有一个,它是一个中心服务器,负责管理文件系统的名字空间以及客户端对文件的访问,它维护集群内的元数据,维护着整个文件系统树以及在这个树内多有的文件和索引目录。对外提供创建,打开,删除和重命名文件或目录的功能。它也负责确定数据块到具体数据节点的映射。名子节点是非常重要的,如果没有名字节点,文件系统将无法使用。为了提高系统的可靠性,使得再名字节点出现故障时,仍能保证系统快速恢复和数据的安全,这里可以采用运行一个二级名字节点。
数据节点存储数据,并负责处理数据的读写请求。在名字节点的统一调度下进行数据块的创建,删除和复制。数据节点定期向名字节点上报心跳,名字节点通过响应心跳来控制数据节点。数据节点有多个进行冗余备份,因此允许某个数据节点的故障,保证系统的正常运行。
2.5命令行接口
我们可以通过很多接口来与HDFS进行交互,而其中最简单的便是通过命令行接口。直接在终端下通过命令来进行文件的操作。首先需要先进入hadoop安装目录的bin目录下,个文件或目录的操作命令如下:
Hadoop dfs -mkdir /newdir ;在hdfs中建立一个名为newdir的目录;
Hadoop dfs –ls /newdir 查看一个目录下的文件列表,通过这个命令我们可以看到该目录下所有的文件,及其各文件的状态信息,如文件格式,读写权限,所设置的副本数,属于那个用户或组别,文件大小及文件的最近更新日期等;
Hadoopd fs –put 本地文件路径 目标路径。指定路径将指定本地文件拷贝到hdfs中,当执行一个"put"操作时,它的结果是要么全做,要么全不做。上传文件的时候,文件首先被拷贝到DataNode节点上。当所有的 DataNode都接收完数据的时候,文件句柄被关闭,这个文件才真正的上传完。根据"put"命令的返回值,我们可以知道这个操作是成功了,还是完全失败了。文件不可能会只被上传一半。如果文件上传到一半时,上传操作被中断了,那么hdfs就会当作什么事情也没有发生一样。
Hadoop dfs –cat 文件路径。从hdfs系统中导出指定文件的数据,将一个文件的内容输出到标准输出上。
Hadoop dfs –get hdfs路径 本地路径。Get命令和Put命令的功能是相反的。将指定hdfs系统上的文件下载到指定本地路径上。
Hadoop dfs的命令行接口还有很多,以上只先介绍写常用的基本命令操作,这些可以让我们开始使用HDFS了,后面还将介绍更多的接口应用。如果想了解更多的命令,可以通过执行不带任何参数的hadoop dfs命令,它会列出所有的hdfs命令。同时如果你不明白某些命令是怎么用的,你还可以输入hadoop dfs –help 命令名字,它会帮你指出该命令的具体用法指南。
2.6 Hadoop文件系统
名字节点存储HDFS的元数据。对于任何对文件元数据产生修改的操作,名字节点都使用一个称为Editlog的事务日志记录下来。例如,在HDFS中创建一个文件,名字节点就会在Editlog中插入一条记录来表示;同样,修改文件的replication因子也将往 Editlog插入一条记录。名字节点在本地OS的文件系统中存储这个Editlog。整个文件系统的名字空间,包括数据块到文件的映射、文件的属性,都存储在称为FsImage的文件中,这个文件也是放在名字节点所在系统的文件系统上。
名字节点在内存中保存着整个文件系统名字空间和文件块的映像。这个关键的元数据设计得很紧凑,因而一个带有4G内存的 名字节点足够支撑海量的文件和目录。当名字节点启动时,它从硬盘中读取Editlog和FsImage,将所有Editlog中的事务作用(apply)在内存中的FsImage ,并将这个新版本的FsImage从内存中flush到硬盘上,然后再truncate这个旧的Editlog,因为这个旧的Editlog的事务都已经作用在FsImage上了。这个过程称为检查点。在当前实现中,检查点只发生在名字节点启动时,在不久的将来我们将实现支持周期性的检查点。
数据节点节点并不知道关于文件的任何东西,除了将文件中的数据保存在本地的文件系统上。它把每个HDFS数据块存储在本地文件系统上隔离的文件中。 数据节点节点并不在同一个目录创建所有的文件,相反,它用启发式地方法来确定每个目录的最佳文件数目,并且在适当的时候创建子目录。在同一个目录创建所有的文件不是最优的选择,因为本地文件系统可能无法高效地在单一目录中支持大量的文件。当一个数据节点节点启动时,它扫描本地文件系统,对这些本地文件产生相应的一个所有HDFS数据块的列表,然后发送报告到名字节点,这个报告就是块状态报告。
Hadoop的整体架构图如下:
图2.1 HDFS架构

3 构建Hadoop集群
3.1 集群说明
Hadoop集群,可分为两大类角色Master和Slave,前者主要配置名字节点和JobTracker的角色,负责总管分布式数据和分解任务的执行,后者配置数据节点和TaskTracker的角色,负责分布式数据存储以及任务的执行[6]。
因为hadoop是要在Linu*环境下配置的,这里我选择了ubuntu系统,通过vmware创建3台虚拟机,一台作为名字节点服务器,两台作为数据节点服务器。在3台虚拟机上都安装好ubuntu系统,考虑到宿主电脑要同时运行三台虚拟机,这里对虚拟机的内存设置为:作为名字节点的虚拟机分配了800MB的内存空间,而两台数据节点都分配400M的空间。
3.2 Linu*上集群的建立和安装
3.2.1 Linu*系统的安装
首先在三台虚拟机上安装好ubuntu系统,配置名字节点有800M内存,两台数据节点有400M内存。上网方式选择NAT,IP地址参照宿主本地主机的IP网段设置为同一网段的,并且设置相同的网关和域名服务地址。这样就能保证虚拟机也能正常上网。因为后续的一些服务的安装需要通过命令行接口实现在线的下载与安装,所以必须保证虚拟机可以正常上网。在这里我配置的IP地址如下:
名字节点:10.5.40.10/24
数据节点1:10.5.40.11/24
数据节点2:10.5.40.12/24
在配置虚拟机的上网方式时,曾出现一点错误让我无法正常上网。这里提下vmware虚拟网卡的基础知识:vmware默认有3个虚拟网卡:VMnet0,它是负责桥接的,把虚拟机网卡通过vmnet0桥接到主机的本地连接上;VMnet1,提供的网络连接方式是host-only,就是虚拟机和主机处在一个私有网络中,此方式下,虚拟机只能与主机通讯,不能上外网;VMnet8,提供的网络连接方式是NAT,就是让虚拟机共享主机的IP地址,只要主机能上网虚拟机便能上网。当时,我配置了虚拟机的网卡连接方式为NAT但是虚拟机就是无法上网。错误在于之前的其他实验当中,我把VMnet8的连接方式修改过了,改成了host-only,所以即使网卡连接方式我已经设为了NAT,但是负责NAT功能的VMnet8已不再具有NAT功能了。这里还是需要注意下的。
为了方便宿主主机本地文件到虚拟机上的交互:复制粘贴。我们还需要安装VMtools,使得能够通过简单的复制粘贴快捷键或简单的鼠标拖动就能在主机与虚拟机上移动文件。总之,安装VMtools会给我们对虚拟机的操作带来很多的方便。下面介绍下VMtools的具体安装。
1)点击VMware菜单的——虚拟机——安装VMware Tools,在弹出的对话框中选择“安装”。这时,在Ubuntu下会自动加载Linu*版的VMware Tools的安装光盘镜像。你会看到虚拟机的桌面上出现了一个名为VMware Tools的光盘图标,并且被自动打开。其中包括VMwareTools-5.3.3-34685-i386.rpm和VMwareTools- 5.3.3-34685.tar.gz两个文件。
2)通过鼠标右键解压VMwareTools- 5.3.3-34685.tar.gz这个文件到指定目录下,这里我是直接解压到桌面上的。
3)点击Ubuntu桌面左上角的Applications——附件——终端,在终端界面中,首先用cd 命令进入到解压缩后的那个文件夹中,然后再用命令$ sudo ./vmware-install.pl进行vmtools的安装,回车后会提示输入你的密码,表明你将以更高级权限执行一个动作——安装软件;再次回车后安装开始,后续一直回车确定,直到最后出现“Enjoy——the VMware team”的字样后,就表示VMwareTools终于安装完成了。这时必须重新启动虚拟机,才会使vmware-tools的功能生效。
这样,ubuntu系统就基本安装好且方便操作了,可以进行下一个的工作了。
3.2.2 开启SSH服务并实现无密码登录
正如前面所说的,有些服务的开启需要在线的下载和安装,所以需要虚拟机能够上网。这里的ssh服务的开启就是其一。打开终端,输入命令:sudo apt –get install openssh-server 然后它便会自己下载和安装,安装完成后可以通过在终端中输入命令:ssh 虚拟机自身IP,来检测ssh服务是否已经正常安装。如果没有安装成功则会有ssh服务没有开启的错误报告,正常安装后则会提示输入密码以进行ssh登录。各个节点都必须开启ssh服务。
安装好ssh服务后,还要保证3台虚拟机之间能够实现互相进行无密码登录,这是进行后续工作的前提,ssh是linu*传递文件的保障,只有能够互相ssh我们各个机器之间传递的信息才是安全的,所以一定要保证各个机器之间能够ssh通畅。
首先,在每个节点上通过ssh-keygen-t rsa命令,创建各个节点的公钥和私钥,期间会要求输入一些信息,直接按回车就可以了,这样在默认路径 (我的路径是/home/zgj/.ssh)目录下便创建了私钥id_rsa和一个公钥id_rsa.pub。
然后两个数据节点要把自己的公钥发送到名 ……(未完,全文共60632字,当前仅显示10905字,请阅读下面提示信息。收藏《毕业论文:基于HDFS的云灾备存储系统——可靠存储及负载均衡方法研究》