当前位置: 首页 > news >正文

【大数据学习 | 面经】HDFS的三副本机制和编码机制

1. hdfs的三副本机制

hdfs的三副本机制是其核心特性之一,旨在确保数据的高可用性和容错性。通过将每个文件的数据块复制三个副本,并分散存储在不同的DateNode上,hdfs能够在节点故障的时候提供数据冗余和持续访问的能力。

三副本机制的工作原理:

数据块的划分:

HDFS会将大文件分割成固定大下的数据块(默认参数是128M).每个这样的数据块都会被独立的处理和管理。

副本分布策略:

对于每个数据块,HDFS会创建三个副本。这些副本会被放置在集群中的不同的DataNode中,即使某个节点损坏或下线,数据仍然可以被访问。

具体的分布规则如下:

  • 第一个副本放置在写入请求所在的本地节点。
  • 第二个副本放置在一个不同机架上的随机节点。
  • 第三个副本放置在同一个机架上但不同于第二个副本节点的另一个节点上。

容错与恢复:

  • 如果任何一个DataNode发生故障,NameNode会检测到这种情况并触发数据恢复过程。它会从其他两个健康的副本中选择一个来重新创建丢失的副本,以保持三副本的数量不变。
  • 这种机制使得即使有两个副本所在的节点同时失效,只要还有一个副本存在,数据就不会丢失。

读取优化:

  • 当客户端请求读取数据时,NameNode会返回所有副本的位置信息。客户端可以选择离自己最近或负载最轻的节点进行读取,从而提高读取性能。

写入优化:

  • 在写入过程中,客户端只需向其中一个副本发送数据,其余的副本由这个节点负责同步。这样可以减少网络传输量,并且加快了写入速度。

三副本机制的优势

  • 高可用性:即使有单点故障或多点故障,系统仍能保证数据的可访问性。
  • 简单易行:实现起来相对简单,不需要复杂的算法或额外的硬件支持。
  • 良好的读写性能:由于副本分布在多个节点上,因此可以在多个地方同时读取同一个文件的不同部分,提高了并发读取的能力;而写入时也只需要向一个节点发送数据,简化了流程。

2. hdfs的编码机制(纠删码)

HDFS(Hadoop Distributed File System)中的纠删码(Erasure Coding, EC)是一种数据冗余技术,它提供了比传统三副本机制更高的存储效率,同时保持了良好的容错能力。纠删码通过将文件分割成多个数据块,并计算额外的校验块,然后分布存储这些数据和校验块来实现

纠删码的基本原理:

纠删码的工作原理基于编码算法,比如Reed-Solomon(RS)或Isa-L RC(Intel's Storage Acceleration Library Reed-Solomon)。以常见的6+3纠删码策略为例:

数据块:原始文件被分成6个相等大小的数据块。
校验块:根据这6个数据块计算出3个校验块。
总块数:总共9个块(6个数据块 + 3个校验块)会被分散存储在不同的DataNode上。

这意味着即使丢失了任意3个块(无论是数据块还是校验块),仍然可以从剩下的6个块中恢复出完整的原始数据。

HDFS中纠删码的优势

1. 提高存储效率:相比于传统的三副本机制,纠删码可以显著减少所需的存储空间。例如,在6+3的配置下,存储开销大约是50%,而三副本需要300%的存储空间。

2 .容错性:纠删码可以在不影响数据可用性的前提下容忍一定数量的节点故障。

3. **性能优化**:HDFS设计了读写优化,使得纠删码不会对I/O性能造成太大影响。例如,当读取数据时,如果某些块不可用,系统会选择从其他可用的块中重建所需的数据,而不是等待所有块都可用。

使用场景:

  • 冷数据存储:对于访问频率较低的数据,使用纠删码可以节省大量存储成本。
  • 大规模数据集:特别适合存储大文件或者非常大的数据集,因为它们能够从中获得更明显的存储效率提升。

配置与管理

自Apache Hadoop 3.0版本开始,HDFS引入了原生支持纠删码的功能。管理员可以通过配置参数选择合适的纠删码策略,并且可以根据实际需求灵活调整策略。此外,HDFS还提供了一些工具和命令行接口用于管理和监控纠删码状态,如`hdfs ec`命令。

http://www.lryc.cn/news/494641.html

相关文章:

  • lua-cjson 例子
  • java面向对象知识点: 封装,构造,重载
  • go的math/rand随机数生成器
  • JiaJia-CP-1,2,3的WP(2)
  • 3DMAX星空图像生成器插件使用方法详解
  • ROS2 系列学习教程(总目录)
  • [GKCTF 2021]签到
  • Kubernetes——part11 云原生中间件上云部署 Rocketmqkafkazookeeper
  • ip租期到了
  • 鸿蒙系统(harmony)支持Android应用的双框架技术架构分析
  • 面积等效原理
  • 【测试工具JMeter篇】JMeter性能测试入门级教程(四):JMeter中BeanShell内置方法使用
  • 大小写转换
  • 手机镜头组如此突出,考虑恢复以前设计
  • 浅谈人工智能之基于容器云进行图生视频大模型搭建
  • 大型复杂项目管理怎么结合传统与敏捷
  • 家校通小程序实战教程04教师管理
  • UI控件使用说明
  • 树莓派2安装jupyterlab以便更好的编程体验
  • 计算机网络常见面试题总结(上)
  • k8s 亲和性之Affinity
  • SpringBoot 插件化开发模式
  • 基于树莓派的安保巡逻机器人--项目介绍
  • Python学习笔记8-函数1
  • 如何使用ST7789展现图片?[ESP--4]
  • 【QNX+Android虚拟化方案】129 - USB眼图参数配置
  • 【机器学习】探索机器学习决策树算法的奥秘
  • K8S版本和istio版本的对照关系
  • 嵌入式硬件实战提升篇(三)商用量产电源设计方案 三路电源输入设计 电源管理 多输入供电自动管理 DCDC降压
  • 【机器学习】机器学习的基本分类-监督学习-逻辑回归-Sigmoid 函数