Hadoop源码学习笔记(5) ——回顾DataNode和NameNode的类结构
Hadoop源码学习笔记(5)
——回顾DataNode和NameNode的类结构
之前我们简要的看过了DataNode的main函数以及整个类的大至,现在结合前面我们研究的线程和RPC,则可以进一步看看几个对象的大至结构以及调用关系。
我们知道,三个结构(客户端,NameNode,DataNode)是能过网络调用的,走的是RPC。那在底层通讯时谁做服务器谁做客户端呢?我们先回顾一下这三者关系:

这样看,看不出,我们进入源码,看一下夹在中间的NameNode:

在这个initialize函数中,我们找了它的影子,RPC.getServer,显然,这里是在做服务端,然后再往后观察,也没有启动其它线程之类的,然后getServer传入参数,第一个是this,说明这个服务就是把自己当成了RPC服务对象。
既然当成了RPC服务,那事必要继承VersionedProtocol接口咯,我们看下这个类的定义处:

我们发现,并没有直接继承VersionedProtocol接口,但进一步看:ClientProtocol, DatanodeProtocol,NamenodeProtocol,RefreshAuthorizationPolicyProtocol这四个接口都又继承了VersionedProtocol接口。
从字面意思,或里面的定义说明来看,这四个接口,分别实现了给客户端(FSClient),DataNode,NameNode,刷身份认证的几块功能来应用的。大牛考虑的还是很周道,虽说这个NameNode是一个大的RPC服务的处理者,但是通过接口,又将其划分成多个子功能块。
既然它是一个服务端(server),那另外两个呢?我们看下
我们先找到客户端处理类:org.apache.hadoop.hdfs.DFSClient,随便找个处理类:

我们发现,比如这个listPaths,直接处理方法,就是调用namenode.GetListing。而这个namenode是啥,追查一下,找到其定义:

很明显,这个是跟NameNode类中的接口ClientProtocol同一个,然后其实使化呢:


我们找到这个RPC客户端的影子。(当然有人说,上面用的是namenode对象,这里创建的是rpcNameNode么,这里是又包了一层,后面再来研究)
同样,我们再看一下DataNode:
在定义中,看到:

这个定义类型是DatanodeProtocol,也是NameNode服务上实现的接口。
这个对象的初使化,在startDataNode中,我们也找到了RPC的影子:

这样,大体过程清晰了,NameNode架设了一个RPC服务,其他的都与之相联,至于各个模块间通讯内容有哪些,简单了,就直接看看ClientProtocol, DatanodeProtocol,NamenodeProtocol,RefreshAuthorizationPolicyProtocol这几个接口。
程序结构呢,比较容易了,DataNode是一个大线程,里面一个死循环,不断向NameNode通过RPC发消息。 NameNode,就是一个服务,然后程序在Server.join中卡住,不断的接收发来的RPC请求。 客户端DFSClient,是一个简单的处理类,每个功能函数请求,都转向到NameNode服务中处理。
OK,大体上有了初步的了解后,接下来我们就要抓住几根线,看各个服务是如何处理文件命令的。下回分解。
Hadoop源码学习笔记(5) ——回顾DataNode和NameNode的类结构的更多相关文章
- Hadoop源码学习笔记(3) ——初览DataNode及学习线程
Hadoop源码学习笔记(3) ——初览DataNode及学习线程 进入了main函数,我们走出了第一步,接下来看看再怎么走: public class DataNode extends Config ...
- Hadoop源码学习笔记(6)——从ls命令一路解剖
Hadoop源码学习笔记(6) ——从ls命令一路解剖 Hadoop几个模块的程序我们大致有了点了解,现在我们得细看一下这个程序是如何处理命令的. 我们就从原头开始,然后一步步追查. 我们先选中ls命 ...
- Hadoop源码学习笔记(2) ——进入main函数打印包信息
Hadoop源码学习笔记(2) ——进入main函数打印包信息 找到了main函数,也建立了快速启动的方法,然后我们就进去看一看. 进入NameNode和DataNode的主函数后,发现形式差不多: ...
- Hadoop源码学习笔记(1) ——第二季开始——找到Main函数及读一读Configure类
Hadoop源码学习笔记(1) ——找到Main函数及读一读Configure类 前面在第一季中,我们简单地研究了下Hadoop是什么,怎么用.在这开源的大牛作品的诱惑下,接下来我们要研究一下它是如何 ...
- Hadoop源码学习笔记(4) ——Socket到RPC调用
Hadoop源码学习笔记(4) ——Socket到RPC调用 Hadoop是一个分布式程序,分布在多台机器上运行,事必会涉及到网络编程.那这里如何让网络编程变得简单.透明的呢? 网络编程中,首先我们要 ...
- Hadoop源码学习笔记之NameNode启动场景流程一:源码环境搭建和项目模块及NameNode结构简单介绍
最近在跟着一个大佬学习Hadoop底层源码及架构等知识点,觉得有必要记录下来这个学习过程.想到了这个废弃已久的blog账号,决定重新开始更新. 主要分以下几步来进行源码学习: 一.搭建源码阅读环境二. ...
- Hadoop源码学习笔记之NameNode启动场景流程四:rpc server初始化及启动
老规矩,还是分三步走,分别为源码调用分析.伪代码核心梳理.调用关系图解. 一.源码调用分析 根据上篇的梳理,直接从initialize()方法着手.源码如下,部分代码的功能以及说明,已经在注释阐述了. ...
- Hadoop源码学习笔记之NameNode启动场景流程二:http server启动源码剖析
NameNodeHttpServer启动源码剖析,这一部分主要按以下步骤进行: 一.源码调用分析 二.伪代码调用流程梳理 三.http server服务流程图解 第一步,源码调用分析 前一篇文章已经锁 ...
- Hadoop源码学习笔记之NameNode启动场景流程五:磁盘空间检查及安全模式检查
本篇内容关注NameNode启动之前,active状态和standby状态的一些后台服务及准备工作,即源码里的CommonServices.主要包括磁盘空间检查. 可用资源检查.安全模式等.依然分为三 ...
随机推荐
- django系列3.3--view视图函数, render, reverse(未完待续)
1.view视图函数 urls分发之后所用到的处理函数 2.render 用于渲染页面 在views.py中常用 from django.shortcuts import render, HttpRe ...
- C# winform中listview排序
本文解决方案是采用下面链接中的解决方案.十分感谢这篇文章的作者bright:http://blog.163.com/shensc@126/blog/static/1312896522010614103 ...
- Problem D: GJJ的日常之暴富梦(水题)
Contest - 河南省多校连萌(四) Problem D: GJJ的日常之暴富梦 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 693 Solve ...
- 数论入门2——gcd,lcm,exGCD,欧拉定理,乘法逆元,(ex)CRT,(ex)BSGS,(ex)Lucas,原根,Miller-Rabin,Pollard-Rho
数论入门2 另一种类型的数论... GCD,LCM 定义\(gcd(a,b)\)为a和b的最大公约数,\(lcm(a,b)\)为a和b的最小公倍数,则有: 将a和b分解质因数为\(a=p1^{a1}p ...
- Python装饰器(函数)
闭包 1.作用域L_E_G_B(局部.内嵌.全局...): x=10#全局 def f(): a=5 #嵌套作用域 def inner(): count = 7 #局部变量 print a retur ...
- [HTML] <meta name="viewport" content="width=device-width,initial-scale=1.0">释义
<meta name="viewport" content="width=device-width,initial-scale=1.0">这是 HT ...
- angular核心原理解析1:angular自启动过程
angularJS的源代码整体上来说是一个自执行函数,在angularJS加载完成后,就会自动执行了. angular源代码中: angular = window.angular || (window ...
- 利用python 学习数据分析 (学习二)
内容学习自: Python for Data Analysis, 2nd Edition 就是这本 纯英文学的很累,对不对取决于百度翻译了 前情提要: 各种方法贴: https://w ...
- 机器学习笔记(五) K-近邻算法
K-近邻算法 (一)定义:如果一个样本在特征空间中的k个最相似的样本中的大多数属于某一个类别,则该样本也属于这个类别. (二)相似的样本,特征之间的值应该是相近的,使用k-近邻算法需要做标准化处理.否 ...
- 考试题 T1
题意分析 就是让你求 \[\sum_{i=1}^{|S|}val[i][gcd(a[i],x)=y]\] 那么接下来就是化简式子 \[\sum_{i=1}^{|S|}val[i][gcd(\frac{ ...