Hadoop01第4讲HDFS的javaAPI及应用详解课件_第1页
Hadoop01第4讲HDFS的javaAPI及应用详解课件_第2页
Hadoop01第4讲HDFS的javaAPI及应用详解课件_第3页
Hadoop01第4讲HDFS的javaAPI及应用详解课件_第4页
Hadoop01第4讲HDFS的javaAPI及应用详解课件_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第4章 HDFS的javaAPI及操作第1页,共32页。知识点回顾分布式文件系统与HDFSHDFS体系结构HDFS的基本概念HDFS的shell操作第2页,共32页。本章内容使用myeclipse查看hadoop源码javaAPI操作HDFSRPC的原理及应用RPC示例3第3页,共32页。使用myeclipse查看hadoop源码(1)使用myeclipse查看hadoop源码的步骤1.在eclipse(myeclipse)中创建一个java project,项目名为hadoopsrc2.将hadoop开源文件解压后,将src目录下core、hdfs、mapred三个文件夹拷贝到hadoops

2、rc项目的src下3.调整hadoopsrc项目的目录结构(1)找到项目的build path,将Source选项下的hadoopsrc/src删除(2)找到项目的build path,在Source选项下,点击Add Folder按钮添加src下的core、hdfs、mapred三个目录。4第4页,共32页。使用myeclipse查看hadoop源码(2)使用myeclipse查看hadoop源码的步骤4.添加jar包:在hadoopsrc项目的build path下,选择Add External Jars添加外部jar包,包括:hadoop/lib下所有jar包hadoop/JSP-2.1

3、下所有jar包ant.jar经过以上四步,就可以成功将hadoop的源码加入hadoopsrc项目下,以备查看。5第5页,共32页。本章内容使用myeclipse查看hadoop源码javaAPI操作HDFSRPC的原理及应用RPC示例6第6页,共32页。HDFS的javaAPI使用Hadoop提供的javaAPI对HDFS进行操作。对HDFS文件进行操作的常用类:IOUtilsFileSystem7第7页,共32页。HDFS的JavaAPI_读文件使用IOUtils进行读文件的示例:import .URLimport org.apache.hadoop.io.IOUtilsimport or

4、g.apache.hadoop.fs.FsUrlStreamHandlerFactory第8页,共32页。HDFS的java访问接口FileSystemFileSystem可以实现的操作包括:写文件 create读取文件 open删除文件delete创建目录 mkdirs删除文件或目录 delete列出目录的内容 listStatus显示文件系统的目录和文件的元数据信息 getFileStatus第9页,共32页。.URIorg.apache.hadoop.conf.Configurationorg.apache.hadoop.fs.FileSystemorg.apache.hadoop.fs

5、.Pathorg.apache.hadoop.io.IOUtilsHDFS的java访问接口FileSystem第10页,共32页。HDFS的FileSystem读取文件获取FileSystem对象:private static FileSystem getFileSystem() throws Exception Configuration conf = new Configuration(); URI uri = new URI(hdfs:/hadoop240:9000); final FileSystem fileSystem = FileSystem.get(uri , conf);

6、return fileSystem; 第11页,共32页。HDFS的FileSystem读取文件调用fileSystem的open方法读取文件示例: private static void readFile() throws Exception FileSystem fileSystem = getFileSystem();FSDataInputStream openStream = fileSystem.open(new Path(hdfs:/itcast0106:9000/aaa);IOUtils.copyBytes(openStream, System.out, 1024, false)

7、;IOUtils.closeStream(openStream);第12页,共32页。HDFS的FileSystem目录调用fileSystem的mkdirs方法创建目录示例:private static void mkdir() throws Exception FileSystem fileSystem = getFileSystem();fileSystem.mkdirs(new Path(hdfs:/itcast0106:9000/bbb);调用fileSystem的delete方法删除文件或目录示例: private static void rmdir() throws Except

8、ion FileSystem fileSystem = getFileSystem();fileSystem.delete(new Path(hdfs:/itcast0106:9000/bbb);第13页,共32页。HDFS的FileSystem遍历目录遍历目录,使用FileSystem的listStatus(path)如果要查看file状态,使用FileStatus对象private static void list() throws ExceptionFileSystem fileSystem = getFileSystem();FileStatus listStatus = fileSy

9、stem.listStatus(new Path(hdfs:/itcast0106:9000/);for (FileStatus fileStatus : listStatus) String isDir = fileStatus.isDir()?目录:文件;String name = fileStatus.getPath().toString();System.out.println(isDir+ +name);第14页,共32页。FileSystem总结用户代码操作HDFS进行文件及目录的操作,是直接调用FileSystem的方法完成的。因此,使用hadoop提供的javaAPI操作HDF

10、S文件,最重要的是获取及使用FileSystem对象。第15页,共32页。本章内容使用myeclipse查看hadoop源码javaAPI操作HDFSRPC的原理及应用RPC示例16第16页,共32页。Remote Procedure CallRPC远程过程调用协议它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。hadoop的整个体系结构就是构建在RPC之上的(见org.apac

11、he.hadoop.ipc)。第17页,共32页。RPC示例创建相关业务接口:Bizablepublic interface Bizable extends VersionedProtocolpublic abstract String hello(String name); class Biz implements Bizablepublic String hello(String name)System.out.println(被调用了);return hello +name;public long getProtocolVersion(String protocol, long clie

12、ntVersion) throws IOException System.out.println(Biz.getProtocalVersion()=+MyServer.VERSION);return MyServer.VERSION;第18页,共32页。RPC示例创建服务器类public class MyServer public static int PORT = 3242;public static long VERSION = 23234l;public static void main(String args) throws IOException final Server serve

13、r = RPC.getServer(new Biz(), 127.0.0.1, PORT, new Configuration();server.start();第19页,共32页。RPC示例创建客户端类public class MyClient public static void main(String args) throws IOException final InetSocketAddress inetSocketAddress = new InetSocketAddress(127.0.0.1, MyServer.PORT);final Bizable proxy = (Bizab

14、le) RPC.getProxy(Bizable.class, MyServer.VERSION, inetSocketAddress, new Configuration();final String ret = proxy.hello(“world);System.out.println(ret);RPC.stopProxy(proxy);第20页,共32页。RPC调用流程前面的示例在运行时:先启动服务端,再运行客户端,可以分析查看服务端和客户端的输出信息。从上面的RPC调用中,可以看出:在客户端调用的业务类的方法是定义在业务类的接口中的。该接口实现了VersionedProtocal接口

15、。现在我们通过命令行执行jps命令:查看输出信息如下图所示:第21页,共32页。RPC的调用过程通过上图中jps命令可以看到一个java进程:MyServer,该进程正是我们刚刚运行的rpc的服务端类MyServer因此,可以联想到我们搭建hadoop环境时,也执行过该命令来判断hadoop进程是否全部启动。Hadoop启动时产生的5个java进程也应该是RPC的服务端。可以通过NameNode的源代码,可以看到NameNode确实创建了RPC服务端。(如下页图中所示)22第22页,共32页。NameNode源代码(1)23第23页,共32页。NameNode源码分析NameNode本身就是一

16、个位于服务端的被调用的对象,即NameNode中的方法是可以被客户端代码调用的。根据RPC运行原理可知,NameNode暴露给客户端的方法是位于接口中的。通过下页图中的代码可以看到NameNode实现了ClientProtocol、DataNodeProtocol、NamenodeProtocol等接口。24第24页,共32页。NameNode源代码(2)25第25页,共32页。ClientProtocolClientProtocol是供客户端调用的,是客户端(FileSystem)与NameNode通信的接口。该接口中的方法大部分是对HDFS的操作,如create、delete、mkdirs

17、、rename等。第26页,共32页。DatanodeProtocolDataNodeProtocol接口是DataNode调用的,DataNode调用该接口中的方法向NameNode报告本节点的状态和block信息。NameNode不能向DataNode发送消息,只能通过该接口中的方法的返回值向DataNode传递消息。第27页,共32页。NamenodeProtocolNameNodeProtocol接口是SecondaryNameNode调用的SecondaryNameNode是专门做NameNode中edits文件向fsimage合并数据的。第28页,共32页。29练习题练习shell命令在HDFS创建一个文本文件hadoop.test。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论