栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

HDFS深入分析

HDFS深入分析

HDFS深入分析

1.NameNode分析
namenode节点主要包含fsimage、edits、seen_txid、VERSION文件;

1.1 fsimage主要存储文件最新的快照数据(元信息以及文件存储的目录树),如下为查看fsimage内容的命令以及对应的内容样例:

bash /home/hadoop3.3.1/hadoop-3.3.1/bin/hdfs oiv -p XML -i fsimage_0000000000000000016 -o /home/fsimage16.xml
16389FILEhadoop-3.3.1.tar.gz216390188378191639018793827134217728root:supergroup:0644
10737418271003134217728
10737418281004134217728
10737418291005134217728
10737418301006134217728
1073741831100768316367

0

1.2 edits文件主要存储的是文件操作的详细步骤(实时过程数据)(edits的文件会定期的同步到fsimage中–通过secondaryNameNode来同步,这也是secondaryNameNode的唯一作用),如下为查看edits内容的命令以及对应的内容样例:

bash /home/hadoop3.3.1/hadoop-3.3.1/bin/hdfs oev -i edits_inprogress_0000000000000000044 -o /home/edits.xml

    OP_ADD
    
      24
      0
      16389
      /hadoop-3.3.1.tar.gz._COPYING_
      2
      1639018793827
      1639018793827
      134217728
      DFSClient_NONMAPREDUCE_-816749945_1
      192.168.136.103
      true
      
        root
        supergroup
        420
      
      0
      eac04cbe-68b6-41d2-aabc-f41b781cff4b
      3
    
  
  
    OP_ALLOCATE_BLOCK_ID
    
      25
      1073741827
    
  
  
    OP_SET_GENSTAMP_V2
    
      26
      1003
    
  
  
    OP_ADD_BLOCK
    
      27
      /hadoop-3.3.1.tar.gz._COPYING_
      
        1073741827
        0
        1003
      
      
      -2
    
  
  
    OP_ALLOCATE_BLOCK_ID
    
      28
      1073741828
    
  
  
    OP_SET_GENSTAMP_V2
    
      29
      1004
    
  
  
    OP_ADD_BLOCK
    
      30
      /hadoop-3.3.1.tar.gz._COPYING_
      
        1073741827
        134217728
        1003
      
      
        1073741828
        0
        1004
      
      
      -2
    
  
  
    OP_ALLOCATE_BLOCK_ID
    
      31
      1073741829
    
  
  
    OP_SET_GENSTAMP_V2
    
      32
      1005
    
  
  
    OP_ADD_BLOCK
    
      33
      /hadoop-3.3.1.tar.gz._COPYING_
      
        1073741828
        134217728
        1004
      
      
        1073741829
        0
        1005
      
      
      -2
    
  
  
    OP_ALLOCATE_BLOCK_ID
    
      34
      1073741830
    
  
  
    OP_SET_GENSTAMP_V2
    
      35
      1006
    
  
  
    OP_ADD_BLOCK
    
      36
      /hadoop-3.3.1.tar.gz._COPYING_
      
        1073741829
        134217728
        1005
      
      
        1073741830
        0
        1006
      
      
      -2
    
  
  
    OP_ALLOCATE_BLOCK_ID
    
      37
      1073741831
    
  
  
    OP_SET_GENSTAMP_V2
    
      38
      1007
    
  
  
    OP_ADD_BLOCK
    
      39
      /hadoop-3.3.1.tar.gz._COPYING_
      
        1073741830
        134217728
        1006
      
      
        1073741831
        0
        1007
      
      
      -2
    
  
  
    OP_CLOSE
    
      40
      0
      0
      /hadoop-3.3.1.tar.gz._COPYING_
      2
      1639018837819
      1639018793827
      134217728
      
      
      false
      
        1073741827
        134217728
        1003
      
      
        1073741828
        134217728
        1004
      
      
        1073741829
        134217728
        1005
      
      
        1073741830
        134217728
        1006
      
      
        1073741831
        68316367
        1007
      
      
        root
        supergroup
        420
      
    
  
  
    OP_RENAME_OLD
    
      41
      0
      /hadoop-3.3.1.tar.gz._COPYING_
      /hadoop-3.3.1.tar.gz
      1639018837823
      eac04cbe-68b6-41d2-aabc-f41b781cff4b
      13
    
  

1.3 seen_txid
存放当前最新的事务id,以此保证数据的完整性;

1.4 VERSION
存放当前namenode的版本信息

namespaceID=1091064552
clusterID=CID-1a520042-fc3d-428d-adf5-66b77af173f0
cTime=1638946985019
storageType=NAME_NODE
blockpoolID=BP-223224798-192.168.136.103-1638946985019
layoutVersion=-66

2.SecondaryNameNode分析
主要负责定期把edits文件中的内容合并到fsimage中(checkpoint);
如果namenode为HA模式,则没有SecondaryNameNode进程,具体的合并工作由standby namenode负责,也就是SecondaryNameNode不是必须的进程;

3.NameNode总结
总体来说,NameNode保存了两部分数据:
1.file与block的关系,对应的关系信息存储在fsimage和edits文件中,当NameNode启动的时候会把文件中的元数据信息加载到内存中;

2.datanode与block的关系,对应的关系主要在集群启动的时候保存在内存中,当DataNode启动时会把当前节点上的Block信息和节点信息上报给NameNode;

block块存放在哪些datanode上,只有datanode自己知道,当集群启动的时候,datanode会扫描自己节点上面的所有block块信息,然后把节点和这个节点上的所有block块信息告诉给namenode。这个关系是每次重启集群都会动态加载的【这个其实就是集群为什么数据越多,启动越慢的原因】;

附:
1.注意了,刚才我们说了NameNode启动的时候会把文件中的元数据信息加载到内存中,然后每一个文件的元数据信息会占用150字节的内存空间,这个是恒定的,和文件大小没有关系,咱们前面在介绍HDFS的时候说过,HDFS不适合存储小文件,其实主要原因就在这里,不管是大文件还是小文件,一个文件的元数据信息在NameNode中都会占用150字节,NameNode节点的内存是有限的,所以它的存储能力也是有限的,如果我们存储了一堆都是几KB的小文件,最后发现NameNode的内存占满了,确实存储了很多文件,但是文件的总体大小却很小,这样就失去了HDFS存在的价值;

2.client读数据流程

3.client写数据流程

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/650598.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号