HDFS 可靠性的设计实现

1. 安全模式

HDFS 刚刚启动时,NameNode 会进入安全模式(safe mode)。处于安全模式的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 失效,可以通过Secondary NameNode 中保存的FsImage 和EditLog 数据恢复出NameNode 最近的状态,尽量减少损失。

3. 心跳包(HeartBeats)和副本重新创建(re-replication)

如果HDFS 运行过程中,一部分DataNode 因为崩溃或是掉线等原因,离开了HDFS 系统,怎么办?为了保证NameNode 和各个DataNode 的联系,HDFS 采用了心跳包(Heartbeat)机制。位于整个HDFS 核心的NameNode,通过周期性的活动来检查DataNode 的活性,就像跳动的心脏一样,所以,这里把这些包就叫做心跳包。NameNode 周期性向管理的各个DataNode 发送心跳包,而收到心跳包的DataNode 则需要回复。因为心跳包总是定时发送的,所以NameNode 就把要执行的命令也通过心跳包发送给DataNode,而DataNode收到心跳包,一方面回复NameNode,另一方面就开始了与用户或者应用的数据传输。

如果侦测到了DataNode 失效,那么之前保存在这个DataNode 上的数据就变成不可用的。那么,如果有的副本存储在失效的DataNode 上,则需要重新创建这个副本,放到另外可用的地方。其他需要创建副本的情况包括数据块校验失败等。

4. 数据一致性

一般来讲,DataNode 与应用数据交互的大部分情况都是通过网络进行的,而网络数据传输带来的一大问题就是数据是否能原样到达。为了保证数据的一致性,HDFS 采用了数据校验和(CheckSum)机制。创建文件时,HDFS 会为这个文件生成一个校验和,校验和文件和文件本身保存在同一空间中。传输数据时会将数据与校验和一起传输,应用收到数据后可以进行校验,如果两个校验的结果不同,则文件肯定出错了,这个数据块就变成了无效的。如果判定数据无效,就需要从其他DataNode 上读取副本。

5. 租约

在Linux 中,为了防止出现多个进程向同一个文件写数据的情况,采用了文件加锁的机制。而在HDFS 中,同样也需要一种机制来防止同一个文件被多个人写入数据。这种机制就是租约(Lease)。每当写入文件之前,一个客户端必须要获得NameNode 发放的一个租约。NameNode 保证同一个文件只会发放一个允许写的租约,那么就可以有效防止出现多人写入的情况。

不过,租约的作用不止于此。如果NameNode 发放租约之后崩溃了,怎么办?或者如果客户端获得租约之后崩溃了,又怎么办?第一个问题可以通过前面提到的恢复机制解决。而第二个问题,则通过在租约中加入时间限制来解决。每当租约要到期时,客户端需要向NameNode申请更新租约,NameNode“审核”之后,重新发放租约。如果客户端不申请,那就说明客户端不需要读写这一文件或者已经崩溃了,NameNode 收回租约即可。

6. 回滚

HDFS 与Hadoop 一样处于发展阶段。而某个升级可能会导致BUG 或者不兼容的问题,这些问题还可能导致现有的应用运行出错。这一问题可以通过回滚回到旧版本解决。HDFS 安装或者升级时,会将当前的版本信息保存起来,如果升级之后一段时间内运行正常,可以认为这次升级没有问题,重新保存版本信息,否则,根据保存的旧版本信息,将HDFS 恢复至之前的版本。

转自http://book.51cto.com/art/201408/449345.htm

时间: 2024-11-03 01:35:55

HDFS 可靠性的设计实现的相关文章

浅析HDFS架构和设计

作者 | 大尊 hdfs是hadoop的分布式文件系统,即Hadoop Distributed Filesystem.下面主要讲下HDFS设计中的比较重要的点,使读者能通过简短的文章一窥HDFS的全貌,适合对HDFS有一点了解,但是对HDFS又感到困惑的初学者.本文主要参考的是hadoop 3.0的官方文档. 链接:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html 当数据集的

【HDFS】Hadoop分布式文件系统:架构和设计

引言 前提和设计目标 硬件错误 流式数据访问 大规模数据集 简单的一致性模型 "移动计算比移动数据更划算" 异构软硬件平台间的可移植性 Namenode 和 Datanode 文件系统的名字空间 (namespace) 数据复制 副本存放: 最最开始的一步 副本选择 安全模式 文件系统元数据的持久化 通讯协议 健壮性 磁盘数据错误,心跳检测和重新复制 集群均衡 数据完整性 元数据磁盘错误 快照 数据组织 数据块 Staging 流水线复制 可访问性 DFSShell DFSAdmin

HDFS的架构和设计要点

HDFS的架构和设计要点 转 大数据之路 发布于 2012/10/11 23:00 字数 4487 阅读 495 收藏 1 点赞 0 评论 0 撸了今年阿里.头条和美团的面试,我有一个重要发现.......>>> 虽然本文已经比较旧远了,但是在很多方面还是有一定学习的价值,中文版译者为killme. 一.前提和设计目标 硬件错误是常态,而非异常情况,HDFS可能是有成百上千的server组成,任何一个组件都有可能一直失效,因此错误检测和快速.自动的恢复是HDFS的核心架构目标. 跑在HD

HADOOP HDFS的设计

Hadoop提供的对其HDFS上的数据的处理方式,有以下几种, 1 批处理,mapreduce 2 实时处理:apache storm, spark streaming , ibm streams 3 交互式: 如pig , spark shell 都可以提供交互式地数据处理 4 sql: hive , impala 提供接口,可以使用sql标准语言进行数据查询分析 5 迭代处理:尤其是机器学习相关的算法,需要对数据反复数据,mapreduce不适应这种计算方式,它总是把它的中间结果输出到磁盘,

hadoop1中hdfs原理详解

HDFS是Hadoop Distribute File System的简称,也是Hadoop的一个分布四文件系统 一.HDFS的主要设计理念 1.存储超大文件 这里的 “超大文件” 是指几百MB .GB甚至 TB级别的文件. 2.最高效的访问模式是一次写入.多次读取(流式数据访问)  HDFS存储的数据集作为hadoop的分析对象,在数据集生成后,长时间在此数据集上进行各种分析.每次分析都将设计该数据的大部分数据甚至全部数据,因此读取整个数据集的时间延迟比读取第一条记录的时间延迟更重要. 3.运

Hadoop之——HDFS

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/45849029 Hadoop 主要由HDFS和MapReduce 引擎两部分组成.最底部是HDFS,它存储Hadoop 集群中所有存储节点上的文件.HDFS 的上一层是MapReduce 引擎,该引擎由JobTrackers 和TaskTrackers组成.  一.HDFS基本概念    1.数据块 HDFS默认的最基本的存储单位是64M的数据块,这个数据块可以理解和一般的文件里面

Hadoop 学习之——HDFS

HDFS是HADOOP中的核心技术之一——分布式文件存储系统.Hadoop的作者Doug Cutting 和Mike 是根据Google发布关于GFS 的研究报告所设计出的分布式文件存储系统. 一.HDFS设计的前提或者假设有6个: 硬件错误是常态而不是异常.对于普通的每台机器来说,出现故障可能并是是常事,但HDFS可能由成千上万的机器组成,在这中情况下发生硬件错误就变成非常正常的事情.为了能够正常的工作,HDFS要能处理或者容忍这些硬件错误.所以对HDFS 来说硬件错误是常态而不是错误. 流式

hadoop分布式架构和设计

引言 Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时,它和其他的分布式文件系统的区别也是很明显的.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用.HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的.HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的.HDFS是A

3. hdfs原理分析

1. HDFS (2.0)架构: 2. HDFS 设计思想: HDFS数据块(block): 文件被切分成固定大小的数据块 默认数据块大小为64MB,可配置 若文件大小不到64MB,则单独存成一个block 为何数据块如此之大 数据传输时间超过寻道时间(高吞吐率) 一个文件存储方式 按大小被切分成若干个block,存储到不同节点上 默认情况下每个block有三个副本 3. HDFS优缺点: 优点: 高容错性 数据自动保存多个副本 副本丢失后,自动恢复 适合批处理 移动计算而非数据 数据位置暴露给