以下轮到FSNamesystem 出场了。

FSNamesystem.java 一共同拥有4573 行。而整个namenode 文件夹下全部的Java 程序总共也仅仅有16876

行,把FSNamesystem 搞定了,NameNode 也就基本搞定。
FSNamesystem 是NameNode 实际记录信息的地方,保存在FSNamesystem 中的数据有:
文件名称数据块列表(存放在FSImage 和日志中)
合法的数据块列表(上面关系的逆关系)
数据块DataNode(仅仅保存在内存中,依据DataNode 发过来的信息动态建立)
DataNode 上保存的数据块(上面关系的逆关系)
近期发送过心跳信息的DataNode(LRU)
我们先来分析FSNamesystem 的成员变量。
privatprivate boolean isPermissionEnabled;
是否打开权限检查。能够通过配置项dfs.permissions 来设置。
private UserGroupInformation fsOwner;
本地文件的用户文件属主和文件组,能够通过hadoop.job.ugi 设置,假设没有设置,那么将使用启动HDFS 的用户(通过whoami 获得)和该用户
所在的组(通过groups 获得)作为值。
private String supergroup;
相应配置项dfs.permissions.supergroup,应用在defaultPermission 中。是系统的超级组。
private PermissionStatus defaultPermission;
缺省权限,缺省用户为fsOwner,缺省用户组为supergroup。缺省权限为0777,能够通过dfs.upgrade.permission 改动。
private long capacityTotal, capacityUsed, capacityRemaining;
系统总容量/已使用容量/剩余容量
private int totalLoad = 0;
系统总连接数,依据DataNode 心跳信息跟新。
privatprivate long pendingReplicationBlocksCount, underReplicatedBlocksCount, scheduledReplicationBlocksCount;
各自是成员变量pendingReplications(正在复制的数据块),neededReplications(须要复制的数据块)的大小,
scheduledReplicationBlocksCount 是当前正在处理的复制工作数目。
public FSDirectory dir;
指向系统使用的FSDirectory 对象。
BlocksMap blocksMap = new BlocksMap();
保存数据块到INode 和DataNode 的映射关系
public CorruptReplicasMap corruptReplicas = new CorruptReplicasMap();
保存损坏(如:校验没通过)的数据块到相应DataNode 的关系, CorruptReplicasMap 类图例如以下。类仅仅有一个成员变量。保存Block 到一个
DatanodeDescriptor 的集合的映射和这个映射上的一系列操作:

Map<String, DatanodeDescriptor> datanodeMap = new TreeMap<String, DatanodeDescriptor>();
保存了StorageID � DatanodeDescriptor 的映射,用于保证DataNode 使用的Storage 的一致性。
private Map<String, Collection<Block>> recentInvalidateSets
保存了每一个DataNode 上无效但还存在的数据块( StorageID � ArrayList<Block>)。
Map<String, Collection<Block>> recentInvalidateSets
保存了每一个DataNode 上有效,但须要删除的数据块( StorageID � TreeSet<Block>),这样的情况可能发生在一个DataNode 故障后恢复后。 上
面的数据块在系统中副本数太多,须要删除一些数据块。
HttpServer infoServer;
int infoPort;
Date startTime;
用于内部信息传输的HTTP 请求server( Servlet 的容器)。如今有/fsck,/getimage,/listPaths/*。/data/*和/fileChecksum/*,我们
后面还会继续讨论。
ArrayList<DatanodeDescriptor> heartbeats;
全部眼下活着的DataNode,线程HeartbeatMonitor 会定期检查。
private UnderReplicatedBlocks neededReplications
须要进行复制的数据块。

UnderReplicatedBlocks 的类图例如以下,它事实上是一个数组。数组的下标是优先级(0 的优先级最高,假设数据块仅仅有一个副

本,它的优先级是0)。数组的内容是一个Block 集合。UnderReplicatedBlocks 提供一些方法。对Block 进行添加。改动,查找和删除。

private PendingReplicationBlocks pendingReplications;
保存正在复制的数据块的相关信息。

PendingReplicationBlocks 的类图例如以下:

当中,pendingReplications 保存了全部正在进行复制的数据块。使用Map 是须要一些附加的信息PendingBlockInfo。这些信息包含时间戳。
用于检測是否已经超时,和如今进行复制的数目numReplicasInProgress。timedOutItems 是超时的复制项,超时的复制项在FSNamesystem 的
processPendingReplications 方法中被删除。并从新复制。timerThread 是用于检測复制超时的线程的句柄,相应的线程是
PendingReplicationMonitor 的一个实例,它的run 方法每隔一段会检查是否有超时的复制项。假设有,将该数据块加到timedOutItems 中。
Timeout 是run 方法的检查间隔。 defaultRecheckInterval 是缺省值。PendingReplicationBlocks 和PendingBlockInfo 的方法都非常简
单。
publipublic LeaseManager leaseManager = new LeaseManager(this);

租约管理器。

很多其它精彩内容请关注:http://bbs.superwu.cn

关注超人学院微信二维码:

关注超人学院java免费学习交流群:

转载于:https://www.cnblogs.com/mfrbuaa/p/5165482.html

Hadoop 源码分析(二四)FSNamesystem相关推荐

  1. Hadoop源码分析(四)

    2021SC@SDUSC 研究内容简略介绍 上周我们分析了org.apache.hadoop.mapreduce.Cluster中的的核心代码,本周将继续对mapreduce部分进行分析.在对Clus ...

  2. 【Android 事件分发】ItemTouchHelper 源码分析 ( OnItemTouchListener 事件监听器源码分析 二 )

    Android 事件分发 系列文章目录 [Android 事件分发]事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) [Andr ...

  3. Flume 1.7 源码分析(四)从Source写数据到Channel

    Flume 1.7 源码分析(一)源码编译 Flume 1.7 源码分析(二)整体架构 Flume 1.7 源码分析(三)程序入口 Flume 1.7 源码分析(四)从Source写数据到Channe ...

  4. java地图源码_Java集合源码分析(四)HashMap

    一.HashMap简介 1.1.HashMap概述 HashMap是基于哈希表的Map接口实现的,它存储的是内容是键值对映射.此类不保证映射的顺序,假定哈希函数将元素适当的分布在各桶之间,可为基本操作 ...

  5. Anbox源码分析(四)——Anbox渲染原理(源码分析)

    Anbox源码分析(四) 上篇文章我们从源码分析了一下Anbox是怎样一步步的准备了OpenGL ES的渲染环境的,这篇文章,我们继续分析Android的渲染指令是如何到达宿主机进行渲染的. 宿主机端 ...

  6. gSOAP 源码分析(二)

    gSOAP 源码分析(二) 2012-5-24 flyfish 一 gSOAP XML介绍 Xml的全称是EXtensible Markup Language.可扩展标记语言.仅仅是一个纯文本.适合用 ...

  7. live555源码分析(四)RTSPServer分析

    live555源码分析系列 live555源码分析(一)live555初体验 live555源码分析(二)基本组件上 live555源码分析(三)基本组件下 live555源码分析(四)RTSPSer ...

  8. 【投屏】Scrcpy源码分析二(Client篇-连接阶段)

    Scrcpy源码分析系列 [投屏]Scrcpy源码分析一(编译篇) [投屏]Scrcpy源码分析二(Client篇-连接阶段) [投屏]Scrcpy源码分析三(Client篇-投屏阶段) [投屏]Sc ...

  9. think.class.php错误,thinkphp源码分析(四)—错误及异常处理篇

    源码分析 错误及异常处理机制 错误及异常处理机制文件是/thinkphp/library/think/Error.php,在框架引导文件的的基础文件base.php中注册(不知道的可以去看<&l ...

  10. spring源码分析第四天------springmvc核心原理及源码分析

    spring源码分析第四天------springmvc核心原理及源码分析 1.基础知识普及 2. SpringMVC请求流程 3.SpringMVC代码流程 4.springMVC源码分析 4.1 ...

最新文章

  1. Helm包管理工具(简介、安装、方法)
  2. flask request (request.files)
  3. 【linux 06】 linux中的用户权限、文件权限与目录权限
  4. 卓同学的 Swift 面试题
  5. imgageJ开发【Java】
  6. php自动打印小票_服装店专用小票机自带进销存
  7. ASP.NET Core 自动检查编译项目组件配置
  8. 手把手教你彻底卸载MySQL
  9. autocad不能画图_AutoCAD经典技巧!
  10. SpringCloud基础权限框架搭建(1)-Zuul整合SpringSecurityOAuth2(JWT)+Turbine-附源码
  11. Mac新手必备技巧之如何批量修改图片大小
  12. 【something】简单的平均脸制作
  13. Element-UI源码学习——弹框组件
  14. 苹果是如何让iOS12加速的
  15. 【笔记】Android桌面角标Badge官方文档和兼容性解决
  16. UR机器人返回信息格式解析
  17. 使用七牛云上传图片时出现Network error during preQuery和运行时出现okhttp的问题
  18. 梯度下降法和牛顿法计算开根号
  19. 淘宝无线端店铺权重提升方法技巧步骤
  20. Pixel 手机遇到问题记录

热门文章

  1. 网站被黑你隔了多久才知道?
  2. 影响网站快照异常的因素有哪些?
  3. cnn风格迁移_快速图像风格迁移思想在无线通信中的另类应用:算法拟合
  4. c语言空中升级协议,esp32 http空中升级
  5. python三维图形旋转_如何在matplotlib中旋转三维曲面
  6. linux系统简单操作代码,Linux系统编程:简单文件IO操作(示例代码)
  7. 三年python面试题_300道Python面试题
  8. ES 處於“initializing”狀態,此時主節點正在嘗試將分片分配到集群中的數據節點。 如果您看到分片仍處於初始化或未分配狀態太長時間,則可能是您的集群不穩定的警告信號。...
  9. flask 使用cache时 报错 No module named 'flask.ext'
  10. SQL Server2008(一)简介