




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章分布式系统——HDFS的 是分布式文件管理系统。系统,可让多机器上的多用户文件和空间。看做是wWindows的文件系统。在wWindows的文件着有一套很多层次的文件夹 HDFS的 HDFS的操作命令类似于lLinuxs对文件的操作,如ls、mkdir、rm等。各个hadoop进程。-ls路径-ls路径-lsr路径 -du路径 -dus路径 <hdfs路径<hdfs路径-getmerge源路径linux路径-cathdfs路径-texthdfs路径径[linux目的路径-tailf文件--od[-R]<权限模式>[路径-chownR属主][:[属组]]-chgrpR][的地方,会特别“linux路径”或者“hdfs路径”。如果没有明确,意味着是hdfs 上图中的路径是hdfs根 用户登录,因此会hdfs的 -lsr递归显 -du统 -dus汇总统 -count统计文件(夹)-mv该命令选项表示移动hdfs的文件到指定的hdfs ,如图4-7所示。.cp -rm删除文件/4-9所示。 -rmr4-10所示-put-copyFromLocal从本地getmerge该命令选项的含义是把hdfs指 下的所有文件内容合并到本地linux的文件中,如4-13-cat-text-mkdir-setrep本,HDFS会自动执行文件的工作,产生新的副本。本,如图4-17所示。.4-17中,我们对/user文件夹进行的操作,使用了选项-R,那么/user/root下的文件abc的副本数发生了改变。-touchz -tail当文件内容变化时,也会自动显示,如图4-21所示。 od该命令选项的使用类似于linux的s od用法,作用是修改文件的权限,如图4-22所示。.-chown上图中把文件/emptyfile的属主由root修改为 也可以同时修改属组,如图4-25所示。在图4-25中,把文件/emptyfile的属主和属组都修改为 -chgrp-help令选项的用法都显示出来,如图4-28所示。希望新的版本以后改进。我们通过hadoops上传的文件是存放在DataNode的block中,通过linuxs是看不到文件的,只能看到block。HDFS:把客户端的大文件存放在很多节点的数据块中。在这里,出现了三个:文件、节点、数据块。HDFS就是围绕着这三个设计的,我们在学习的时候也要紧抓住这三个来学习。NameNode的作用是管理文件结构,是管理数据节点的。名字节点两套数据,一套是文件与数据块之间的关系,另一套是数据块与节点之间的关系。前一套数据是静态的,是存放在磁盘上的,通过fsimage和edits文件来;后一套数据是动态的,不持中有个文件叫做core-default.xml,如图4-51所示。的存放位置,如图4-52所示。值出来。那么,第150行的变量hadoop.tmp.dir的值是在我们上一章的配置文件core-site.xml中配置的,值是/usr/local/hadoop/tmp。可以看出,这两个文件的位置是在linux文件系统的/usr/local/hadoop/tmp/dfs/name下。 DataNode的作用是HDFS中真正数据的数据的时候是按照block为单位读写数据的。block是hdfs读写数据的基本单位。类推,可以划分出很多的block。每个block就是64MB大小。64MB64MBcore-site.xml中覆盖该值。注意单位是字DataNode3份数据都看文件core-default.xml,如图4-56所示。此,上图中只有2个block文件。hdfsblock存在HDFSweb50070端口,查看NameNode状态4-5950075端口,查看DataNode的4-6150090端口,查看SecondaryNameNodeHDFS的java接我们在工作中写完的各种代码是在服务器中运行的,HDFS的操作代码也不例外。在开那么windows也要使用root用户,否则会报权限异常eclipsehadooporg.apache.hadoop.fs.FileUtilcheckReturnValue方法,如图4-661,目的是为了避免权限错误 api读写数这是我们用户代码操作HDFS的直接,该类含有操作HDFS的各种方法,类似于jdbc中操作数据库的直接是Connection类。Stringuri="hdfs://40:9000/";Configurationconf=newConfiguration();FileSystemfs=FileSystem.get(URI.create(uri),FileSystemget,传递两个值给形式参数,第一个的HDFS地址,该地址的协议是hdfs,ip是40,端口是9000.。这个地 finalStringpathString=booleanexists=fs.exists(newbooleanresult=fs.mkdirs(newPath(pathString));}mkdirs方法,返回值是布尔值,如果是true,表示创建成功;如果是false,表示创建失败。finalStringpathString=IOUtils.copyBytes(newByteArrayInputStream("mynameisWUCHAO".getBytes()),fsDataOutputStream,configuration,true);第二行是调用create方法创建一个通向HDFS的输出流;参数是配置对象,第四个参数是布尔值,如果是true表示数据传输完毕后关闭流。finalStringpathString=finalFSDataInputStreamfsDataInputStream=fs.open(newPath(pathString));IOUtils.copyBytes(fsDataInputStream,System.out,configuration,true);第三行还是调用IOUtils.copyBytes方法,输出的目的地是控制台。见图4-70 finalStringpathString=finalFileStatus[]listStatus=fs.listStatus(newfor(FileStatusfileStatus:listStatus)finalStringtype finalshortreplication=finalStringpermission=finallonglen=finalPathpath=fileStatus.getPath();}调用listStatus方得到一个指定路径下的所有文件和文件夹,每一个用FileStatus表示。我finalStringpathString=//fs.delete(newPath("/d1"),true); HDFSRPCRPC是过程调用(RemoteProcedureCall),即调用其他虚拟机中运行的java下面的代码是服务端代码。publicclassMyServerpublicstaticfinalintSERVER_PORT=publicstaticfinalStringSERVER_ADDRESS=publicstaticvoidmain(String[]args)throwsIOExceptionfinalServerserver=RPC.getServer(newMyBiz(),SERVER_ADDRESS,SERVER_PORT,newConfiguration());}}服务器。这样,服务器就在指定端口客户端的请求。publicclassMyBizMyBizable{publicstaticlong L;public ");return" o"+name;}publiclonggetProtocolVersion(Stringprotocol, throwsIOExceptionreturn}} publicinterfaceMyBizableextends o(String}这个接口中的方法就是刚才的Biz中实现的方法。接口继承的VersionedProtocal,是端口一致。服务端被调用的类必须继承这个接口VersionedProtocal。publicclass publicstaticvoidmain(String[]args)throwsExceptionfinalMyBizable =(MyBizable)RPC.get MyBiz.BIZ_VERSION,newInetSocketAddress(MyServer.SERVER_ADDRESS,MyServer.SERVER_PORT),newConfiguration());finalStringresult= }}以上代码中在于RPC.get(),该方法有四个参数,第一个参数是被调用的接口理,内部就是使用java.lang.实现的。口中的。该接口实现了VersionedProtocal接口。MyServerhadoophadoop的RPC的服务端。即NameNode中的方法是可以被客户端代码调用的。根据RPC可以看到NameNode实现了 Protocal、DatanodeProtocal、NamenodeProtocal等接 这个接口是供客户端调用的。这里的客户端不是指的我们自己写的代码,而是hadoop的一个类叫做DFS。在DFS 中会调用Protocal中的方法,完本节点的状态和block信息。NameNode不能向DataNode发送消息,只能通过该接口中方法的返回值向这个接口是供SecondaryNameNode调用的。SecondaryNameNode这里有两个接口,分别是InterDatanodeProtocal、DatanodeProtocal。这里就不展这个方法是抽象类,没有实现。那么我们只能向他的子类寻找实现。FileSystem有个子类是DistributedFileSystem,在我们的伪分布环境下使用的就是这个类。我们可以看到DistributedFileSystem的这个方法的实现,如图5-6所示。create方法做了什么事情。现在进入这个方法的实现,如图5-7所示。5-8在图5-8中,可以看到,这个类是DFS 的内部类。在类内部通过调用5-9所示。5-9namenode其实是Protocal接口。那么,这个对象是什么时候创建的那?如图5-10所示。可以,namenode对象是在DFS 的构造函数调用时创建的,即当DFS 在的时候,namenode对象已经存在了。至此,我们可以看到,使用FileSystem对象的apiHDFS,其实是通过DFS 象NameNode中的方法HDFS的。这里的DFS 是RPC机制的客户端,NameNode是RPC机制的服务端的调用对象,整个调用过程如图5-11所示。 是个很重要的类,从名称就可以看出,他表示HDFS的 是整个HDFS的RPC机制的客户端部分。我们对HDFS的操作,是通过FileSsy
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教育多元化教学考核试卷
- 烟草机械装备的故障诊断专家系统考核试卷
- 家具企业产品线规划与市场定位考核试卷
- 森林火灾防控新技术研究考核试卷
- 煤炭加工过程中的职业病防治考核试卷
- 木制容器涂装与防腐考核试卷
- 个体小店用工合同标准文本
- 买卖车辆纠纷合同标准文本
- 出售苗木转让合同范例
- 分割户外家具合同范例
- 大模型原理与技术-课件 chap6 大模型微调
- 军人抚恤优待条例培训2024
- 16J914-1 公用建筑卫生间
- 教学课件:《新时代新征程》
- 超市经营业务管理规范标准
- 微生物检验的基本操作技术
- 实验RNA提取方法及原理ppt课件
- 励志高三班高考冲刺百日誓师会主题班会课件下载(23P)
- 海康威视枪机摄像机检测报告精编版
- 中国石油天然气集团公司工程建设承包商管理办法(DOC14页)
- 行车运行维护保养记录表
评论
0/150
提交评论