【框架解析】Hadoop系统分析(七)--namenode后台进程

12 篇文章 0 订阅
  1. Trash.Emptier
    1. hdfs中删除文件后会将文件存放到用户目录的下的.Trash/子目录中,每隔一段时间Trash.Emptier线程进行彻底删除,在这段时间用户仍然可以把误删除的文件恢复。
    2. 清空.Trash的时间间隔默认为60分钟,可以使用fs.trash.interval进行配置调整。如果interval设置为0则表示垃圾回收功能关闭。
    3. Trash.Emptier线程在NameNode的初始化方法中启动Namenode.startTrashEmptier.
    4. Trash中主要涉及到三个方法
      1. moveToTrash
        删除文件时将文件移到.Trash目录中,如果.Trash中已经存在同名文件,则把后删除的文件名尾部增加后缀1(如果Trash有n的同名文件,则增加n+1)
      2. checkpoint
        将.Trash/Current目录修改为当前时间戳的.Trash/yyMMddHHmm,等待下次执行emptier时将整个时间戳目录删除。
      3. expunge
        遍历在checkpoint时建立的.Trash/yyMMddHHmm目录,如果超出interval时间则将其删除。
  2. LeaseManager
    1. Lease管理器,对hdfs文件进行写入操作时,需要先获取该文件的lease,操作完成后,释放文件的lease
    2. FSNamesystem进行初始化时,会后台启动LeaseManager.Monitor线程,每隔2s调用一次checkLease进行检查。
    3. LeaseManager.Lease
      管理文件Lease的基本信息,主要包括:
      1. holder,这个lease的持有者
      2. lastUpdate,最近更新时间
      3. expiredHardLimit,lease硬超时,如果超时,则将lease整个清空,并从LeaseManager中删除
      4. expiredSoftLimit,lease软超时,如果超时,给lease分配一个HdfsConstants.NN_RECOVERY_LEASEHOLDER作为holder。
      5. paths,该lease对应的文件路径
    4. 主要涉及的方法
      1. addLease
        添加lease。如果lease不存在,则将lease加入到lease集合中;如果lease存在,则刷新lease时间戳。
      2. removeLease
        从lease集合中移除lease
      3. reassignLease
        重新分配lease。如果lease不为空,先移除旧的lease,之后将lease添加到集合中
      4. renewLease
        更新lease时间戳。
      5. changeLease
        修改lease对应的path内容
      6. removeLease
        从lease列表中删除lease
      7. checkLeases
        检查lease集合,如果lease过期了,就释放lease后从集合中删除lease。
  3. HeartbeatMonitor
    监控heartbeat运行状态的后台线程,每隔5s运行一次,主要有两个工作:
    1. heartbeatCheck
      1. 检测datanode是否正常运行
      2. 默认每隔5分钟执行一次,可以通过heartbeat.recheck.interval进行配置
      3. 遍历heartbeats中保存的datanode列表,判断datanode是否已经超时。超时时间根据heartbeatExpireInterval进行判断,若是超时,则将它从datanodeMap从清除。
    2. updateAccessKey,更新datanode的访问key
      1. 调用BlockTokenSecretManager.updateKeys,更新currentKey
  4. SafeModeMonitor
    每秒执行一次,通过fsRunning和safeMode判断是否可以退出SafeMode。确认可以退出后执行leaveSafeMode退出SafeMode,结束线程。
  5. ReplicationMonitor
    1. 监控replication状态,计算并处理replication的复制工作
    2. 默认每3s执行一次,可以通过修改dfs.replication.interval来调整执行间隔
    3. 主要执行以下工作:
      1. computeDatanodeWork
        计算datanode需要处理的replication数量,主要包括当前超时挂起的replication,需要进行复制的replication,计划处理的replication,损坏的replication。将这些数据记录下来,在下次heartbeat时候通知给datanode处理。
      2. processPendingReplications
        处理超时挂起的replication,将超时的replication加入到需要进行replication操作的队列中。
  6. DecommissionManager
    1. 用于管理处于Decomission状态的datanode节点。
    2. 当datanode的状态为DECOMMISSION_INPROGRESS时,调用FSNamesystem.checkDecommissionStateInternal进行检查,如果checkDecommissionStateInternal返回true,则将datanode设置为DECOMMISSIONED状态,表示可以删除
      1. 如果该datanode上的block在其他节点已经存在备份,则返回false,表示可以撤销该datanode
      2. 如果该datanode上的block在其他节点还没有备份,则将block加入neededReplications后返回true,表示还不能撤销该datanode
    3. 设置dfs.namenode.decommission.interval参数,表示进行check的时间间隔,默认30s
    4. 设置dfs.namenode.decommission.nodes.per.interval参数,表示每次检查多少个处于DECOMMISSION_INPROGRESS状态的datanode,默认5个。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值