您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 其它办公文档 > 5-Hadoop云盘应用实践
Hadoop云盘实践一、实验目的1、熟悉HDFS(HadoopDistributedFileSystem)的基本原理2、掌握HDFS的特点、基本操作、常用API及读写数据流等。二、实验原理1、HDFS的主要设计理念1.1、存储超大文件这里的“超大文件”是指几百MB、GB甚至TB级别的文件。1.2、最高效的访问模式是一次写入、多次读取(流式数据访问)HDFS存储的数据集作为hadoop的分析对象。在数据集生成后,长时间在此数据集上进行各种分析。每次分析都将设计该数据集的大部分数据甚至全部数据,因此读取整个数据集的时间延迟比读取第一条记录的时间延迟更重要。1.3、运行在普通廉价的服务器上HDFS设计理念之一就是让它能运行在普通的硬件之上,即便硬件出现故障,也可以通过容错策略来保证数据的高可用。2、HDFS的忌讳2.1、将HDFS用于对数据访问要求低延迟的场景由于HDFS是为高数据吞吐量应用而设计的,必然以高延迟为代价。2.2、存储大量小文件HDFS中元数据(文件的基本信息)存储在namenode的内存中,而namenode为单点,小文件数量大到一定程度,namenode内存就吃不消了。3、HDFS基本概念数据块(block):大文件会被分割成多个block进行存储,block大小默认为64MB。每一个block会在多个datanode上存储多份副本,默认是3份。namenode:namenode负责管理文件目录、文件和block的对应关系以及block和datanode的对应关系。datanode:datanode就负责存储了,当然大部分容错机制都是在datanode上实现的。4、HDFS基本架构图图中有几个概念需要介绍一下Rack是指机柜的意思,一个block的三个副本通常会保存到两个或者两个以上的机柜中(当然是机柜中的服务器),这样做的目的是做防灾容错,因为发生一个机柜掉电或者一个机柜的交换机挂了的概率还是蛮高的。5、HDFS写文件流程6、HDFS读文件流程三、实验内容1、开发环境的搭建2、云盘实例开发四、实验步骤本实验以unbutu14.04,hadoop2.20集群为前提进行实验。Hadoop集群ip及角色分配如下10.31.44.117master(namenode)10.31.44.200slaver1(datanode)10.31.44.201slaver2(datanode)第一部分:云盘实践项目实验UI设计要求云盘实践项目主要是为了让大家掌握HDFS文件操作基本知识和API的使用,故对UI效果要求不高,重在实现功能。源码最终实现效果如下图:第二部分:HDFS开发环境的搭建在云盘实际开发项目中,本人是在win7系统下,使用eclipse进行HDFS开发。所以这里搭建的环境仍然以实际项目中win7-64位操作系统、eclipse为开发环境进行试验。对于eclipse的具体安装就不在介绍,eclipse版本比较多对于HDFS的开发一般都是支持的,我曾经一直开发Android应用和底层项目,所以这里用的eclipse是google发型的adt-bundle-windows-x86_64-201403,其实作为开发工具这些都是无关紧要的。下面主要讲解eclipse使用插件hadoop-eclipse-plugin-2.2.0.jar开发HDFS环境配置。1、下载eclipse开发hadoop2.20MapReduce插件hadoop-eclipse-plugin-2.2.0.jar提供一个网址免费下载链接:将下载好的插件放入eclipse安装目录下的dropins文件夹中。放置好之后,重启eclipse,按照1、2、3进行操作,如下图紧接着如下图进行如下操作:以上步骤完成后,会在eclipse左边出现DFSXX目录可以进行如下操作:此时将可以看到HDFS文件存储结构,并可以尝试进行上传,下载创建等操作,如能正常操作则至此HadoopHDFS开发平台搭建完毕。下面创建做一个demo工程看看是否能正常创建MapReduce工程。至此我们可以看到工程创建完成,效果图如下:第三部分:HDFS云盘实例开发基本设计思路作为云盘,我们主要是运用hadoop分布式存储系统特性,实现数据的上传、下载、删除主要功能,当然还有其他的服务包括私有云分享,公有云共享等功能。在这里我们主要讲解云盘实践中文件的操作,即是HDFS基本操作、常用API及读写数据流。从功能上来说,本实验主要包括登录、注册、上传、下载、删除、重命名,6个模块。从涉及到HDFS技术方面分析,主要涉及HDFS基本API操作,读写数据流。本实验的基本思路如下图:云盘工程目录结构如下:基本操作(上传、下载、重命名、删除)下面,从hdfs.java文件里面剪切出来部分代码,讲解云盘项目对分布式文件系统的操作的基本方法。如下图下面这些代码是连接分布式文件系统必须的一段代码,可以根据注释详细了解分析:Configurationconf=newConfiguration();//配置文件对象//设置连接HDFS地址conf.set(fs.default.name,hdfs://10.31.44.117:9000);//获取操作文件的路径PathdelefPath=newPath(hdfspath);//获得HDFS文件操作对象,此类封装了对文件的所有操作,包括删除、修改FileSystemhdfs=delefPath.getFileSystem(conf);下面贴出云盘实践项目中文件处理核心代码hdfs.java(这里面包含了文件的下载、上传、删除、移动、新建文件夹等方法),通过注释的方式进行相关知识的介绍。hdfs.java具体代码如下packagehdfs;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.OutputStream;importjava.net.URI;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FSDataInputStream;importorg.apache.hadoop.fs.FileStatus;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;publicclasshdfs{privatestaticintfilesnum;/*测试用例*publicstaticvoidmain(String[]args)throwsException{String[]str=*listAll(hdfs://10.31.44.117:9000/usr);for(inti=0;ifilesnum;*i++){System.out.println(str[i]);}}*//***文件的删除**@paramhdfspath*@return*@throwsIOException*/publicstaticbooleanremoveFile(Stringhdfspath)throwsIOException{Configurationconf=newConfiguration();//配置文件对象//设置连接HDFS地址conf.set(fs.default.name,hdfs://10.31.44.117:9000);//获取操作文件的路径PathdelefPath=newPath(hdfspath);//获得HDFS文件操作对象,此类封装了对文件的所有操作,包括删除、修改FileSystemhdfs=delefPath.getFileSystem(conf);booleanretval=false;if(hdfs.exists(delefPath)){retval=hdfs.delete(delefPath,true);System.out.println(文件删除成功);}returnretval;}/***给文件进行重命名**@paramoldPath*@paramnewPath*@return*@throwsIllegalArgumentException*@throwsIOException*/publicstaticbooleanreNameFile(StringoldPath,StringnewPath)throwsIllegalArgumentException,IOException{Configurationconf=newConfiguration();conf.set(fs.default.name,hdfs://10.31.44.117:9000);FileSystemfs=FileSystem.get(conf);booleanretval=fs.rename(newPath(oldPath),newPath(newPath));//重命名fs.close();returnretval;}/***删除文件**@paramhdfsDir*@return*@throwsIOException*/@SuppressWarnings(deprecation)publicstaticbooleanremoveDir(StringhdfsDir)throwsIOException{Configurationconf=newConfiguration();conf.set(fs.default.name,hdfs://10.31.44.117:9000);FileSystemfs=FileSystem.get(conf);booleanretval=fs.delete(newPath(hdfsDir));fs.close();returnretval;}/***获取文件对象,此对象包含了文件的属性,如:大小,上传日期,修改日期等等**@paramdir*@return*@throwsIOException*/publicstaticFileStatus[]getAllFileStatus(Stringdir)throwsIOException{Configurationconf=newConfiguration();conf.set(fs.default.name,hdfs://10.31.44.117:9000);FileSystemfs=FileSystem.get(conf);FileStatus[]stats=fs.listStatus(newPath(dir));returnstats;}/***文件的移动**@paramoldPath*@paramnewPath*@return*@throwsIOException*/publicstaticbooleanmoveFileTo(StringoldPath,StringnewPath)throwsIOException{Configurationconf=newConfiguration();conf.set(fs.default.name,hdfs://10.31.44.117:9000);FileSystemfs=FileSystem.get(conf);fs.moveFromLocalFile(newPath(oldPath),newPath(newPath));fs.close();returntrue;}/***复制文件**@paramoldPath*@paramnewPath*@return*@throwsIOException*/publicstaticbooleancopyFileTo(StringoldPath,StringnewPath)throwsIOException{Configuration
本文标题:5-Hadoop云盘应用实践
链接地址:https://www.777doc.com/doc-2755261 .html