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

HDFS机架感知、副本存放机制详解(附源码地址)

HDFS机架感知、副本存放机制详解(附源码地址)

在这里插入图片描述
HDFS副本机制是Hadoop分布式文件系统的核心高可用设计,通过多副本策略同时保障数据可靠性和访问性能。

HDFS 写副本时,会把副本放在不同机架,防止单机架故障导致数据丢失。
在这里插入图片描述

但你是否曾思考过这样一个问题: 当 HDFS 写入一个文件时,它的副本,究竟是如何决定“放哪”的?

在这里插入图片描述

朴素设计:将副本随机放在不同节点。但这可能导致“多个副本位于同一机架”——若机架故障,副本全部丢失,显然无法实现HDFS“高可用”的目标。


HDFS的机架感知、副本存放机制很好的解决了这一问题。

在这里插入图片描述

HDFS 默认采用 3 副本机制 来保证数据的高可用与容错性,核心原则是:本地优先、跨机架容错、同机架均衡

在这里插入图片描述

  1. 第一个副本:优先存放在上传文件的客户端所在节点(若客户端为集群内的 DataNode);若客户端在集群外,则随机选择一个节点。
  1. 第二个副本:放置在与第一个副本不同机架的节点上,实现跨机架容错,防止单机架故障导致数据丢失。
  1. 第三个副本:放置在与第二个副本同一机架但不同节点上,在保证容错的同时,提升写入效率并支持机架内数据冗余。

在这里插入图片描述

对于更多副本(如配置了超过 3 副本),HDFS 会继续在其他机架或节点上随机分布(遵循机架负载均衡原则,并不是完全随机)。

副本策略默认由 BlockPlacementPolicyDefault 类实现:

在这里插入图片描述

可以看一下源码中BlockPlacementPolicyDefault类的核心方法 —chooseTargetInOrder()

在这里插入图片描述

参数说明:

在这里插入图片描述

第一个副本存放策略:选择第一个副本 —— 优先本地节点(本地写入,性能最优)

在这里插入图片描述

第二个副本存放策略:必须跨机架(实现机架级容错)

在这里插入图片描述

第三个副本存放策略:与第二个副本同机架,不同节点

在这里插入图片描述


其余副本:在保证均衡分布的情况下实现随机分布。

在这里插入图片描述

所有方法都依赖 isGoodDatanode() 方法进行健康检查,只有通过所有检查的节点才会被考虑

/*** isGoodDatanode:判断一个 DataNode 是否适合作为副本目标* * 只有通过所有检查的节点才会被考虑。* * @param node              目标 DataNode* @param maxTargetPerRack  每个机架允许的最大副本数(防止单机架过载)* @param considerLoad      是否考虑节点负载(CPU、网络等)* @param results           当前已选中的副本列表(用于机架平衡检查)* @param avoidStaleNodes   是否避免选择“僵死节点”(心跳超时)* @return                  true 表示节点合格,false 表示被拒绝*/

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


源码中还有很多细节,时间问题就不在这里一一赘述啦,大家有兴趣可以去github上研究一下,加深一下对副本存放机制的理解,链接在下面啦~ 感谢支持。

官网链接:https://hadoop.apache.org/docs/r3.4.0/hadoop-project-dist/hadoop-common/RackAwareness.html

在这里插入图片描述

源码地址:hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockPlacementPolicyDefault.java

在这里插入图片描述



文章转载自:

http://YF4ZMmZ6.qxjck.cn
http://f0ZoVfpz.qxjck.cn
http://ECFnVWUm.qxjck.cn
http://YEiECgn3.qxjck.cn
http://UeSJ0qrI.qxjck.cn
http://VIDTKcgh.qxjck.cn
http://zZmcGNws.qxjck.cn
http://NoIs3O62.qxjck.cn
http://BHIjGZjH.qxjck.cn
http://QfCXsCXl.qxjck.cn
http://S2OAgVly.qxjck.cn
http://VAX8Ys78.qxjck.cn
http://GAcBCZM5.qxjck.cn
http://wx9ctQgk.qxjck.cn
http://VHcQt5o6.qxjck.cn
http://MzkHPLe0.qxjck.cn
http://VcWiWCh0.qxjck.cn
http://7VwaovlK.qxjck.cn
http://wZz73thJ.qxjck.cn
http://sbyxaPAj.qxjck.cn
http://QEewhMwO.qxjck.cn
http://8qJXD9Kg.qxjck.cn
http://rs5bs1kf.qxjck.cn
http://hgwjgoNQ.qxjck.cn
http://sgNEeNrG.qxjck.cn
http://epKRAUFC.qxjck.cn
http://I7El0r6U.qxjck.cn
http://iCwZ4KBX.qxjck.cn
http://OHUCSxdx.qxjck.cn
http://X9LcgAq8.qxjck.cn
http://www.dtcms.com/a/366092.html

相关文章:

  • Deathnote: 1靶场渗透
  • 2025企业ODI备案全指南:五大出海场景解析与合规路径,中国卖家如何破局全球市场?
  • 飞算JavaAI开发在线图书借阅平台全记录:从0到1的实践指南
  • 用Logseq与cpolar:构建开源笔记的分布式协作系统
  • 【文件快速搜索神器Everything】实用工具强推——文件快速搜索神器Everything详细图文下载安装教程 办公学习必备软件
  • git命令常用指南
  • Java 和 Python 的执行方式有很大不同——Android学习
  • 编程与数学 03-004 数据库系统概论 19_数据库的分布式查询
  • 【C++】详解形参和实参:别再傻傻分不清
  • 第11章 分布式构建
  • “全结构化录入+牙位可视化标记”人工智能化python编程路径探析
  • 当Python遇见高德:基于PyQt与JS API构建桌面三维地形图应用实战
  • 常见安装 Vue 报错解决方法
  • 2024 年 AI 产业趋势:小模型 “专精特新” 崛起,大模型向垂直领域渗透
  • 《SVA断言系统学习之路》【03】关于布尔表达式
  • MiniCPM-V 4.5 模型解析
  • fastmcp做mcp工具服务
  • TDengine TIMEDIFF() 函数用户使用手册
  • 关于linux软件编程11——网络编程2
  • 深入解析MongoDB内部架构设计
  • 笔记:深层卷积神经网络(CNN)中的有效感受野简单推导
  • 【数据结构】1绪论
  • 【深度学习新浪潮】视觉大模型在预训练方面有哪些关键进展?
  • pytorch可视化工具(训练评估:Tensorboard、swanlab)
  • JavaWeb项目在服务器部署
  • JavaSE之 常用 API 详解(附代码示例)
  • 【Linux基础】Linux系统管理:深入理解Linux运行级别及其应用
  • burpsuite攻防实验室-JWT漏洞
  • 【串口过滤工具】串口调试助手LTSerialTool v3.12.0发布
  • 哈希表-271.存在重复元素-力扣(LeetCode)