云存储系统的实现毕业设计论文.docx
《云存储系统的实现毕业设计论文.docx》由会员分享,可在线阅读,更多相关《云存储系统的实现毕业设计论文.docx(54页珍藏版)》请在冰豆网上搜索。
云存储系统的实现毕业设计论文
毕业设计(论文)
云存储系统的实现
云存储系统的实现
摘要:
云计算是通过网络实现资源的共享,其资源包括计算、存储、网络、服务和应用软件等,它能高效地为用户提供服务。
开源云计算平台很多,如Hadoop,AbiCloud,Eucalypyus等。
Hadoop是应用最广的云计算平台,它只需要低廉的硬件基础,且能带来高效的服务。
Hadoop还可以很方便结合Java程序实现应用开发,它有具体的插件可供嵌入Eclipse开发环境,在Eclipse应用程序上只需调用此插件内的API就可以实现云计算应用。
本项目使用Hadoop作为开发平台。
本文首先简单介绍了Hadoop云开发平台,并在Windows环境中结合Eclipse搭建了Hadoop云开发平台,然后并通过该开发环境运用Hadoop提供的API实现了文件的上传和下载。
关键词:
云计算;存储;Hadoop;HDFS;Cygwin
Theimplementationofcloudstoragesystem
Abstract:
Cloudcomputingisthroughthenetworktorealizeresourcessharing,itsresourcesincludingcomputing,storage,network,serviceandapplicationsoftware,etc.,itcanefficientlyprovideservicefortheuser.
Therearemanyopensourcecloudcomputingplatform,suchasHadoop,AbiCloud,Eucalypyus,etc.Hadoopisthemostwidelyusedcloudcomputingplatform,itonlyneedstobecheaphardware,andcanleadtoefficientservice.HadoopcanalsobeeasilycombinedwithJavaprogramtorealizeapplicationdevelopment,ithasspecifictoembedtheEclipseplugindevelopmentenvironment,theEclipseapplicationsneedtoinvokethisAPIcanbeachievedwithintheplug-incloudcomputingapplications.ThisprojectUSESHadoopasadevelopmentplatform.
ThisarticlefirstintroducestheHadoopclouddevelopmentplatform,andcombiningwiththeEclipseintheWindowsenvironmentsetupHadoopclouddevelopmentplatform,andthenthroughthedevelopmentenvironmentusingHadoopprovidesAPIimplementsthefileuploadanddownload.
Keywords:
Cloudcomputing;storage;Hadoop;HDFS;Cygwin
绪论
1.1论文研究的背景
1.1.1背景
云计算是在2007年提出的一种新概念,是指基于互联网等网络,用虚拟资源的方式来共享整个网络上的资源的新型模式;主要通过整个网络来共同管理和处理,调配计算、存储、网络、软件等资源,将IT资源优化,整合。
云计算凭借自身极具创新性的理念引起了业界广泛地关注,成为了整个IT行业最为热门的话题。
云计算概念就像名字中所包含的“云”一样牵涉大、覆盖广,可谓整个IT行业的一次史无前例的创新。
研究云计算中存在的相关问题,是具有十分重要的意义。
如今,企业的生存和发展越来越依靠数据的完整和庞大,在某种程度上说,数据已经成为一个企业的核心部分,它决定着企业的生死存亡。
而对于当今数据日趋庞大,以至到现今的大数据时代,其对数据计算的速度和对数据处理的效率变成了关键。
CPU的速度不可能在大幅度提升了。
这样人们就希望通过增加计算机数量并行运算来提升运算和数据处理速度。
云计算也就是通过互联网,利用虚拟化的方式来共享网络资源的计算模式。
用服务这样的方式来满足不同用户的各种需求。
当然这种方式必然是最低成本的。
云计算这一概念被认为是在PC以及互联网这类重大信息技术之后的另一次重大突破。
而对已进入大数据时代的现在,这样一个既能满足于高速的运算速度又能满足高效的数据处理能力的平台是必不可少的。
1.1.2目的和意义
云计算的兴起不是偶然的,而是信息技术和应用发展的必然产物,最根本的目
的是最大限度的使用整个网络上的资源。
云计算会通过对服务器的负荷程度的分析来对用户的请求进行一个优化的引导,使该服务器与空闲些的服务器进行连接,从而均衡它们之间的利用率以提高用户访问的速度。
因此我们知道,采用云计算这种方式可以帮用户的请求在服务器之间实现负载均衡。
这种方式必然是最低成本的。
而且整个IT行业已达成基本共识,认为云计算这一概念的提出必然引起整个行业的重大变革。
在安全的问题上云计算为用户提供了一套最可靠、最安全的数据存储模式,为此对于数据丢失和病毒入侵等问题是不会困扰客户的;在便捷的问题上云计算对用户端设备要求不是很高,使用起来也十分方便;在数据共享的问题上云计算可以轻松实现不同设备见得数据与应用共享;而对于发展的问题上云计算这一概念为我们使用网络资源的方式提供了无限可能。
Hadoop是一个分布式计算开源框架,它可以稳定可靠的运行在大中型集群的比较便宜的硬件设备上,为应用程序的运行提供了一组方便的接口。
其最底部是HDFS(即HadoopDistributedFileSystem),HDFS上存储着Hadoop上所有数据节点上的数据。
普通的计算机上也可以安装Hadoop平台,极大程度地降低开发项目的成本,这也让研究项目、使用分布式系统更加简便,而且还是开源的。
总的来说,本文有以下几方面的意义:
随着现代企业的数据量日益增多,面对庞大的数据,如何对这些数据进行有效管理直接影响着企业的安全。
如果我们能利用云存储技术来解决数据问题,毫无疑问这将直接提高企业的效益。
HadoopDistributedFileSystem可以在普通的PC机上使用,可以说这在很大程度上是降低了运行分布式系统的成本。
这里通过在普通Pc机上实现云平台上的操作来证明此点。
通过对HDFS的研究和发展,我们也可以把这种技术运用到另外的集群存储技术中。
这也为IT行业今后的进一步发展提供了无限可能。
1.2国内外的进展
1.2.1国外
云计算在国外的从2007年就兴起了,知名的一些电子信息公司纷纷加入了云计算这一领域,例如:
IBM,Microsoft,Google,Sun。
随着云计算技术的慢慢成熟,他们都相继推出了相关的产品和服务。
Intel、Cisco等传统硬件厂商也开始加入云计算服务商行业。
云计算受到了整个国际资本市场的高度关注,VMware也因为其在云计算上的优势技术,成为继Google之后美国最强的云技术公司,在欧洲市场上Salesforce是这方面得领军,发展势头强劲。
IBM于2007年8月高调推出“蓝云(BlueCloud)计划。
随之建立了云计算数据中心。
在东京建立了全新研究所,帮助用户使用云的基本服务。
迄今为止,IBM已发布一系列大型主机的相关云产品。
目的是在于减低运营成本并且能早日搭建成安全可靠的云平台。
IBM的云系统给客户提供了一种基于开放标准的可信赖的平台。
这样的一台大型的主机就可以在单一的系统中保证6,000多台虚拟机的运行、并完全提供一个多租户环境来动态的调配网上共享的资源。
谷歌与IBM合作在2007年10月向全球宣布了他们的云计划,他们把全球一些知名大学纳入了他们“云计算”计划。
Google与IBM两家公司为了降低分布式计算技术在学术研究方面的成本,已经在美国大学校园,主要包括卡耐基梅隆大学、麻省理工学院、斯坦福大学、加州大学伯克利分校及马里兰大学等,并且进一步推广了云计算。
与此同时也为这些大学提供相关云计算的技术支援。
在2008年1月30日之后,Google已经在台湾启动了“云计算学术计划”,将这种先进、快速的计算技术推广到校园。
在2009年4月,GAE的升级就已经支持Java,并且添加了一系列能满足企业业务的功能:
在那之后,Google还发布了一款Eclipse插件,可以对GoogleAppEngine的Java开发提供强力支持,之后Google继续推出了GoogleCloudStorage和GoogleBigQuery。
而其发布的ComputeEngine云计算平台就是这个架构的基础服务,它可以让我们用谷歌的服务器来运行Linux的虚拟机,得到更强大的数据运算能力,具有延展性广、性能高、性价比高的特点。
在群雄崛起之时,微软也不逊色。
WindowsAzure被认为是在WindowsNT之后,微软中最为重要的产品。
而且WindowsAzure使用全球Microsoft管理的数据中心动态来配置Windows和Linux的虚拟机、应用程序以及基础结构。
使用.NET、Java、PHP、Node.js、Python或Ruby开发更好的Azure解决方案。
在VisualStudio集成开发环境下,我们可以很方便的开发应用程序。
不过很可惜这是一款收费且是按分钟收费的云开发平台。
1.2.2国内
在国内,云计算这些年发展迅速。
具体说来,这些企业包括了以华为为代表的传统电信设备商、以中国移动、阿里巴巴和XX、以及以瑞星、金山、奇虎360为代表等业内顶尖大公司。
这些公司分别以云计算为基础在不同的方向上发展。
像中国移动则开发了叫做“BigCloud”的能并行数据处理/搜索大容量数据等的平台,着眼于将平台作为服务进行推广;华为则大力于解决方案和云应用提供的以端到端的云计算德解决方案,可以说是涉及云计算产业链最广的国内企业;XX作为国内互联网巨头,与云计算的浪潮相呼应而推出了“框计算”概念,他的核心思想是云计算的“计算+服务”的理念;作为国内云计算起步较早的企业,阿里巴巴的目标则是建成解决中小企业商业交易问题的“商业云”,更多地在服务上发展,为了实现这一目标,阿里巴巴特地建立了一个“阿里云”的全资子公司;而金山、瑞星、奇虎360等安全公司,也顺应云计算潮流,推出了相应的“云安全”服务。
综合国内的云计算发展状况,国内企业本身发展比国外晚,在技术的成熟上势必会弱一些,虽然现今已经取得了很惊人的成绩,但仍有很多需要努力之处。
现在最新消息,2014年4月29日阿里云计算已经宣布其在国内继杭州、青岛之外在北京的第三个对外服务数据中心。
1.3本论文研究的主要内容
在广泛的文献调研基础上,此论文主要对基于Windows下Hadoop的云计算理论及其上的开发来研究,通过对云计算的了解与学习,实现搭建Windows上Hadoop云平台,并在该平台上使用Eclipse开发应用程序实现视频文件的上传和下载,从而完成多媒体云上的存储。
Hadoop是一个开放式源代码框架,而且其开发插件能嵌入Eclipse开发环境,很适合本次论文,因此这里选择Hadoop在Windows上云平台。
本论文主要以云计算与Hadoop为主题进行研究,涉及下面三个方面的内容:
1).广泛查阅资料的基础上,对云计算的背景以及国内外的发展现状进行了一个很全面的了解。
云计算的普遍应用能更加使资源的利用更合理更节约更安全。
与计算的发展伴随着很多重要技术的革新,数据存储和管理,还有分布式编程模式的思想,其中虚拟化技术更是为云计算的发展带来了铺垫。
在这十年间的历程中云计算的基本的概念以及发展前期其他计算模式的历程使云计算逐渐走向应用,它的特点和优势,对我们现今生活方式的改变起了很大的作用。
2).本文的下一部分对在Hadoop云计算在Windows平台上的实现进行研究。
这部分对Hadoop的文件系统HDFS(包括HDFS的部分API)及MapReduce的相关基础知识。
Hadoop是的构架和实现原理,接着介绍了部分HadoopAPI的使用,熟悉了这些API就能更好的在开发环境上开发出好的应用程序。
3).本文的最后一部分是把理论知识转化为实践,重点在Windows环境下搭建一下Hadoop的运行环境并实现文件的上传与下载,从而体验Hadoop给我们带来的方便。
Hadoop云平台
2.1概述
在云计算技术中,一个非常的重要的模块就是编程平台。
Hadoop平台是当今应用最为广泛的开源云计算编程平台,本章详细介绍了Hadoop平台的组成及HDFSAPI。
2.2Hadoop介绍
Hadoop是Apache下的一个项目,是一个包括HDFS(重要)、HBase、MapReduce(重要)、ZooKeeper和Hive等成员组成的分布式计算平台(如下图2.1Hadoop的项目结构图所示)。
另外Core项目在Hadoop版本0.20之后就改名为Common,它只是提供工具给其他Hadoop系项目使用的子项目,而Avro是用于数据序列化的系统,并提供了各式的数据结构、数据压缩格式、存储永久数据等等功能。
图2.1Hadoop的项目结构图
Hadoop这一平台就是提供存储海量数据的平台。
正适应当今的大数据时代。
Hadoop在架构上采用的是主从结构,底层是HDFS文件系统,上层是Map/Reduce处理(如下图2.2所示)。
HDFS将文件分布式的存储在各个节点上,这样,在计算时也就只是取自于自身节点上的数据,实现分布式计算,避免了大量数据在网络上的传递。
Map/Reduce是HDFS的上层,是一种分布式计算,并且由JobTrackers和TaskerTrackers组成了其引擎。
因为Hadoop有了底层HDFS的分布式存储和上层Map/Reduce的分布式计算,所以在海量计算上占有很大的优势,这也是Hadoop能在搜索引擎上很好很快的运行的原因。
图2.2Hadoop的基本结构
2.3HDFS
2.3.1HDFS简介
Hadoop的HDFS是一个能使用在通用硬件设备上的分布式系统,也是一个高度容错的分布式系统。
为了保证数据的一致性,采用“写入一次,多次读取”方式。
它被设计在低成本的硬件上运行,具有单一的文件命名空间。
HDFS能提供并行处理很大数据量的数据访问,非常适合应用在大规模数据集上。
在多个DataNode节点上有同一个数据块的副本,客户端通过NameNode节点得到数据块的位置,直接访问数据节点来获得数据,
(1)数据块(block):
HDFS的最基本的存储单位是64MB的数据块。
HDFS中的文件和普通文件系统的相同是也被分成了一个个的最小数据块存储。
而与普通文件系统不相同的是,在一个文件的大小小于HDFS上的最小存储块大小时,它不会独占次存储空间,而是与其他共享的。
(2)NameNode节点和DataNode节点:
管理文件系的命名空间的责任是属于NameNode节点,而且将所有的文件及文夹的保存在相同的一个文件系统树中。
这些文件信息也会同时在保存在硬盘上,并且采用镜像文件的重命名空间和日志的修改的这样的两种方式来保存。
除了保存这些信息外,它还保存了一个文件,该文件信息中包括那些数据块以及这些数据块分布在那些数据节点上。
但是这些信息不是存储在硬盘上,而是从启动的时候各数据节点上集结而成的精髓。
如下图2.3NameNode节点文件夹架构图所示,为NameNode节点文件夹架构图。
图2.3NameNode节点文件夹架构图
(3)从元数据节点(secondaryNameNode):
这个节点不是备用的数据节点,他负责是防日志文件过大——把元素数据节点镜像命名空间的文件和修改日志周期性地合并在一起。
为了防止数据丢失,元数据节点的命名空间会有备份,以防意外。
(4)文件系统的名字空间:
HDFS支持完全传统的文件组织体系结构,因此用户或者程序可以其上创建目录来存储文件。
名字空间的结构与现有文件系统相同。
用户的基本操作都一样,如创建、删除、文件移动、重命名等。
目前HDFS体系结构虽然没有实现用户配置和访问权限控制,但是并不妨碍实现这些特性。
2.3.2HDFS体系结构
HDFS由一些互连的节点集群组成,他是主/从结构的。
一个HDFS集群包含一个节点,成为名字节点NameNode,他也就是主控制服务器,该节点管理文件系统的名称空间而且还控制客户端访问文件。
另外还有一堆数据节点DataNode,一般一个物理节点上部署一个数据节点,数据节点DataNode将数据作为块存储在文件中。
在HDFS中,一个给定的名字节点NameNode管理一些文件系统名字空间操作,如打开]关闭以及重命名文件和目录。
名字节点NameNode还将数据块映射到数据节点DataNode,并处理来自HDFS客户端的读/写请求。
数据节点数据节点还根据元数据节点名字节点的指令来创建、删除和复制数据块等。
HDFS体系架构,如图2.4HDFS体系架构图所示。
图2.4HDFS体系架构图
一个集群中包含着一个元数据节点NameNode,从而大大简化了其系统机构。
NameNode充当着系统中文件存储和仲裁者的角色,这样的一个结构大大有效于对节点的控制等。
NameNode与DataNode的关系。
NameNode和DataNode是属于软件组件。
HDFS是使用Java编程语言构建,因此,HDFS可以运行在所有能支持Java开发的变编译环境。
一个典型的安装集群拥有一台专用机器,用于运行一个NameNode,可能还有一个DataNode,其他处在集群中的机器都运行相同的一个DataNode。
在HDFS上,可以安装到一个专门的机器上来运行元数据节点,而集群中的其他机器各自都运行一个数据节点;也可以在运行元数据节点的机器上同时运行DataNode,或者一台机器运行多个DataNode。
一个集群只能一个NameNode。
NameNode使用食物日志(editLog)来记录HDFS元数据的改变,并且用映射的文件存储文件系统的命名,映射的东西包括文件的映射、属性等信息。
事物日志和映射文件均存储在元数据节点所在的本地文件系统中。
当元数据节点启动时,会从此本地盘中读取映射文件和事物日志,并将事物日志中记录的事物应用到映射文件,然后将刷新新的映射文件,这样可以删除掉冗余的旧的事物日志。
这个叫做检查点。
对于SecondaryNameNode节点,它的作用就是辅助元数据节点处理映射文件和事物的日志。
元数据节点启动的时候会合并映射文件和事物日志,而SecondaryNameNode周期性的从NameNode复制映射和事物日志到临时的目录,合并后等生成了新的映射文件之后再在重新上传到名字节点上,元数据节点会在更新映射文件的同时清理事物日志,使得事物日志文件的大小不至于大到无法控制的地步。
通信协议HDFS通信协议是完全构建于TCP/IP之上。
HDFS客户端连接到名字节点上所打开的一个TCP端口,然后使用一个基于RemoteProtocolCall(RPC)的专有协议与NameNode通信。
DataNode使用一个基于块的专有协议与NameNode通信。
DataNode持续循环询问NameNode的指令,NameNode不能直接连接到DataNode,它只是从DataNode调用的函数返回值。
每个数据节点都维护一个完全开放的服务器套接字,以便客户端代码或者其他DataNode能够读/写数据。
名字节点知道这个服务器的主机或端口,这些主机及端口信息都将通过它提供给有关客户端或其它数据节点。
元数据节点维护和管理文件系统名字空间的更改。
NameNode维护系统的名字空间,它将记录名字空间内的任何改动或者名字空间本身的属性改变。
HDFS复制文件块以便容错,应用程序可以在一个文件创建时制定该文件的副本数,这个数量可以在以后随时更改,这个份数成为复制因子。
NameNode负责所有块复制的决定。
如下图2.5所示——复制因子是3。
图2.5复制因子为3时数据快分布情况
2.3.3HDFSAPI
(1)FileSystem.copyFromLocalFile(PathsrcPath,PathdstPath)将本地文件上传;此函数用于上传本地文件到HDFS上,其中参数src(源路径)为本地磁盘的全路径,值得注意的是:
如果是在Windows平台上搭建的环境,那么此路径中的对应上、下两级目录之间应以“\\”隔开(如“G:
\\Movie\\dance.MOV”表示G盘目录Movie中的文件dance.MOV);参数dst为HDFS上的全路径位置,如“/user/userFile/dance.MOV”。
将src指向本地的文件复制到HDFS对应路径dst下。
上传完成之后可通过浏览器(“http:
//localhost:
50070”访问hdfs;“http:
//localhost:
50030”访问JobTracker)查看新上传的文件,也可以通过控制台查看(通过FileStatus对象来实现对目录下文件的遍历)和终端查看(Linux上终端或者Windows上的Cygwin)。
示例:
Configurationconf=newConfiguration();
FileSystemHDFSFile=FileSystem.get(conf);
PathsrcPath=newPath(“G:
\\Movie\\dance.MOV”);
PathdstPath=newPath(“/user/userFile/dance.MOV”);
HDFSFile.copyFromLocalFile(srcPath,dstPath);
(2)FileSystem.create(PathpathFile)和FileSystem.mkdirs(PathpathDir)在HDFS上创建文件和目录;此两函数分别用于在HDFS上创建新文件和新的目录。
其中的两个参数pathFile和pathDir均为HDFS上的全路径。
这里需要另外注意的是权限问题和安全模式,在这两种情况下都回出现创建失败。
解决的方法分别为:
通过终端指令修改对应目录下用户的使用权限从而解决权限问题,我们可以全加上可读、写和执行,Cygwin上的指令为“./Hadoopfs-chmoda+wrxpathFile或pathDir”;通过终端上的安全模式退出指令“./Hadoopdfsadmin-safemodeleave”。
中间我们可以通过“./Hadoopfs-lspathFile或pathDir”来查看对应文件或目录的权限;通过“./Hadoopdfsadmin-safemodeget”来查看安全模式状态。
示例:
Configurationconf=newConfiguration();
FileSystemHDFSFile=FileSystem.get(conf);
PathdirPath=newPath(“/