设为首页 收藏本站
查看: 814|回复: 0

[经验分享] Hadoop日记Day11---主从节点接口分析

[复制链接]

尚未签到

发表于 2015-7-11 09:23:47 | 显示全部楼层 |阅读模式
一、NameNode 的接口分析
1. NameNode本质
  经过前面的学习,可以知道NameNode 本身就是一个java 进程。观察RPC.getServer()方法的第一个参数,发现是this,说明NameNode 本身就是一个位于服务端的被调用对象,即NameNode 中的方法是可以被客户端代码调用的。根据RPC 运行原理可知,NameNode暴露给客户端的方法是位于接口中的。
我们查看NameNode 的源码,如图1.1所示。
DSC0000.png

图 1.1

  可以看到NameNode 实现了ClientProtocal、DatanodeProtocal、NamenodeProtocal 等接口。
2. NameNode的接口
2.1 DFSClient 调用ClientProtocal
   这个接口是供客户端调用的。这里的客户端不是指的我们自己写的代码,而是hadoop 的一个类叫做DFSClient。在DFSClient 中会调用ClientProtocal 中的方法,完成一些操作。
  该接口中的方法大部分是对HDFS 的操作,如create、delete、mkdirs、rename 等。
2.2 DataNode 调用DatanodeProtocal
  这个接口是供DataNode 调用的。DataNode 调用该接口中的方法向NameNode 报告本节点的状态和block 信息。NameNode 不能向DataNode 发送消息, 只能通过该接口中方法的返回值向DataNode 传递消息。
2.3 SecondaryNameNode 调用NamenodeProtocal
  这个接口是供SecondaryNameNode 调用的。SecondaryNameNode 是专门做NameNode 中edits 文件向fsimage 合并数据的。
二、DataNode 的接口分析
  按照分析NameNode 的思路,看一下DataNode 的源码接口,如图2.1 所示。
DSC0001.png
图2.1

  这里有两个接口,分别是InterDatanodeProtocal、ClientDatanodeProtocal。这里就不展开分析了。读者可以根据上面的思路独立分析。

三、HDFS的数据处理过程分析
1. HDFS 的写数据过程分析
1.1 通过FileSystem 类可以操控HDFS
  那我们就从这里开始分析写数据到HDFS 的过程。在我们向HDFS 写文件的时候,调用的是FileSystem.create(Path path)方法,我们查看这个方法的源码,通过跟踪内部的重载方法,可以找到如图3.1所示的调用。

DSC0002.png
图3.1

  这个方法是抽象类,没有实现。那么我们只能向他的子类寻找实现。
1.2 查看DistributedFileSystem类的源码
  FileSystem 有个子类是DistributedFileSystem,在我们的伪分布环境下使用的就是这个类。我们可以看到DistributedFileSystem 的这个方法的实现,如图3.2示。
DSC0003.png

图3.2

  在图3.2中,注意第186 行的返回值FSDataOutputStream。这个返回值对象调用了自己的构造方法,构造方法的第一个参数是dfs.create()方法。
1.3 关注一下这里的dfs 对象是谁,create 方法做了什么事情。
  现在进入这个方法的实现,如图3.3 所示。
DSC0004.png
图3.3

  在图3.3 中,返回值正是第866行创建的对象。
1.4 查看这个类的源码
  如图3.4 所示。
DSC0005.png

图3.4

  在图3.4 中, 可以看到, 这个类是DFSClient 的内部类。在类内部通过调用namenode.create()方法创建了一个输出流。
1.5 我们再看一下namenode 对象是什么类型
  如图3.5所示。
DSC0006.png

图3.5

  在图3.5 中,可以看到namenode 其实是ClientProtocal 接口。
1.6 那么,这个对象是什么时候创建的那?
  查看该对象,如图3.6 所示。
DSC0007.png
图3.6

  可以看出,namenode 对象是在DFSClient 的构造函数调用时创建的,即当DFSClient 对象存在的时候,namenode 对象已经存在了。
1.7 整个调用过程
  至此,我们可以看到,使用FileSystem 对象的api 操纵HDFS,其实是通过DFSClient 对象访问NameNode 中的方法操纵HDFS 的。这里的DFSClient 是RPC 机制的客户端,NameNode是RPC 机制的服务端的调用对象,整个调用过程如图3.7所示。
DSC0008.png
图 3.7

  在整个过程中,DFSClient 是个很重要的类,从名称就可以看出,他表示HDFS 的Client,是整个HDFS 的RPC 机制的客户端部分。我们对HDFS 的操作,是通过FileSsytem 调用的DFSClient 里面的方法。FileSystem 是封装了对DFSClient 的操作,提供给用户使用的。
2. HDFS 的读数据过程分析
2.1 对FileSystem 类分析
  我们继续对FileSystem 类分析,读数据使用的是open(…)方法,我们可以看到源码,如图3.8 所示。
DSC0009.png

图3.8

  在图3.8 中,返回的是DFSClient 类中DFSDataInputStream 类.显而易见,这是一个内部类。
2.2 查看这个内部类的构造方法的源码
  这个内部类的构造函数,有两个形参,第一个参数是dfs.open(…)创建的对象。我们看一下方法的源码,如图3.9所示。
DSC00010.png
图3.9

  在图3.9的实现中,返回的是一个DFSInputStream 对象。
2.3 查看DFSInputStream这个类的构造方法源码
  该对象中含有NameNode 中的数据块信息。我们看一下这个类的构造方法源码,如图3.10 所示。
DSC00011.png

图3.10

2.4 查看获取数据块的信息方法源码
  在图3.10中,这个构造方法中最重要的语句是第1836 行,打开信息,从第1842 行开始是openInfo()的源代码,截图显示不全。注意第1841 行,是获取数据块的信息的。我们查看这一行的源代码,如图3.11所示。
DSC00012.png

图3.11

  从图3.11 中可以看到,获取数据块信息的方法也是通过调用namenode 取得的。这里的namenode 属性还是位于DFSClient 中的。通过前面的分析,我们已经知道,在DFSClient类中的namenode 属性是ClientProtocal。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-85397-1-1.html 上篇帖子: 深入剖析Hadoop程序日志 下篇帖子: Hadoop完全分布式配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表