zoukankan      html  css  js  c++  java
  • Hadoop集群之浅析安全模式

    @

    集群启动顺序:

    1. NameNode启动
      NameNode启动时,首先将镜像文件(Fsimage)载入内存,并执行编辑日志(Edits)中的各项操作。一旦在内存中成功建立文件系统元数据的映像,则创建一个新的Fsimage文件和一个空的编辑日志。此时,NameNode开始监听DataNode请求。这个过程期间,NameNode一直运行在安全模式,即NameNode的文件系统对于客户端来说是只读的,并且是有限只读,即在没有启动DataNode的机器上的文件依旧不可读!
    2. DataNode启动
      系统中的数据块的位置并不是由NameNode维护的,而是以列表的形式存储在DataNode中。在系统的正常操作期间,NameNode会在内存中保留所有位置的映射信息。在安全模式下,各个DataNode会向NameNode发送最新的块列表信息,NameNode了解到足够多的块位置信息之后,即可退出安全模式。
    3. 安全模式退出判断
      如果满足“最小副本条件”,NameNode会在30秒钟之后就退出安全模式。所谓的最小副本条件指的是在整个文件系统中99.9%的块满足最小副本级别(默认值:dfs.replication.min=1)。在启动一个刚刚格式化的HDFS集群时,因为系统中还没有任何块,所以NameNode不会进入安全模式。

    当NN中所保存的所有块的最小副本数(默认为1) / 块的总数 > 99.99%时,NN会自动离开安全模式!

    关于安全模式的一些操作

    集群处于安全模式,不能执行重要操作(写操作)。集群启动完成后,自动退出安全模式。
    (1)bin/hdfs dfsadmin -safemode get (功能描述:查看安全模式状态[on/off])
    (2)bin/hdfs dfsadmin -safemode enter (功能描述:进入安全模式)
    (3)bin/hdfs dfsadmin -safemode leave (功能描述:离开安全模式)
    (4)bin/hdfs dfsadmin -safemode wait (功能描述:输入写操作的命令,但不立即执行,而是放在缓存队列中,等待安全模式退出再依次执行)

    强调一下块(block)副本数(replication)的概念

    在hadoop2.x中,一个的默认大小是128M,至于是为什么请看我之前的文章HDFS的文件块大小
    而一个块的副本数默认是3
    这些参数在hdfs-default.xml文件中有体现:

    <property>
      <name>dfs.blocksize</name>
      <value>134217728</value>
      <description>
          The default block size for new files, in bytes.
          You can use the following suffix (case insensitive):
          k(kilo), m(mega), g(giga), t(tera), p(peta), e(exa) to specify the size (such as 128k, 512m, 1g, etc.),
          Or provide complete size in bytes (such as 134217728 for 128 MB).
      </description>
    </property>
    
    <property>
      <name>dfs.replication</name>
      <value>3</value>
      <description>Default block replication. 
      The actual number of replications can be specified when the file is created.
      The default is used if replication is not specified in create time.
      </description>
    </property>
    

    知道了上面的概念,那么就考大家一个小问题:
    面试题如果一个文件130M,将文件以块的方式分割,去存储,怎样实现?

    实际存储        大小   副本
    块A: 128M      128M  A0 A1 A2
    块B: 2M        128M  B0 B1 B2
    

    很明显,130M的文件,128M的块是存不下的,还需要2M的空间,虽然只有2M,但还是得分配一个块。

    再来一个进阶题:
    题目: 块大小128m,副本数3份,一个文件260m,请问多少块,多少实际存储?
    存储块数:260%128=2块…4M,所以需要3个块,一个块有3个副本,所以最后需要3*3=9块
    实际存储:260m * 3 =780M

    有人看到这儿就懵了,为什么是260*3呢?

    分开算就一目了然了!
    第一块有128M,第二块也是128M,第三块是剩下的4M,每一块有三个副本,那么:
    128 * 3 + 128 * 3 + 4 * 3 = (128+128+4) * 3 = 260 * 3

  • 相关阅读:
    61序列化二叉树
    60把二叉树打印成多行
    59按之字形顺序打印二叉树
    58对称的二叉树
    57二叉树的下一个结点
    56删除链表中重复的结点
    55链表中环的入口结点
    Python100天打卡-Day10
    Python100天打卡
    点至直线的距离和垂足点计算
  • 原文地址:https://www.cnblogs.com/sunbr/p/13277019.html
Copyright © 2011-2022 走看看