




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章分布式系统——分布式文件系统与HDFSHDFS的 搭建eclipsejava接口及常用hadoopRPC机制hadoop分布式文件系统与数据量越来越大,在一个操作系统管辖的范围存不下了,那么就分配到的操作系统管理的磁盘中,但是不方便管理和,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。系统,可让多机器上的多用户文件和空间。分布式文件管理系统很多,hdfsHDS只是其中一种。适用于一次写入、多次查询的情况,不支持并发写情况,小文件不合适。小提示:如何在刚开始学习的时候,形象化的地理解HDFS哪呢?可以把HDFS看做是wWindows的文件系统。在wWindows的文件着有一套很多层次的文件 层次是为了在文件夹中分门别类的地存放文件。经常做的操作是创建文件夹、HDFS的 既然HDFS是存取数据的分布式文件系统,那么对HDFS的操作,就是文件系统的基本HDFS的操作命令类似于lLinuxs对文件的操作,如ls、mkdir、rm等。执行以下操作的时候,一定要确定hadoop是正常运行的,使用jps命令确保看到各个hadoop进程。执行命令hadoopfs,如图4-1所示4-选项名使用格含选项名使用格含--ls路径查看指定路径的当 结-<递归查看指定路径 结-统 下个文件大-汇总统 下文件(夹)大-统计文件(夹)数-移--删除文件/空白文件--rmr[-skipTrash]<路径递归删-上传文--copyFromLocal<多个linux上的文件<hdfs路径从本地--moveFromLocal<多个linux上的文件<hdfs路径从本地移-合并到本-查看文件内-查看文件内-径linux目的路径从本地-目的路径从本地移-创建空白文件-修改副本数--touchz<文件路径创建空白文-显示文件统计信--tailf文件查看文件尾部信- 修改权--chownR]属主][:[属组]]修改属--chgrpR]修改属--help[命令选项帮的地方,会特别“linux路径”或者“hdfs路径”。如果没有明确,意味着是hdfs下面讲述每个命令选项的用法- 显示当 结构该命令选项表示查看指定路径的当 4-上图中的路径是hdfs根 首字母表示文件夹(如果是“d”)还是文件(如果是“-后面的9位字符表示权限后面的数字或者“-”表示副本数。如果是文件,使用数字表示副本数;文件夹没有副本;后面的“root”表示属主后面的“supergroup”表示属组后面的“0617637645后面的时间表示修改时间,格式是年月日时分最后一项表示文件路可见 下面有四个文件夹、两个文件如果该命令选项后面没有路径,那么就会/user/<当前用户 用户登录,因此会hdfs的 ,如图4-2.所示4-如果没有这 /user/root,会提示文件不存在的错误-lsr递归显 结该命令选项表示递归显示当前路径 结构,后面跟hdfs路径。如图4-3所示4- -du统 下各文件大该命令选项显示指定路径下的文件大小,单位是字节,如 4-4.所示4--dus汇总统 下文件大该命令选项显示指定路径的文件大小,单位是字节,如图4-5所示。4-请读者比较图4-4与图4-5的区别,体会两个命令选项的不同含义-count统计文件(夹)数该命令选项显示指定路径下的文件夹数量、文件数量、文件总大小信息,如 4-所示.4-在图4-6中有两条命令,下面令是为了佐证上面命令的正确性的-mv移该命令选项表示移动hdfs的文件到指定的hdfs ,如图4-7所示。.4-在图4-7中有三条命令,是为了体现移动前后的变化情况-cp该命令选项表示hdfs指定的文件到指定的 中。后面跟两个路径,一个是被的文件,第二个是目的地,如图4-8所示。4-在图4-8中有三条命令,是为了体现前后的变化情况-rm删除文件/空白文件该该命令选项表示删除指定的文件,如图4-9所示。4- -rmr递归该该命令选项表示递归删除下的和文件,如图4-10所示4--put上传文该命令选项表示把linux上的文件到hdfs中,如图4-11所示。4--copyFromLocal从本地操作与-put一致,不再举例-moveFromLocal从本地移4-getmerge合并到该命令选项的含义是把hdfs指 下的所有文件内容合并到本地linux的文件中,如4-134--cat查看文件内该命令选项是查看文件内容,如图4-14所示4--text查看文件内该命令选项可以认为作用和用法与- 相同,此处略-mkdir创建空白文件4--setrep设置副本数该命令选项是修改已保存文件的副本数量,后面跟副本数量,再跟文件路径,如 4-所示4-本,HDFS会自动执行文件的工作,产生新的副本。如果最后的路径表示文件夹,那么需要跟选项-R,表示对文件夹中的所有文件都修改副本,如图-17所示。.4-在图4-17中,对/user文件夹进行的操作,使用了选项-R,那么/user/root下的文件abc的副本数发生了改变。还有一个选项是-w,表示等待副本操作结束才退出命令,如图4-18所示。4-请读者自己比较以上两图中使用- 前后执行结果的变化情况-touchz创建空白该命令选项是在hdfs中创建空白文件,如图4-194--stat显示文件的统计信该命令选项显示文件的一些统计信息,如图4-201-在图4-20中,命令选项后面可以有格式,使用引号表示。示例中的格式 %Y”依次表示文件大小、文件名称、块大小、副本数、时间-tail查看文件尾部内1K字节的内容。一般用于查看日志。如果带有选项-f,那么当文件内容变化时,也会自动显示,如图4-21所示。4- od修改文件权该命令选项的使用类似于linux的s od用法,作用是修改文件的权限,如图4-22所示。.4-在图4-22中,修改了文件/emptyfile的权限如如果加上选项-R,可以对文件夹中的所有文件修改权限,如图4-23所示。4--chown修改属该命令选项表示修改文件的属主,如图4-24所示4-上图中把文件/emptyfile的属主由root修改为 也可以同时修改属组,如图4-25所示。4-在图4-25中,把文件/emptyfile的属主和属组都修改为 如果带有选项-R,意味着可以递归修改文件夹中的所有文件的属主、属组信-chgrp修改属4--help帮该命令选项会显示帮助信息,后面跟上需要查询令选项即可,如图4- 所示4-令选项的用法都显示出来,如图4-28所示。希望新的版本以后改进。4-读者短时间无法掌握全部命令用法,请重点掌握ls(r)、rm(r)、mkdir、put、get的使用 体系结构与基本通过hadoops上传的文件是存放在DataNode的block中,通过linuxs是看不到文件的,只能看到block。可以一句话描述HDFS:把客户端的大文件存放在很多节点的数据块中。在这里,出现了三个:文件、节点、数据块。HDFS就是围绕着这三个设计的,在学习的时候也要紧抓住这三个来学习。作NameNode的作用是管理文件结构,是管理数据节点的。名字节点两套数据,一套是文件与数据块之间的关系,另一套是数据块与节点之间的关系。前一套数据是静态的,是存放在磁盘上的,通过fsimage和edits文件来;后一套数据是动态的,不持结既然NameNode了这么多的信息,那么这些信息都存放在哪里呢呐?在hadoop源代码中有个文件叫core-default.xml,如4-51示。4-打开这个文件,在第149行和第158行,有两个配置信息,一个是dame.dir,另一个是dame.edits.dir。这两个文件表示的是NameNode的文件fsimage和edits的存放位置,如图4-52所示。4-在对应配置的value值有${},这是变量的表示方式,在程序文件时,会把变量的值出来。那么,第150行的变量hadoop.tmp.dir的值是在上一章的配置文件core-site.xml中配置的,值是/usr/local/hadoop/tmp。可以看出,这两个文件的位置是在linux文件系统的/usr/local/hadoop/tmp/dame下。进入linux文件系统,可以看到如图4-53所示 结构4-作数据的时候是按照block为单位读写数据的。block是hdfs读写数据的基本单位。类推,可以划分出很多的block。每个block就是64MB大小。block本质上是一个逻辑概念,意味着block里面不会真正的数据,只是划分文的看一 类,这里面的属性有以下几个,如4-类中的属性没有一个是可以数据的为什么一定要划分 大小哪呢?因为这是在默认配置文件中设置的,查4-/r/block67108864字节,可以换算为64MB。如果不希望使用64MB大小,可以在core-site.xml中覆盖该值。注意单位是字副险,空间的花费还是值得的。那么,一个文件有几个副本合适哪呢?查看hdfs-default.xml文件,如图4-551所示4-DataNode3份数据都结看文件core-default.xml,如图4-56所示。4-参数dfs.data.dir的值就是block存放在linux文件系统中的位置。变量的值前面已经介绍了,是/usr/local/hadoop/tmp,那么dfs.data.dir的完整路径/usr/local/hadoop/tmp/dfs/data。通过linux命令查看,结果如图4-574-上图中以“blk_”开头的文件就是数据的block。这里名是有规律的,除了block文件外,还有后缀是“meta”的文件,这是block的源数据文件,存放一些元数据信息。因此,上图2block文件。注意:从linux磁盘上传一个完整的文件到hdfs中,这个文件在linux是可以看到hdfsblock存在合并原理4-HDFSwebHDFS对外提供了可供的httpserver,开放了很多端口,下面介绍常用的几个端口50070端口,查看NameNode状态,如图4-59所示4-core-default.xml4-60core-site.xml中自4-如果读者通过该端口这个页面,以为着NameNode节点是存活的50075端口,查看DataNode的,如图4-61所示4-该地址和端口的定义位于hdfs-default.xml中,如图4-62所示,读者可以在hdfs-中自行修改4-50090端口,查看SecondaryNameNode50030端口,查看JobTracker状态的,如图4-63所示4-4-5006050060端口,查看TaskTracker,如图4-65所示4-mapred-default.xml4-66mapred-site.xml中自行修4-HDFS的java接搭建Hadoop开发环在工作中写完的各种代码是在服务器中运行的,HDFS的操作代码也不例外。在开发阶段,使用windows下的eclipse作为开发环境,运行在虚拟机中的HDFS。也就是通过在本地的eclipse中的java代码linux中的hdfs要使用宿主机中的java代码客户机中的hdfs,需要保证以下几点确保宿主机与客户机的网络是互通确保宿主机和客户机的都关闭,因为很多端口需要通过,为了减少配置,直接关闭那么windows也要使用root用户,否则会报权限异常在eclipse项目中覆盖hadoop的 .apache.hadoop.fs.FileUtil类的checkReturnValue方法,如图4-661,目的是为了避免权限错误4-如果读者在开发过程中出现权限等问题,请按照本节的提示检查自己的环境使用 api读写数hadoopHDFS操作中,有个非常重要api,是.apache.hadoop.fs.FileSystem,这是用户代码操作HDFS的直接,该类含有操作HDFS的各种方法,类似于jdbc中操作数据库的直接是Connection类。 怎么获得一个FileSystem对象哪Stringuri="hdfs://40:9000/";Configurationconf=newConfiguration();FileSystemfs=FileSystem.get(URI.create(uri),以上代码中,要注意调用的是FileSystem的静态方法get,传递两个值给形式参数,第一个的HDFS地址,该地址的协议是hdfs,ip是40,端口是9000.。这个地core-site.xml中指定的,读者可以使用自己环境的配置文件中的设创建文件夹使用使用HDFS的 命令查看一下 下的文件情况,如图4-67所示4-在HDFS的 下创建文件夹,代码如finalStringpathString=booleanexists= booleanresult=fs.mkdirs(ne }以上代码中创建的文件夹完整路径是“/d1”。第二行代码是使exitst判断文件夹是否存在;如果不存在,执行创建操作。创建文件夹,调用的是mkdirs方法,返true,表示创建成功;如果是false,表示创建失败。现在查看一下是否成功了,如 4-68,可见创建成功了4-写文件可以向HDFS写入文件,代finalStringpathString=finalFSDataOutputStreamfsDataOutputStream=fs.create(ne IOUtils.copyBytes(newByteArrayInputStream("mynameisWUCHAO".getBytes()),fsDataOutputStream,configuration,true);第一行代码表示创建的文件是在刚才创建的d1文件夹下的文件f1;第二行是调用create方法创建一个通向HDFS的输出流;第三行是通过调用hadop的一个工具类IOUils的静态方法cyByes把一个字符串发送给输出流中。该静态方法有四个参数,第一个参数输入流,第二个参数是输出流,第三个参数是配置对象,第四个参数是布尔值,如果是tre表示数据传输完毕后关闭流。现在看一下是否创建成功了,如图4-69所示4-读文件现在把刚才写入到HDFS的文件“/d1/f1”读出来,代码如下finalStringpathString=finalFSDataInputStreamfsDataInputStream=fs.open(ne IOUtils.copyBytes(fsDataInputStream,System.out,configuration,true);第三行还是调用IOUtils.copyBytes方法,输出的目的地是控制台。见图4-704-查 列表和文件详细信息可以把 下的所有文件 显示出来,代码如finalStringpathString=finalFileStatus[]listStatus= for(FileStatusfileStatus:listStatus)finalStringtype finalshortreplication=finalStringpermission=finallonglen=finalPathpath=}调用listStatus方得到一个指定路径下的所有文件和文件夹,每一个用FileStatus表示。我删除文件或可以删除某个文件或者路径,代码如finalStringpathString= th("/d1"),true); 除了上面列出的fs的方法外,还有很多方法,请读者自己查阅apiHDFSRPCRPC是过程调用(RemoteProcedureCall),即调用其他虚拟机中运行的javaHDFS的运行就是建立在此基础之上的。本章通过分析实现一个简单的RPC程序来分析下面的代码是服务端代码。publicclassMyServerpublicstaticfinalintSERVER_PORT=publicstaticfinalStringSERVER_ADDRESS=publicstaticvoidmain(String[]args)throwsIOExceptionfinalServerserver=RPC.getServer(newMyBiz(),SERVER_ADDRESS,SERVER_PORT,newConfiguration());}}在于第5行的RPC.getServer方法,该方法有四个参数,第一个参数是被调用的务器。这样,服务器就在指定端口客户端的请求。下面的代码是被调用的对象类-------------------------------------------------------------------------------------------------------------------------------publicclassMyBizMyBizable{publicstaticlong=2345234L;public ");return" o"+name;}publiclonggetProtocolVersion(Stringprotocol,longthrowsIOExceptionreturn}}-------------------------------------------------------------------------------------------------------------------------------被调用的对象实现了接口MyBizable,这里面有两个方法被实现,一个就 方法,另一个是getProtocalVersion方法。这 o方法有个输出语句下面的代码是调用类的接口定义-------------------------------------------------------------------------------------------------------------------------------publicinterfaceMyBizableextends o(String}-------------------------------------------------------------------------------------------------------------------------------这个接口中的方法就是刚才的Biz中实现的方法。接口继承的VersionedProtocal,是端口一致。服务端被调用的类必须继承这个接口VersionedProtocal。下面是客户端代码,这里使用的调用对象的接口-------------------------------------------------------------------------------------------------------------------------------publicclassMyClientpublicstaticvoidmain(String[]args)throwsExceptionfinalMyBizableproxy=(MyBizable)RPC.getProxy(MyBizable.class,MyBiz.BIZ_VERSION,newInetSocketAddress(MyServer.SERVER_ADDRESS,MyServer.SERVER_PORT),newConfiguration());finalStringresult=proxy. }}-------------------------------------------------------------------------------------------------------------------------------以上代码中在于RPC.gePry(),该方法有四个参数,第一个参数是被调用的接口第二个是客户端版本号,第三个是服务端地址。返回的对象,就是服务端对象的,内部就是使用j.lang.Pxy实现的。运行时,先启动服务端,再启动客户端。读者可以服务端和客户端输出信息从上面的RPC调用中,可以看出:在客户端调用的业务类的方法是定义在业务类的接口中的。该接口实现了VersionedProtocal接口。现在在命令行执行jps命令,查看输出信息,如图5-1所示5-MyServer。大家可以联想到搭建hadoop环境时,也执行过该命令用来判断hadoop的进程是否全部启动3。那么可以判断,hadoop启动时5java进程也应该是RPC的服务端。观察NameNode的源代码,如图5-2,可以看到NameNode确实创建了RPC的服务端。5-NameNode由5.1NameNode本身就是一个java进程。观察图5-2中RPC.getServer()方法的第一个参数,发现是this,说明NameNode本身就是一个位于服务端的被调用对象,即NameNode中的方法是可以被客户端代码调用的。根据RPC运行原理可知,NameNode查看NameNode的源码,如图5-3所示5-NameNodeClientProtocal、DatanodeProtocal、NamenodeProtocal等接这个接口是供客户端调用的。这里的客户端不是指的自己写的代码,而是hadoopDFSClientDFSClientClientProtocal中的方法,完该接口中的方法大部分是对HDFS的操作,如create、delete、mkdirs、rename等DataNode本节点的状态和block信息。NameNode不能向DataNode发送消息,只能通过该接口中方法的返回值向DataNode传递消息SecondaryNameNode调用这个接口是供SecondaryNameNode调用的。SecondaryNameNode是专门做DataNode按照分析NameNode的思路,看一下DataNode的源码接口,如图5-45-这里有两个接口,分别是InterDatanodeProtocal、ClientDatanodeProtocal。这里就不展 的写数据过程分通过FileSystem类可以操控HDFS,那就从这里开始分析写数据到HDFS的过程。在向HDFS写文
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 软件测试工具的使用与效果评估试题及答案
- 计算机四级网软件测试技术的应用试题及答案
- 石油开采业的环境保护与生态文明建设考核试卷
- 监理师考试思维导图的使用技巧试题及答案
- 网络技术应急响应机制试题及答案
- 硝酸铈制备工艺与稀土材料研究考核试卷
- 网络技术考试知识点查缺补漏的关键试题及答案
- 金属废料加工绿色制造技术研究考核试卷
- 通信原理与终端设备基础考核试卷
- 数据库性能测试方法试题及答案
- 理论联系实际谈一谈如何维护政治安全?参考答案1
- 2025年中国冷库用叉车数据监测研究报告
- 2025年高考第二次模拟考试物理(浙江卷)(参考答案)-20250416-113627
- 2025年化妆师职业技能考试试题及答案
- GA 1812.1-2024银行系统反恐怖防范要求第1部分:人民币发行库
- 2025至2030中国锂电池粘结剂市场竞争状况及融资并购研究报告
- 聋校语文课程标准解读
- 人工智能设计伦理知到智慧树章节测试课后答案2024年秋浙江大学
- 《陆上风电场工程概算定额》NBT 31010-2019
- 干部人事档案转递单表样
- 关于中国文化遗产北京故宫的资料
评论
0/150
提交评论