Hadoop源码阅读(二):DataNode启动

说明:
1.Hadoop版本:3.1.3
2.阅读工具:IDEA 2023.1.2
3.源码获取:Index of /dist/hadoop/core/hadoop-3.1.3 (apache.org)
4.工程导入:下载源码之后得到 hadoop-3.1.3-src.tar.gz 压缩包,在当前目录打开PowerShell,使用tar -zxvf指令解压即可,然后使用IDEA打开hadoop-3.1.3-src文件夹,要注意配置好Maven或Gradle仓库,否则jar包导入会比较慢
5.参考课程:尚硅谷大数据Hadoop教程,hadoop3.x搭建到集群调优,百万播放_哔哩哔哩_bilibili

ctrl + n 全局查找datanode,进入DataNode.java

官方对其介绍如下:

/*********************************************************** DataNode is a class (and program) that stores a set of* blocks for a DFS deployment.  A single deployment can* have one or many DataNodes.  Each DataNode communicates* regularly with a single NameNode.  It also communicates* with client code and other DataNodes from time to time.** DataNodes store a series of named blocks.  The DataNode* allows client code to read these blocks, or to write new* block data.  The DataNode may also, in response to instructions* from its NameNode, delete blocks or copy blocks to/from other* DataNodes.** The DataNode maintains just one critical table:*   block-> stream of bytes (of BLOCK_SIZE or less)** This info is stored on a local disk.  The DataNode* reports the table's contents to the NameNode upon startup* and every so often afterwards.** DataNodes spend their lives in an endless loop of asking* the NameNode for something to do.  A NameNode cannot connect* to a DataNode directly; a NameNode simply returns values from* functions invoked by a DataNode.** DataNodes maintain an open server socket so that client code * or other DataNodes can read/write data.  The host/port for* this server is reported to the NameNode, which then sends that* information to clients or other DataNodes that might be interested.***********************************************************/

找到main方法

进入secureMain方法:

进入createDataNode方法:

  • 进入instantiateDataNode方法(初始化DN):

进入makeInstance方法(实例化对象):

进入DataNode类:

进入startDataNode方法,之后进行DN启动的一系列操作;

1.初始化DataXceiverServer(initDataXceiver)

startDataNode方法中:

进入initDataXceiver方法:

dataXceiverServer是一个服务(线程),DN利用该服务来接收客户端和其他DN发送过来的数据服务

2.初始化HTTP服务(startInfoServer)

startDataNode方法中:

进入startInfoServer方法,实例化了一个httpserver

进入DatanodeHttpServer类:(DatanodeHttpServer.java)

也是通过builder构建了一个HTTP server

3.初始化RPC服务器(initIpcServer)

startDataNode方法中:

进入initIpcServer,构建RPC服务器

4.向NameNode注册(refreshNamenodes)

startDataNode方法中:

进入refreshNamenodes(BlockPoolManager.java)

进入doRefreshNamenodes方法:

先是创建BPOS,然后启动所有的BPOS

  • 接下来进入createBPOS方法

可以看到根据NameNode个数创建对应的服务:

有多少个NN就创建多少个对应的服务

  • 进入startAll方法

可以看到,遍历了所有的bpos,依次进行启动

这里的offerServices是存储所有通过createBPOS方法创建的bpos的集合:

进入bpos.start()方法:

继续进入:

看到bpThread,表示开启一个线程,因此查找其run方法

可以看到通过connectToNNAndHandshake方法向NN进行注册:

  • 通过connectToNN方法来获取NN的RPC客户端对象,进入该方法:

进入DatanodeProtocolClientSideTranslatorPB

通过createNamenode方法来创建NN的RPC代理:

  • 通过register方法来向NN进行注册:

通过bpNamenode.registerDatanode将注册信息发送给NN(bpNamenode即创建的NN RPC proxy)

注意:这里的registerDatanode方法,由DN调用,但执行在NN

FSNamesystem中查找:

ctrl+alt+h查看该方法的调用:

于是到NameNodeRpcServer中去查找:

可以看到,DN的信息向NN注册这一步骤是在该方法中完成的;

接下来回到FSNamesystem中,进入blockManager.registerDatanode方法:

进入datanodeManager.registerDatanode:(DatanodeManager.java)

进入addDatanode

5.向NameNode发送心跳

回到startAll方法,再向前进入到BPServiceActor.java中的run方法

找到其中的offerService方法

进入offerService方法:

进入sendHeartBeat方法:

这里的bpNamenode是在connectToNNAndHandshake方法中获取到的NN的代理

因此该方法实际上是通过NN的RPC客户端将心跳信息发送给NN

因此该方法实际的实现是在NN中,因此在NameNodeRpcServer.java中搜索sendHeartbeat

通过handleHeartbeat来处理DN的心跳信息,进入该方法:

处理DN发送过来的心跳并作出相应;

继续进入handleHeartbeat方法:(DatanodeManager.java)

通过updateHeartbeat方法来更新心跳信息,进入该方法:(HeartbeatManager.java)

再次进入:(BlockManager.java)

继续进入:(DatanodeDescriptor.java)

进入updateHeartbeatState方法:

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/133941.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法|虚拟头节点|链表】移除链表元素

Leetcode203 移除链表元素 题目描述: 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出&#xf…

通过curl命令分析http接口请求各阶段的耗时等

目录 一、介绍二、功能1、-v 输出请求 响应头状态码 响应文本等信息2、-x 测试代理ip是否能在该网站使用3、-w 额外输出查看接口请求响应的消耗时间4、-o 将响应结果存储到文件里面5、-X post请求测试 (没测成功用的不多) 一、介绍 Curl是一个用于发送和接收请求的命令行工具和…

使用Python CV2融合人脸到新图片--优化版

优化说明 上一版本人脸跟奥特曼图片合并后边界感很严重,于是查找资料发现CV2还有一个泊松函数很适合融合图像。具体代码如下: import numpy as np import cv2usrFilePath "newpic22.jpg" atmFilePath "atm2.jpg" src cv2.imrea…

基于matlab实现的额 BP神经网络电力系统短期负荷预测未来(对比+误差)完整程序分享

基于matlab实现的额 BP神经网络电力系统短期负荷预测 完整程序: clear; clc; %%输入矢量P(15*10) P[0.2452 0.1466 0.1314 0.2243 0.5523 0.6642 0.7105 0.6981 0.6821 0.6945 0.7549 0.8215 0.2415 0.3027 0; 0.2217 0.1581 0.1408 0.23…

【JVM 内存结构丨堆】

堆 定义内存分配特点:分代结构对象分配过程Full GC /Major GC 触发条件引用方式堆参数堆内存实例 主页传送门:📀 传送 定义 JVM(Java Virtual Machine)堆是Java应用程序运行时内存管理的重要组成部分之一。堆内存用于存储Java对象…

深度思考ES面经

1 推荐文章 2万字详解,吃透 Elasticsearch 2 什么是倒排索引,为什么这么叫? 倒排索引(Inverted Index)是一种为快速全文搜索而设计的数据结构。它被广泛应用于搜索引擎,其中 Elasticsearch(简…

CVPR2023 RIFormer, 无需TokenMixer也能达成SOTA性能的极简ViT架构

编辑 | Happy 首发 | AIWalker 链接 | https://mp.weixin.qq.com/s/l3US8Dsd0yNC19o7B1ZBgw project, paper, code Token Mixer是ViT骨干非常重要的组成成分,它用于对不同空域位置信息进行自适应聚合,但常规的自注意力往往存在高计算复杂度与高延迟问题。…

软文推广在企业中运用的优势有哪些?

随着互联网的发展,越来越多的企业在推广方式上已经逐渐脱离于传统媒体,软文推广已经成为了企业宣传的主要方式。也有不少企业来找盒子进行推广,接下来媒介盒子就来告诉大家,企业进行软文推广的优势有哪些? 成本低 传统…

ELK 企业级日志分析系统 ELFK

目录 一、概述 二、组件介绍 2.1、ElasticSearch 2.2、Kiabana 2.3、Logstash 2.4、可以添加的其它组件:Filebeat 2.5、缓存/消息队列(redis、kafka、RabbitMQ等) 2.6、Fluentd 三、ELK工作原理 四、实例演示 1.ELK之 部署"E&q…

Leetcode 剑指Offer

求 12...n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 示例 1: 输入: n 3 输出: 6示例 2: 输入: n 9 输出: 45 一、信息 1.求一个等差数列的求和 2.要求不能使…

lua环境搭建数据类型

lua作为一门计算机语言,从语法角度个人感觉还是挺简洁的接下来我们从0开始学习lua语言。 1.首先我们需要下载lua开发工具包 在这里我们使用的工具是luadist 下载链接为:https://luadist.org/repository/下载后的压缩包解压后就能用。 2.接下来就是老生…

ARM 相关概念2

一、汇编中三种符号(汇编指令、伪指令、伪操作) 二、汇编基本格式 三、数据操作指令 3.1 数据搬移指令mov/mvn ① 示例 ② 立即数 0xff000000 >判断的数 1111 1111 0000 0000 0000 0000 0000 0000 >判断的数 0000 0000 0000 0000 0000 0000 1111…

企业架构LNMP学习笔记51

企业案例使用: 主从模式: 缓存集群结构示意图: 去实现Redis的业务分离: 读的请求分配到从服务器上,写的请求分配到主服务器上。 Redis是没有中间件来进行分离的。 是通过业务代码直接来进行读写分离。 准备两台虚…

华为云云耀云服务器L实例评测|部署前后端分离项目

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 学习测评 ✨特色专栏: MyS…

2022年全国研究生数学建模竞赛华为杯D题PISA架构芯片资源排布问题求解全过程文档及程序

2022年全国研究生数学建模竞赛华为杯 D题 PISA架构芯片资源排布问题 原题再现: 一、背景介绍 芯片是电子行业的基础,在当前日益复杂的国际形势下,芯片成了各个大国必争的高科技技术。本课题关注网络通信领域的交换芯片,传统的交…

Python爬虫逆向猿人学刷题系列——第七题

题目:采集这5页中胜点列的数据,找出胜点最高的召唤师,将召唤师姓名填入答案中 地址:https://match.yuanrenxue.cn/match/7 本题主要是考察字体的动态变化,同样也是从字体文件下手构造出映射关系就好,但本题…

TuyaOS开发学习笔记(2)——NB-IoT开发SDK架构、运行流程

一、SDK架构 1.1 架构框图 基于 TuyaOS 系统,可以裁剪得到的适用于 NB-IoT 协议产品接入的 SDK。SDK 将设备配网、上下行数据通信、产测授权、固件 OTA 升级等接口进行封装,并提供相关函数。 1.2 目录结构 1.2.1 TuyaOS目录说明 adapter:T…

70、Spring Data JPA 的 自定义查询(全手动,自己写完整 SQL 语句)

1、方法名关键字查询(全自动,既不需要提供sql语句,也不需要提供方法体) 2、Query查询(半自动:提供 SQL 或 JPQL 查询) 3、自定义查询(全手动) ★ 自定义查询&#xff08…

范文展示,如何三步写出一篇满意的论文

第一步:输入文章关键信息 文章标题,写论文的话即为拟定的论文标题,例如这篇范文中的题目为“阳明心学研究” 关键词,可以写出多个论文主题相关的关键词,用逗号分开,例如这篇范文中只写了一个关键词“王阳…

9.12 C++作业

实现一个图形类(Shape),包含受保护成员属性:周长、面积, 公共成员函数:特殊成员函数书写 定义一个圆形类(Circle),继承自图形类,包含私有属性:半…