HDFS成员 & 开机启动原理 & 安全模式

HDFS成员

为了防止namenode挂掉又重启导致数据丢失的问题:可以使用两类文件帮助,fsimage 和 edits

  1. fsinage文件

      NameNode里面放的都是元数据,是存储在内存里面的,如果电脑突然宕机,数据就会消失,并且NameNode里面存储的元数据非常重要,所以会每隔一个小时,NameNode里面的内存数据就会备份一下,备份的文件就是 fsimage ,并且备份的内容只会保留最近的两次。

      如果真的宕机了,重启NameNode,他就会自动加载 fsimage 里面的数据到内存里面

  2. edits文件

      fsimage 会每隔一个小时保存一份,如果在着一个小时内,电脑突然宕机,也会丢失数据的,在这期间的所有操作都会记录到 edits 文件里面。

      edits里面记录的是你的每一次操作,比如:上传,删除等;

      如果电脑突然宕机了,这里面的操作就会自动帮你执行一遍,从而达到跟宕机之前一模一样的效果

                

edits 的生成规则:

1、默认是一小时生成一个

2、如果在一个小时内,疯狂的进行操作,操作的次数超过100万次,就会生成一个新的

3、edits 文件不能太大,超过64M,也会生成一个新的

        将老的 fsimage 文件和从未合并的 edits 文件合并在一起,生成一个新的 fsimage ,这个操作是每隔一个小时操作一次。这个事情是 SecondaryNameNode 来做的。

        SecondaryNameNode:他会读取当前的 fsimage 文件 和 edits 文件,两个文件合并是在内存上进行的,他会先把 fsimage 文件里面的元数据加载到内存上,然后再按照 edits 文件上所记录的进行操作,这样 NameNode 里面的数据就是最新的数据,然后 SecondaryNameNode 再把最新的数据记录到新的 fsimage 文件当中。

HDFS集群的开机启动原理

开启集群的命令:start-dfs.sh

1、如果是一个新的集群:

        当开启新的集群后,就会创建一个新的 edits 文件和一个空的 fsimage 文件,仅此而已

什么是新的集群:

        刚格式化了 NameNode 的就是一个新的集群。

        要是想重新格式化,需要删除 tmp 下的所有文件及文件夹

2、如果是一个老的集群

        首先,整个集群会先进入安全模式(此时的安全模式是只读模式,不允许上传、删除、重命名等操作),只有达到一定的条件之后,才会离开安全模式

        在这种情况下,其实最耗时的操作就是加载最新的 fsimage 到 NameNode 节点的内存中,         因为 NameNode 是整个集群的核心,处理大量的数据,速度必须很快;

        执行尚未合并的 edits 文件 ,执行里面的每一次操作,达到跟关机之前一样的效果;

        重新创建一个新的 edits 文件 ,用来记录接下来的操作。

edits 文件生成的条件:

  1. 要么是每小时生成一个

  2. 要么就是大小超过64M

  3. 要么就手动操作,生成一个

edits 文件也可以通过命令强制让其重新生成一个新的。

//edits 文件可以强制让其滚动,结束当前的 edits 文件,产生一个新的

hdfs dfadmin -rollEdits

什么是文件的滚动?

将一个正在使用的文件结束,并且开启一个新的文件,这个操作就叫滚动

HDFS的安全模式

        当hdfs 集群启动的时候,由于要做很多事情,所以这期间集群会进入 安全模式.

        当 NameNode 启动之后会进入一个称为安全模式的特殊状态 。处于安全模式的 NameNode 对于客户端来说是只读的。 NameNode 会从所有的 DataNode 接收心跳信号 和块状态报告(blockreport)

离开安全模式的条件:

        通俗来说,

        就是先判断 每一个 DataNode 的备份(副本)的数量够不够,每一个 DataNode 的最少副本数量都至少是 1 才行;

        然后 至少需要99.9%的 DataNode 的备份数量至少是 1;

        最后 ,NameNode 还需要接收到 NameNode 上的数据信息。(这个时间可以通过 dfs.namenode.safemode.extension 参数配置)

        NameNode将退出安全模式状态。接下来NameNode会确定还有哪些数据块的副本没有达到指定数目,并将这些数据块复制到其他DataNode上。

也可以手动的进入安全模式,也可以手动的离开安全模式:

1、查看是否处于安全模式:

hdfs dfsadmin -safemode get ON 说明是安全模式,OFF 说明不是安全模式

2、通过命令⼿动进⼊或者离开

hdfs dfsadmin -safemode enter 进入

进入安全模式,上传不起作用,会提示的

hdfs dfsadmin -safemode leave 离开

在公司中,集群全年的可靠性达到:99.99% 365*24*60*60,意味着全年的某个时刻,停止50多分钟。

可通过如下配置修改:

1. dfs.namenode.replication.min:
   可用的block 的数量,必须都有一个副本数    1

2. dfs.namenode.safemode.threshold-pct:
   集群中,可用的块的数量占全部的数量的比如:99.9% 即可,没必要达到100%,100% 意味着永远离不开安全模式。
        
3. dfs.namenode.safemode.min.datanodes:
   离开安全模式的最小可用(alive)datanode数量要求,默认为0.也就是即使所有datanode都不可用,仍然可以离开安全模式。

4. dfs.namenode.safemode.extension:
    当集群中所有的条件都满足后,需要保持多久才能真正的离开,默认为30000 即 30s

  • 15
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值