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的类结构的更多相关文章

  1. Hadoop源码学习笔记(3) ——初览DataNode及学习线程

    Hadoop源码学习笔记(3) ——初览DataNode及学习线程 进入了main函数,我们走出了第一步,接下来看看再怎么走: public class DataNode extends Config ...

  2. Hadoop源码学习笔记(6)——从ls命令一路解剖

    Hadoop源码学习笔记(6) ——从ls命令一路解剖 Hadoop几个模块的程序我们大致有了点了解,现在我们得细看一下这个程序是如何处理命令的. 我们就从原头开始,然后一步步追查. 我们先选中ls命 ...

  3. Hadoop源码学习笔记(2) ——进入main函数打印包信息

    Hadoop源码学习笔记(2) ——进入main函数打印包信息 找到了main函数,也建立了快速启动的方法,然后我们就进去看一看. 进入NameNode和DataNode的主函数后,发现形式差不多: ...

  4. Hadoop源码学习笔记(1) ——第二季开始——找到Main函数及读一读Configure类

    Hadoop源码学习笔记(1) ——找到Main函数及读一读Configure类 前面在第一季中,我们简单地研究了下Hadoop是什么,怎么用.在这开源的大牛作品的诱惑下,接下来我们要研究一下它是如何 ...

  5. Hadoop源码学习笔记(4) ——Socket到RPC调用

    Hadoop源码学习笔记(4) ——Socket到RPC调用 Hadoop是一个分布式程序,分布在多台机器上运行,事必会涉及到网络编程.那这里如何让网络编程变得简单.透明的呢? 网络编程中,首先我们要 ...

  6. Hadoop源码学习笔记之NameNode启动场景流程一:源码环境搭建和项目模块及NameNode结构简单介绍

    最近在跟着一个大佬学习Hadoop底层源码及架构等知识点,觉得有必要记录下来这个学习过程.想到了这个废弃已久的blog账号,决定重新开始更新. 主要分以下几步来进行源码学习: 一.搭建源码阅读环境二. ...

  7. Hadoop源码学习笔记之NameNode启动场景流程四:rpc server初始化及启动

    老规矩,还是分三步走,分别为源码调用分析.伪代码核心梳理.调用关系图解. 一.源码调用分析 根据上篇的梳理,直接从initialize()方法着手.源码如下,部分代码的功能以及说明,已经在注释阐述了. ...

  8. Hadoop源码学习笔记之NameNode启动场景流程二:http server启动源码剖析

    NameNodeHttpServer启动源码剖析,这一部分主要按以下步骤进行: 一.源码调用分析 二.伪代码调用流程梳理 三.http server服务流程图解 第一步,源码调用分析 前一篇文章已经锁 ...

  9. Hadoop源码学习笔记之NameNode启动场景流程五:磁盘空间检查及安全模式检查

    本篇内容关注NameNode启动之前,active状态和standby状态的一些后台服务及准备工作,即源码里的CommonServices.主要包括磁盘空间检查. 可用资源检查.安全模式等.依然分为三 ...

随机推荐

  1. 【Oracle 12c】CUUG OCP认证071考试原题解析(31)

    31.choose the best answer Which statement is true regarding the USING clause in table joins? A) It c ...

  2. css3半圆

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. “全栈2019”Java异常第十七章:Error详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  4. “全栈2019”Java第一百一十一章:内部类可以被覆盖吗?

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. AutoCad2012新增类AcRxVariablesDictionary 可以获取所有变量名和值

    //AutoCad2012新增类 获取所有变量名和值 AcRxVariablesDictionary *dic=AcRxVariablesDictionary::get(); const AcArra ...

  6. 查看npm全局安装位置

    查看npm全局安装位置:npm config get prefix 设置位置:npm config set prefix 填写位置

  7. PHP 访问链接的3种方式

    对于php访问url的方法比价多,对于一些防护比较低的网站,可以轻易的实现刷网站浏览量的可能 1.fopen方式 function access_url($url) { if ($url=='') r ...

  8. 牛客Wannafly挑战赛26E 蚂蚁开会(树链剖分+线段树)

    传送门 题面描述 一颗n个节点的树,m次操作,有点权(该节点蚂蚁个数)和边权(相邻节点的距离). 三种操作: 操作1:1 i x将节点i的点权修改为x.(1 <= i <= n; 1 &l ...

  9. Struts2 漏洞系列之S2-001分析

    0x00 前言   最近在学习java的相关漏洞,所以Struts2的漏洞自然是绕不开的.为了更好的理解漏洞原理,计划把Struts2所有的漏洞自己都做一个复现.并且自己去实现相关的POC.相关的环境 ...

  10. 03-树2 List Leaves (25 分)

    Given a tree, you are supposed to list all the leaves in the order of top down, and left to right. I ...