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