首页 > 试题广场 >

HDFS是通过什么机制保证数据可靠性的?

[问答题]
HDFS是通过什么机制保证数据可靠性的?

主要有以下6点:

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.心跳机制和副本重新创建

为了保证namenode和各个datanode的联系,HDFS采用了心跳机制。位于整个HDFS核心的namenode,通过周期性的活动来检查datanode的活性,像跳动的心脏一样。Namenode周期性向各个datanode发送心跳包,而收到心跳包的datanode要进行回复。因为心跳包是定时发送的,所以namenode就把要执行的命令也通过心跳包发送给datanode,而datanode收到心跳包,一方面回复namenode,另一方面就开始了用户或者应用的数据传输。

如果侦测到datanode失效,namenode之前保存在这个datanode上的数据就变成不可用数据。如果有的副本存储在失效的datanode上,则需要重新创建这个副本,放到另外可用的地方。

4.数据一致性:

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

5.租约:

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

6.回滚:

  HDFS安装或升级时,会将当前的版本信息保存起来,如果升级一段时间内运行正常,可以认为这次升级没有问题,重新保存版本信息,否则,根据保存的旧版本信息,将HDFS恢复至之前的版本。

发表于 2018-09-21 14:17:02 回复(0)
很多:
编辑日志
心跳发送(携带数据块报告)
数据的校验和(CheckSum:主要是写数据,封装进chunk后发往datanode管道)
冗余副本
机架感知
回收站(./trash
某个时间点的快照(createSnapshot命令
安全模式(safemode,仅允许读)dfs.safemode.threshold.pct配置阈值,还有其他与安全模式有关的配置
发表于 2018-09-12 22:29:08 回复(0)
HDFS通过数据备份机制保持数据的可靠性问题。一般而言,HDFS会设置三个副本,其中两个副本放在同一个机架,第三个副本放在不同机架。这样,当一个副本数据出现问题的时候,可以以最低代价从同机架的副本上进行拷贝,当机架出现故障,两个副本都出现数据问题时(非常小的概览事件),从第三副本上进行恢复。
发表于 2015-10-14 00:58:22 回复(0)