HDFS的可靠性保证实现
来源:互联网 发布:淘宝矫正牙套管不管用 编辑:程序博客网 时间:2024/05/22 00:20
主要有以下六点:
1、安全模式:
HDFS刚启动时,namenode会进入安全模式,出于安全模式的namenode不能做任何的文件操作,甚至内部的副本创建也是不允许的,namenode此时需要和各个datanode通信, 获得datanode保存的数据块信息,并对数据块信息进行检查,只有通过了namenode的检查,一个数据块才被认为是安全的。当认为安全的数据块所占比例达到了某个阀值(可 配置),namenode才会启动。
2. SecondaryNameNode:
Hadoop中使用SecondaryNameNode来备份namenode的元数据,以便在namenode失效时能从SecondaryNameNode恢复出namenode上的元数据。SecondaryNameNode充当namenode 的一个副本,它本身并不处理任何请求,因为处理这些请求都是NameNode的责任。 namenode中保存了整个文件系统的元数据,而SecondaryNameNode的作用就是周期性(周期长短也可配)保存NameNode的元数据。这些源数据中包括文件镜像数据FSImage和 编辑日志EditLog。FSImage相当于HDFS的检查点,namenode启动时候会读取FSImage的内容到内存,并将其与EditLog日志中的所有修改信息合并生成新的FSImage;在namenode 运行过程中,所有关于HDFS的修改都将写入EditLog。这样,如果namenode失效,可以通过SecondaryNameNode中保存的FSImage和EditLog数据恢复出namenode最近的状态,尽量 减少损失。
3、心跳包(HeartBeats)和副本重新创建(re–replication)
为了保证NameNode和各个DataNode的联系,HDFS采用了心跳包(HeartBeats)机制。位于整个HDFS核心的namenode,通过周期性的活动来检查datanode的活性,就像跳动的 心脏一样,这里把这些包就叫做心跳包。namenode周期性向管理的各个datanode发送心跳包,而收到心跳包的datanode则需要回复。因为心跳包总是定时发送的,所以namenode 就把要执行的命令也通过心跳包发送给datanode,而datanode收到心跳包,一方面回复namenode,另一方面就开始了用户或者应用的数据传输。 如果侦测到datanode失效,name之前保存在这个datanode上的数据就变成不可用数据。name,如果有的副本存储在失效的datanode上,则需要重新创建这个副本,放到另外 可用的地方。其他需要创建副本的情况包括数据块校验失败等。
4、数据一致性:
一般来讲,datanode与应用数据交互的大部分情况都是通过网络进行的,而网络数据传输带来的一大问题就是数据是否原样到达。为了保证数据的一致性,HDFS采用了数据 校验和(CheckSum)机制。创建文件时,HDFS会为这个文件生成一个校验和,校验和文件和文件本身保存在同一空间中。传输数据时会将数据与校验和一起传输,应用收到数据 后可以进行校验,如果两个校验的结果不同,则文件肯定出错了,这个数据块就变成了无效的。如果判定数据无效,就需要从其他datanode上读取副本。
5、租约:
在linux中,为了防止出现多个进程向同一个文件写数据的情况,采用了文件加锁的机制。而在HDFS中,同样需要一种机制来防止同一个文件被多个人写入数据。这种机制就 是租约(Lease),每当写入文件之前,一个客户端必须必须要获得namenode发放的一个租约。namenode保证同一个文件只会发放一个允许写的租约,那么就可以有效防止出现多 人写入的情况。 租约的作用还不止如此。如果namenode发放租约之后崩溃,可通过namenode恢复机制解决。如果客户端获得租约之后崩溃,则通过在租约中加入时间限制来解决。每当租约要 过期时,客户端需要向namenode申请更新租约,namenode“审核”之后,重新发放租约。如果客户端不申请,那就说明客户端不需要读写这一文件或者已经崩溃了,namenode收回租 约即可。
6、回滚:
HDFS安装或升级时,会将当前的版本信息保存起来,如果升级之后一段时间内运行正常,可以认为这次升级没有问题,重新保存版本信息,否则,根据保存的旧版本信息,将 HDFS恢复至之前的版本。
阅读全文
0 0
- HDFS的可靠性保证实现
- HDFS 可靠性的设计实现
- tcp的可靠性保证
- HDFS的可靠性
- HDFS的可靠性
- 文件的断电可靠性保证
- HDFS实现其高可靠性的策略及机制
- HDFS实现其高可靠性的策略及机制
- Zookeeper的可靠性是怎么保证的?
- 试论软件的可靠性及其保证
- TCP 是若何保证可靠性传输的
- TCP协议如何保证传输的可靠性
- TCP协议如何保证传输的可靠性
- TCP协议如何保证传输的可靠性
- 20170902_TCP是如何保证可靠性的
- strom 如何保证可靠性
- TCP如何保证可靠性?
- TCP如何保证可靠性
- Swift笔记
- linux字符驱动之异步通知按键驱动
- Wing IDE 6.x 算号器注册机代码
- 企业服务器搭建项目管理软件(禅道)
- java基础学习日志01
- HDFS的可靠性保证实现
- Android 之路16---Java基础10
- ”多线程+信号量+互斥锁“ 亲测可用的简单demo
- CFileDialog使用注意事项GetFileName()和GetPathName();
- RGB通道分离
- Bit++_Codeforces_282A
- Hystrix 源码解析 —— 请求执行(四)之失败回退逻辑
- PyQt5学习笔记01----第一个窗口
- Android JNI C/C++ long 的长度 在 32 / 64 位下 不同