HDFS学习笔记 【Namenode/DN管理】
说明
DN管理管理了什么?
NN上如何表示DN
DN存储和块的关系
梳理DatanodeManager存储类
DatanodeDescriptor
DN的抽象,依次继承。每一层增加一点额外的信息。
DatanodeId
基本的DN信息,hostname,数据传输接口,info服务端口,ipc端口等。
DatanodeInfo
补充一些DN信息,比如容量,缓存,以及xceiver数量等,软件版本,以及dn状态等。
DatanodeDescriptor
补充一些状态相关的信息,负载,指令,缓存相关的信息
指令相关的信息,比如带宽,复制块,恢复块
缓存相关的参数,多个队列保存已缓存,等待缓存的,等待取消缓存的块。
DatanodeStorageInfo
存储抽象,管理blockList,管理block的状态。
blockList 保存所有所有的Block头节点。BlockInfo.triplets保存的是所有副本块的双向链表
字段
NN状态相关
heartbeatsinceFailOver: NN是否出现失败
blockContensStale:是否处于stale状态,bool类型
防止数据不完整
NN里面存储的和DN相关的信息
元数据相关
dn,storageId,storagetype,state字段用于描述存储的元信息
storage状态信息,用于描述存储的容量相关信息
方法
- addBlock()
DN向NN汇报新数据块,DatanodeStorageInfo信息加入到Blocks中
DatanodeStorageInfo中维护blocks列表,里面包含了所有的快信息 - maskStaleAfterFailOver()
在HA切换时,将DatanodeStorageInfo设置为false状态。
DataNodeManager
NN管理Datanode,负责管理DN的添加和删除,dn启动,以及dn的心跳响应。
数据结构
- NS
- BLockManager
DNNodeManager需要可以访问它保存的Block结构 - heartbeatManager
心跳管理模块 - dataNodeMap
storageId和datanodeDescriptor的映射,所以datanodeManager中维护着所有的DN,进一步可以找到所有的块信息 - host2DatanodeMap
hostname和datanodeDescriptor的映射
datanodeDescriptor中包含了blocks列表
- networktopology
整个网络拓扑
添加和撤销datanode
添加dn意味着什么?
首先是创建datanode的描述符,获取datanode的所有的块信息,维护数据结构(block->datanodeDescriptor,datanodeDescriptor->blocks),
哪些dn可以心跳,可以汇报块
nn知道dn的容量,线程等信息,可以下发任务
维护dn的任务队列,需要复制的块,坏块,恢复快等。
如何添加dn/下线dn
- 配置文件中增加或者下线节点
- 发送refresh命令,最终执行的是datanodeManager的refresh。
2.1 调用hbManager,改变下dn状态即可.
2.2 线程周期检查节点是否完成下线。 - 修改datanodeDescriptor状态
dn具有维护模式,下线,正常等多个状态
如何检查是否下线
checkDecommissionState
BlockManager包含有几个队列,维护excessRedundancyMap,neededReconstruction,pendingReconstruction等等。
猜测是线程检测队列,修改node状态。
dn如何启动
- 握手
- 注册 datanodeMap
注意datanode可以多次注册,以storage为准 - 块上报
维护内存中的块和dn存储之间关系
3.1 全量上报
首次上报,直接增加block内存结构
3.2 增量上报
如何心跳
心跳信息: DN容量,线程,缓存,连接数等。
处理信息: handleHeartbeat 通过datanodeDescriptor信息,块和存储信息等构造命令组
心跳返回: 命令组
dn也具有多个队列,比如说需要复制的块,需要删除的块,需要恢复的块。这些是通过BlockManager生成的。
HDFS学习笔记 【Namenode/DN管理】相关推荐
- 文件和存储管理学习笔记-动态磁盘管理
Server 2008 R2 文件和存储管理学习笔记-动态磁盘管理 基本磁盘是包含基本分区.扩展分区或逻辑驱动器的一种物理磁盘 动态磁盘提供了基本磁盘不提供的一些高级功能,创建无限数量卷.跨越多个磁盘 ...
- Git学习笔记:标签管理以及GItHub
前言 在补习python的时候主要参考的是廖雪峰的教程Python教程,在学习完后准备完成期末作业时,遇到了一个技术难题,需要初步掌握git,因此开始了git的学习. 本教程参考廖雪峰的Git教程 G ...
- Git学习笔记:分支管理3
前言 在补习python的时候主要参考的是廖雪峰的教程Python教程,在学习完后准备完成期末作业时,遇到了一个技术难题,需要初步掌握git,因此开始了git的学习. 本教程参考廖雪峰的Git教程 G ...
- Git学习笔记:分支管理(2)
前言 在补习python的时候主要参考的是廖雪峰的教程Python教程,在学习完后准备完成期末作业时,遇到了一个技术难题,需要初步掌握git,因此开始了git的学习. 本教程参考廖雪峰的Git教程 G ...
- Redis运维和开发学习笔记(7) 内存管理和过期策略
Redis运维和开发学习笔记(7) 内存管理和过期策略 文章目录 Redis运维和开发学习笔记(7) 内存管理和过期策略 内存回收策略 惰性删除 定时任务删除 maxmemory 过期策略allkey ...
- linux软件包管理解析,linux学习笔记_09_软件包管理解析.doc
linux学习笔记_09_软件包管理解析 软件包管理 软件包分类 源码包(C语言编写的源代码) linux主要由C语言来写. 源码包可以用写字板打开 脚本安装包:源码包进行再开发的源码包(提供安装界面 ...
- 学习笔记--一个自管理(组织)的多目标进化算法(SMEA)
学习笔记–一个自管理(组织)的多目标进化算法(SMEA) 摘要:在温和条件下,一个连续m维目标的优化问题的帕累托前沿(解集)可以形成一个(m-1)维的分段连续流形.基于这个性质,这篇文章提出了一个自管 ...
- Git学习笔记:分支管理(1)
前言 在补习python的时候主要参考的是廖雪峰的教程Python教程,在学习完后准备完成期末作业时,遇到了一个技术难题,需要初步掌握git,因此开始了git的学习. 本教程参考廖雪峰的Git教程 G ...
- Dapr牵手.NET学习笔记:状态管理之docker-compose发布
Dapr牵手.NET学习笔记:想入非非的服务调用 Dapr牵手.NET学习笔记:跨物理机负载均衡服务调用 Dapr牵手.NET学习笔记:用docker-compose部署服务 说明:为了给出demo的 ...
最新文章
- 计算机主机的灯一直闪,电脑硬盘灯一直闪怎么办|电脑硬盘灯狂闪的解决方法...
- bug ava.sql.SQLException: No more data to read from socket
- 飞在空中的仓库再配合无人机送货,沃尔玛新专利厉害了
- 程序员面试100题之十三:求二叉查找树的镜像
- java allocate_Java中volatile关键字的最全总结
- Qt中的QFileDialog类的几个示范代码
- 贪心法田忌赛马问题Java代码,hdoj 1052 Tian Ji - The Horse Racing【田忌赛马】 【贪心】...
- 重新写博+linux查找系列
- windows下kangle虚拟主机-easypanel跑iis6.0开php空间并支持ZendOptimizer教程
- 比赛-h47学长的训练赛 (27 Aug, 2018)
- 计算机软件著作权 评审,软件著作权在评职称过程中有用吗
- The Backrooms - Level 0.2 - 我爱杏仁水
- 由一道CTF pwn题深入理解libc2.26中的tcache机制
- python 汉字 简繁体 转换方法
- modelsim 常用快捷键
- 去掉无序列表前默认加上的小圆点——实战练习需到的问题解决办法mark
- SAP PS 第11节 收入类项目结果分析及结算
- 计算机屏幕尺寸像素点距概念,各种电脑显示器尺寸对应的最佳分辨率大小是多少...
- 高手背后的操作系统----心思知体系
- TKO 6-7DP入门之搬寝室