设为首页 收藏本站
查看: 2200|回复: 0

[经验分享] Hadoop 源代码分析(二四)FSNamesystem

[复制链接]

尚未签到

发表于 2018-10-30 09:47:35 | 显示全部楼层 |阅读模式
  下面轮到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 datanodeMap = new TreeMap();
  保存了StorageID  DatanodeDescriptor 的映射,用于保证DataNode 使用的Storage 的一致性。
  private Map recentInvalidateSets
  保存了每个DataNode 上无效但还存在的数据块( StorageID  ArrayList)。
  Map recentInvalidateSets
  保存了每个DataNode 上有效,但需要删除的数据块( StorageID  TreeSet),这种情况可能发生在一个DataNode 故障后恢复后, 上
  面的数据块在系统中副本数太多,需要删除一些数据块。
  HttpServer infoServer;
  int infoPort;
  Date startTime;
  用于内部信息传输的HTTP 请求服务器( Servlet 的容器)。现在有/fsck,/getimage,/listPaths/*,/data/*和/fileChecksum/*,我们
  后面还会继续讨论。
  ArrayList 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免费学习交流群:


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-628315-1-1.html 上篇帖子: Hadoop源代码分析(MapTask辅助类,III) 下篇帖子: hadoop中的balancer-51博克
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表