Fsimage和Edits解析

1.Fsimage和Edits概念

Fsimage和Edits解析_第1张图片
Fsimage和Edits概念

2.查看Fsimage

(1)查看oiv和oev命令

[root@hadoop102 current]$ hdfs
oiv            apply the offline fsimage viewer to an fsimage
oev            apply the offline edits viewer to an edits file

(2)基本语法

hdfs oiv -p 文件类型 -i镜像文件 -o 转换后文件输出路径

(3)实操

$ pwd
/opt/module/hadoop-2.7.2/data/tmp/dfs/name/current
$ hdfs oiv -p XML -i fsimage_0000000000000000025 -o /opt/module/hadoop-2.7.2/fsimage.xml
$ cat /opt/module/hadoop-2.7.2/fsimage.xml

将显示的xml文件内容拷贝到Eclipse中创建的xml文件中,并格式化。部分显示结果如下:


    16386
    DIRECTORY
    user
    1512722284477
    root:supergroup:rwxr-xr-x
    -1
    -1


    16387
    DIRECTORY
    root
    1512790549080
    root:supergroup:rwxr-xr-x
    -1
    -1


    16389
    FILE
    wc.input
    3
    1512722322219
    1512722321610
    134217728
    root:supergroup:rw-r--r--
    
        
            1073741825
            1001
            59
        
    

  • 思考:可以看出,Fsimage中没有记录块所对应DataNode,为什么?

从以上fsimage中加载如namenode内存中的信息中可以很明显的看出,在fsimage中,并没有记录每一个block对应到哪几个datanodes的对应表信息,而只是存储了所有的关于namespace的相关信息。而真正每个block对应到datanodes列表的信息在hadoop中并没有进行持久化存储,而是在所有datanode启动时,每个datanode对本地磁盘进行扫描,将本datanode上保存的block信息汇报给namenode,namenode在接收到每个datanode的块信息汇报后,将接收到的块信息,以及其所在的datanode信息等保存在内存中。HDFS就是通过这种块信息汇报的方式来完成 block -> datanodes list的对应表构建。Datanode向namenode汇报块信息的过程叫做blockReport,而namenode将block -> datanodes list的对应表信息保存在一个叫BlocksMap的数据结构中。

引用自NameNode启动过程详细剖析 NameNode中几个关键的数据结构 FSImage

3.查看Edits

(1)基本语法
hdfs oev -p 文件类型 -i编辑日志 -o 转换后文件输出路径
(2)案例实操

$ hdfs oev -p XML -i edits_0000000000000000012-0000000000000000013 -o /opt/module/hadoop-2.7.2/edits.xml
$ cat /opt/module/hadoop-2.7.2/edits.xml

将显示的xml文件内容拷贝到Eclipse中创建的xml文件中,并格式化。显示结果如下。



    -63
    
        OP_START_LOG_SEGMENT
        
            129
        
    
    
        OP_ADD
        
            130
            0
            16407
            /hello7.txt
            2
            1512943607866
            1512943607866
            134217728
            DFSClient_NONMAPREDUCE_-1544295051_1
            192.168.1.5
            true
            
                atguigu
                supergroup
                420
            
            908eafd4-9aec-4288-96f1-e8011d181561
            0
        
    
    
        OP_ALLOCATE_BLOCK_ID
        
            131
            1073741839
        
    
    
        OP_SET_GENSTAMP_V2
        
            132
            1016
        
    
    
        OP_ADD_BLOCK
        
            133
            /hello7.txt
            
                1073741839
                0
                1016
            
            
            -2
        
    
    
        OP_CLOSE
        
            134
            0
            0
            /hello7.txt
            2
            1512943608761
            1512943607866
            134217728
            
            
            false
            
                1073741839
                25
                1016
            
            
                atguigu
                supergroup
                420
            
        
    

  • 思考:NameNode如何确定下次开机启动的时候合并哪些Edits?
    答:NameNode启动的时候合并的是上次停机前正在写入的Edits,即edits_inprogress_xxx

你可能感兴趣的:(Fsimage和Edits解析)