`

namenode任务线程之FSNamesystem$SafeModeMonitor

阅读更多

前面5个任务线程一般会一直运行,而SafeModeMonitor当namenode满足一定条件就不执行检测了,在分析这个后台任务之前我们先来看下什么是safeMode,摘录《Hadoop权威指南》10.1.2安全模式的定义如下:

 

         名称节点启动时,它所做的第一件事情是加载其镜像文件(fsimage)到内存,并应用编辑日志(edits)中的编辑
记录。一旦重新创建与文件系统元数据 一致的内存映像,它就会创建一个新的fsimage文件(自己创建一个检查点而不是
求助于第二名称节点,这样的效率更高)和一个空的编辑日志。只有在这个时候,名称节点才开始监听RPC和http请求。
如果名称节点以安全模式运行,则意味着它只向客户端提供文件系统的只读视图。
        注意:
              严格说来,在安全模式下,只能保证访问文件系统元数据的操作(如产生一个目录列表)能工作。只有当块在集
群的当前数据节点时,才可以进行读取文件,而且对文件进行修改(写入,删除或重命名)都是不允许的。
         构想一下,系统中的块的存储位置并不是由名称节点来保存的----此信息以块列表的形式储存在数据节点中。执行
系统常规操作期间,名称节点在内存中储存块地址的分布。在安全模式下,需要给数据节点一些时间来登入名称节点及其
块列表,使名称节点能有足够多的块地址来高效运行文件系统。如果名称节点没有等到足够多的数据节点,则会启动程序
,开始复制块到新的数据节点,在大多数情况下,都不需要如此(因为它只需要等更多数据节点登入),并且这将造成集
群资源非常的紧张。事实上,在安全模式下,名称节点并不为数据节点发出任何块复制或者删除的指令。
        到达最小副本条件后,再过30秒,系统便会退出安全模式。最小副本条件是指在整个文件系统中99.9%的块达到
最低复制水平(默认是1,由dfs.replication.min设定)。


        启动一个新格式化的HDFS集群时,因为系统中没有数据块,所以名称节点不会进入安全模式。

 

    针对安全模式还有一些基本配置属性:

 

属性名称 类型 默认值 描述
dfs.replication.min int 1 写操作成功所需要的最小副本数
dfs.safemode.threshold.pct float 0.999 名称节点退出安全模式之前系统中满足dfs.replication.min定义的最小副本数级别的块的百分比。将其设置成0或者更少将强制名称节点不以安全模式启动,将这个值设置成大于1,意味着名称节点永远不会退出安全模式
dfs.safemode.extension int 30000 满足最小副本条件dfs.safamode.threhole.pct后持续到安全模式的时间,单位是毫秒。对于小型集群(十来个节点)此属性的值可以设置为0


这个是官方的描述,那么我们接下来开始看代码,在进入safeModeMonitor之前先看看什么情况下会进入到safeModeMonitor中,在NameNode初始化时会新建一个SafeModeInfo对象,然后将读取到的blockMap的size传递给这个对象,在这个对象中依据threshold,blockMapSize,reached等3个属性的值来判断是否进入到safeMode,其中reached比较特殊,它的描述如下:

/** Time when threshold was reached.
     * 
     * <br>-1 safe mode is off
     * <br> 0 safe mode is on, but threshold is not reached yet 
     */
    private long reached = -1;  

    如果fsimage里没有块信息,例如是namenode第一次format时,那么safeMode默认就是关的,这样你也不会进入到safeModeMonitor,但是我们还是可以看下在safeModeMonitor里的逻辑,首先看下检测的间隔:

private static final long recheckInterval = 1000; //一秒钟

    在monitor里检测的依据是靠canLeave定夺的,我们看下canLeave的java doc

 

/** 
     * Safe mode can be turned off iff 
     * the threshold is reached and 
     * the extension time have passed.
     * @return true if can leave or false otherwise.
     */

 其实具体的实现里完全是依据处于safeblock的百分比来判断的,那么我们就要问了,什么时候这个百分比会涨,或者说这个safeblock会变,通过跟踪代码发现其实是在datanode向namenode注册时会增加safeblock的个数,同时也需要说明的是在namenode心跳datanode时如果发现损坏的节点或者说有损坏的block时,safeblock也会减少的。

 

下面再来看看当检测可以离开safemode时所做的操作:

 

1:启动一个UpgradeManagerNamenode
2:processMisReplicatedBlocks

   第一个操作会在下一篇blog里单独分析。

 

   这里简单说下第2个操作,它包括如下2个逻辑:

1:验证文件块和文件的关系是否还存在,如果不存在对应关系则说明某个块是无效的了,然后加入到无效队列(这个
无效队列是干啥的,以后会分析)
2:验证文件块是否到达复制因子,如果没有达到就加入到需要复制队列,如果超出了复制因子就将超出的块加入到无
效队列
 

 

分享到:
评论
1 楼 天南yy 2013-05-03  
问个问题:两台机器做hadoop集群,每十分钟往里面存一个seq文件,并启动一个mapreduce程序. df.replication=1,刚开始运行没有任何问题,但当程序运行几个小时或更久后,为什么会丢失很多数据块,导致mapreduce任务失败。 管理页面上显示:WARNING : There are about 98 missing blocks. Please check the log or run fsck

是机器太少了吗?

望回复!!!

相关推荐

    NameNode职责.pptx

    NameNode是Hadoop分布式文件系统HDFS的核心组件之一,负责维护文件系统的元数据。下面是NameNode的职责和相关知识点: NameNode的职责 NameNode是HDFS的中心节点,负责维护文件系统的命名空间。它的主要职责包括:...

    hadoop2.0 2个namenode 2个datanode 部署

    Hadoop 2.0 双 Namenode 双 Datanode 部署 Hadoop 是一个开源的大数据处理框架,它提供了分布式文件系统(HDFS)和Map/Reduce 计算框架。 在这个部署中,我们将使用 Hadoop 2.0 在两个 Ubuntu 服务器上部署双 ...

    Hadoop Namenode性能诊断及优化

    2. **jstack+脚本**:通过jstack工具获取NameNode进程中的线程快照,并结合脚本自动化分析这些快照,寻找可能的死锁或阻塞情况。 3. **利用x86 PMU的Profiling工具**:利用Oprofile或Intel Vtune等工具对NameNode...

    Namenode瓶颈解决方案

    文件名“都是海量惹得祸 之 大家来聊Namenode瓶颈解决方案.pptx”表明这是一个关于Namenode问题的演讲或报告,可能详细阐述了大数据量对Namenode的影响,分析了问题的根源,并提供了具体的解决方案。 在实际解决...

    HDFS中NameNode节点的配置、备份和恢复.doc

    HDFS 中 NameNode 节点的配置、备份和恢复 HDFS(Hadoop Distributed File System)是 Hadoop 生态系统中的分布式文件系统,它提供了高效、可靠、可扩展的文件存储解决方案。 NameNode 是 HDFS 集群中的中心服务器...

    namenode启动失败参考

    在Hadoop分布式文件系统(HDFS)中,Namenode是关键组件,它负责元数据管理,包括文件系统的命名空间和文件的块映射信息。当Namenode启动失败时,通常与fsimage和edits文件有关,这些文件是Namenode存储元数据的重要...

    Hadoop源代码分析(三五)

    3. **SafeMode Monitor线程(smmthread)**:SafeModeMonitor线程执行`SafeModeMonitor`的任务,监控集群的安全模式状态。安全模式是NameNode在启动或数据恢复期间的一种特殊状态,此时不允许文件系统的修改。...

    Hadoop2.4.0测试环境搭建

    [bigdata@namenode1 scripts]$ pwd /home/bigdata/software/hadoop/share/scripts [bigdata@namenode1 scripts]$ python configuration-utils.py -c 2 -m 8 -d 30 -k True Using cores=2 memory=8GB disks=30 hbase=...

    NameNode机制.docx

    NameNode作为Hadoop分布式文件系统(HDFS)的核心组件之一,负责管理整个文件系统的命名空间以及客户端的文件访问。为了保证元数据的安全性和持久性,NameNode在运行过程中需要将元数据保存在内存中,并同时在磁盘中...

    Hadoop之NameNode Federation图文详解

    Hadoop之NameNode Federation图文详解 Hadoop的NameNode Federation是HDFS(Hadoop Distributed File System)中的一种架构设计,旨在解决NameNode的扩展性、隔离性和性能问题。本篇文章将对NameNode Federation的...

    Hadoop Namenode恢复

    Hadoop Namenode 是 Hadoop 分布式文件系统的核心组件之一,负责管理文件系统的命名空间。然而,在生产环境中,namenode 的崩溃可能会导致整个集群的不可用。因此,namenode 的恢复是非常重要的。本文将详细介绍 ...

    namenode元数据管理机制

    hdfs的namenode的元数据管理机制,简要画出了元数据管理的流程分析

    hadoop NameNode 源码解析

    Hadoop 的 NameNode 是 Hadoop 分布式文件系统(HDFS)的核心组件之一,负责管理文件系统的 namespace 和数据块的存储位置。在本文中,我们将深入探讨 Hadoop NameNode 的源码,了解其启动过程、配置加载、RPC ...

    hadoop namenode双机热备

    在IT行业中,高可用性是关键,特别是在大数据处理领域,Hadoop作为分布式计算框架,其NameNode节点的稳定性至关重要。"hadoop namenode双机热备"是为确保Hadoop集群持续运行而采取的一种重要策略,通过双机热备可以...

    11_尚硅谷大数据之HDFS_NameNode和SecondaryNameNode1

    在Hadoop大数据存储系统中,HDFS(Hadoop Distributed File System)是核心组件之一,用于分布式存储大量数据。NameNode是HDFS的核心节点,负责管理文件系统的元数据,包括文件和目录的命名空间以及文件的块映射信息...

    【HDFS篇08】NameNode故障处理1

    在分布式文件系统Hadoop的HDFS(Hadoop Distributed File System)中,NameNode是核心组件,负责元数据的管理,包括文件系统命名空间和文件块的映射信息。当NameNode发生故障时,数据的可用性和系统的稳定性都会受到...

    Hadoop源代码分析(二七)

    - **说明**:该变量表示一个处理回收站任务的线程句柄。 - **作用**:定期清理文件系统的回收站目录,释放不再使用的文件或目录资源。 4. **`private int handlerCount = 2;`** - **说明**:定义了服务器请求...

    NameNode及SecondaryNameNode分析

    NameNode及SecondaryNameNode分析

    (orc + snappy / zlib ) 多线程并行合并小文件工具类 (出自:flink自定义合并orc小文件处)

    小文件指的是大小相对较小的文件,它们在分布式系统中可能导致大量的数据块,增加NameNode的内存负担,降低I/O效率。为了解决这个问题,我们可以采用各种合并策略,其中一种是通过多线程并行合并小文件。本项目提供...

Global site tag (gtag.js) - Google Analytics