文章目录

  • 前言
  • HDFS块状态类型
  • HDFS块副本冗余度的重建
    • 重建围绕的核心:NeedReplica
    • 待复制副本的优先级划分
    • HDFS的延时副本重建过程

前言


在分布式存储系统中,数据往往通过以副本的形式来保持其冗余性。因为存储的集群规模大到一定程度,每天有若干节点挂掉是很常见的现象,单副本数据显然会存在高概率丢数据的情况的。那么这里有一个问题,当存储节点挂掉的时候,系统如何再次让数据保持和原先一样的冗余度呢?本文笔者结合HDFS块副本的情况来聊聊这个话题,这个处理过程在大多存储系统中想必也是通用的。

HDFS块状态类型


在这里先简单说说HDFS中一个block块的状态类型,有以下几种类型:

  • InvalidateReplica,无效副本块,一般发生在文件删除操作后。
  • PendingReplica,待复制副本块。
  • NeedReplica(或被称为UnderReplica),当前需要被重启replicate的副本。
  • PostponedReplica,本认为stale的副本块。

以上的划分是一种比较粗粒度的状态划分,还未到细粒度比如是否在under-construction之类的阶段。后续副本块冗余度的重新构建和以上的副本将会密切相关。

HDFS块副本冗余度的重建


重建围绕的核心:NeedReplica


在HDFS重建副本块的过程里,最与之密切相关的是当前需要被复制的块状态副本,即NeedReplica。

HDFS在各种情况的检查中如果发现某个块的副本没有达到预期情况时,会加入一个块副本记录到NeedReplica对象里,而不是马上开始下发replicate操作命令给下面的DN。

HDFS并不会是时时刻刻都在检查所有块的冗余度情况(那样显然会加重NN的负担),而是在以下的特定场景中检查:

1). 当下线节点,或节点shutdown的情况
2). 当写完一个文件的时候,再重新检查一次该文件块的副本是否达到预期数
3). NN重新启动为Active服务后的初始化过程中,做一次全量块的副本数检查。

上述提到的副本块是否达到预期并不是单纯的指定是当前副本数达到期待副本数量,在一些系统内还会判断副本的placement是否满足预期,比如是否分布在多rack的情况。因为同rack的情况是会存在丢数据的风险的。

这里还有另外2种和NeedReplica相关的副本状态。

  • PendingReplica:待加入NeedReplica集合的副本块,比如一些replica在上次replication操作失败后会重新加入pending集合,然后又会被定期挪到NeedReplica里面。
  • PostponedReplica:这类Replica被认为是状态延时,落后的,需要等待其上的DN最新一次的块汇报来表明其是live的。对于这类replica,NN也是将其作为临时不可用的副本数据,也是需要replication的。但和NeedReplica不同的是,一旦检测出新的块数据已经报告上来了,这些postponed的replica自然会被挪掉。所以这类replica只是一种“假定missing”的副本。一般发生于服务failover阶段。

待复制副本的优先级划分


当副本数据出现损坏丢失的时候,不是所有的数据损坏的情况是一致的,所以这里我们需要给待复制的副本定个优先级。以此告诉系统哪些副本块是要被优先复制的。一个最简单的例子,3副本里丢了2个副本的数据的优先级是要大于3个副本里只丢了1个副本的那个数据的。

在HDFS里,对带复制做了5个层级的划分:

  • P1:最高优先级的,比如说目前只存在单副本的情况了。
  • P2:冗余度很低的情况,比如副本中丢失了2/3的情况。
  • P3:冗余度较低的情况,比如副本中丢失了1/3的情况。
  • P4: 副本数冗余度足够,但是location不对,比如同rack甚至同节点,存在丢数据的风险。
  • P5:损坏副本块,此情况为所有副本块都已丢失的情况,理应也复制不了了。

HDFS的延时副本重建过程


HDFS出于性能的考虑,采用了一种延时复制的策略。它开启了一个独立线程周期性的处理这些需要被额外复制的副本块。我们可以简单理解为它是一个副本状态中央处理器,包括对于无效副本块的处理也是它做的。

注意,这个中央副本处理器本身不做实际数据的拷贝删除,而是将对于副本请求命令下发给对应的DN。这些命令在下一次的NN给DN的心跳内会带上这些命令。以上整个流处理图如下:

以上就是本文阐述的关于块副本冗余度处理的相关内容,希望给大家带来收获。

HDFS块副本的冗余度构建流程相关推荐

  1. HDFS详解(架构设计、副本放置策略、读写流程、进程、常用命令等)

    前言:当数据集的大小超过一台独立的物理计算机的存储能力时,就有必要对它进行分区(Partition)并存储到若干台单独的计算机上.管理网络中跨多台计算机存储的文件系统成为分布式文件系统(distrib ...

  2. 华为云大数据存储的冗余方式是三副本_大数据入门:HDFS数据副本存放策略

    大数据处理当中,数据储存始终是一个重要的环节,从现阶段的市场现状来说,以Hadoop为首的大数据技术框架,仍然占据主流地位,而Hadoop的HDFS,在数据存储方面,仍然得到重用.今天的大数据入门分享 ...

  3. HDFS内副本和块的状态分析

    一 数据块(Block)和数据块副本(Replica)关系 Block是HDFS数据块的基本抽象,实现可Writable接口,可以序列化. 是NameNode数据块的表示. Replica是DataN ...

  4. 详细介绍HDFS的API实操与读写流程

    第 1 章 HDFS 概述 定义 是一个文件系统,是分布式的 使用场景 适合一次写入,多次读出的场景 优点 高容错性.适合处理大数据.可构建在廉价机器上 缺点 不适合低延时数据访问.无法高效的对大量小 ...

  5. 【推荐系统算法学习笔记1】基本架构、专有名词、构建流程

    文章目录 1.架构 1.1 大数据框架:lambda 架构的 1.2.基本概念 2. 推荐模型构建流程 2.1 数据 2.1.1 数据来源 2.1.2 数据清洗.处理 2.2 特征工程 2.3 算法( ...

  6. Pacbio测序原理以及SMRT bell文库构建流程简述

    ​ 2018年发的老文章了,文章不错,所以决定再捞一下.文中有3段视频,如需观看请大家移步"基因Share"观看. Pacbio测序原理及SMRT bell文库构建流程简述(二)​ ...

  7. 全方位揭秘!大数据从0到1的完美落地之HDFS块详解

    HDFS块详解 传统型分布式文件系统的缺点 现在想象一下这种情况:有四个文件 0.5TB的file1,1.2TB的file2,50GB的file3,100GB的file4:有7个服务器,每个服务器上有 ...

  8. 前沿技术探秘:知识图谱构建流程及方法

    作者 | 郑毅 封图| CSDN│下载于视觉中国 出品 | CSDN云计算(ID:CSDNcloud) 随着AI技术的发展和普及,当今社会已经进入了智能化时代.与以往不同的是,在这一波浪潮中,企业不仅 ...

  9. HDFS的副本存放策略(机架感知策略)

    HDFS作为Hadoop中的一个分布式文件系统,而且是专门为它的MapReduce设计,所以HDFS除了必须满足自己作为分布式文件系统的高可靠性外,还必须为MapReduce提供高效的读写性能,那么H ...

最新文章

  1. django第三次(转自刘江)
  2. python中的内部函数和闭包函数
  3. java 数组处理_JAVA操作数组
  4. 鸿蒙os 芯片制程,华为Mate50将如期发布,屏下镜头+鸿蒙OS,再见iPhone12
  5. jieba库词频统计_用jieba库统计文本词频及云词图的生成
  6. java、c语言、python、c++的不同之处_总结几点C/C++、Java与Python的区别
  7. python实现斐波那契数列
  8. 爬虫学习2----Pyquery
  9. 阿里开发者们的第15个感悟:做一款优秀大数据引擎,要找准重点解决的业务场景...
  10. 缓存穿透-布隆过滤器
  11. keepalived基本应用解析
  12. MTK TP驱动代码调用流程
  13. OpenCV——无法打开“opencv2/opencv.hpp”文件
  14. android连接打印机打印pdf文件,在android中打印pdf
  15. 树莓派4B安装WPS解决字体缺失问题
  16. PIKA trouble01 -- pika主从关系不能建立及主从断连问题
  17. 无人机基础知识:多旋翼无人机各模式控制框图
  18. html把背景设为白色,ps中图片背景怎么改成白色?
  19. background-image无法显示图片
  20. 超好用的在线PDF转Word网站,真后悔没早发现

热门文章

  1. Word 2016表格三线表制作
  2. mmo手游地图同步总结
  3. 2009年威客模式已经成熟
  4. DDS信号发生器的实现(内含代码资料)
  5. oracle非分区表,转分区表
  6. 索尼sr621sw和索尼sr626sw规格一样吗
  7. Eclipse日志文件存放在何处
  8. MSP430 UART(一)
  9. 1、电子负载如何用来给电池放电
  10. stm32—霍尔传感器的初步使用