Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Hadoop分布式文件系统(HDFS)

Hadoop分布式文件系统(HDFS)

作者头像
大数据老哥
发布于 2021-03-23 13:27:13
发布于 2021-03-23 13:27:13
1.5K0
举报

一、介绍

HDFSHadoop Distributed File System)是 Hadoop 下的分布式文件系统,具有高容错、高吞吐量等特性,可以部署在低成本的硬件上。

二、HDFS 设计原理

2.1 HDFS 架构

HDFS 遵循主/从架构,由单个 NameNode(NN) 和多个 DataNode(DN) 组成:

  • NameNode : 负责执行有关 文件系统命名空间 的操作,例如打开,关闭、重命名文件和目录等。它同时还负责集群元数据的存储,记录着文件中各个数据块的位置信息。
  • DataNode:负责提供来自文件系统客户端的读写请求,执行块的创建,删除等操作。

2.2 文件系统命名空间

HDFS 的 文件系统命名空间 的层次结构与大多数文件系统类似 (如 Linux), 支持目录和文件的创建、移动、删除和重命名等操作,支持配置用户和访问权限,但不支持硬链接和软连接。NameNode 负责维护文件系统名称空间,记录对名称空间或其属性的任何更改。

2.3 数据复制

由于 Hadoop 被设计运行在廉价的机器上,这意味着硬件是不可靠的,为了保证容错性,HDFS 提供了数据复制机制。HDFS 将每一个文件存储为一系列,每个块由多个副本来保证容错,块的大小和复制因子可以自行配置(默认情况下,块大小是 128M,默认复制因子是 3)。

2.4 数据复制的实现原理

大型的 HDFS 实例在通常分布在多个机架的多台服务器上,不同机架上的两台服务器之间通过交换机进行通讯。在大多数情况下,同一机架中的服务器间的网络带宽大于不同机架中的服务器之间的带宽。因此 HDFS 采用机架感知副本放置策略,对于常见情况,当复制因子为 3 时,HDFS 的放置策略是:

在写入程序位于 datanode 上时,就优先将写入文件的一个副本放置在该 datanode 上,否则放在随机 datanode 上。之后在另一个远程机架上的任意一个节点上放置另一个副本,并在该机架上的另一个节点上放置最后一个副本。此策略可以减少机架间的写入流量,从而提高写入性能。

如果复制因子大于 3,则随机确定第 4 个和之后副本的放置位置,同时保持每个机架的副本数量低于上限,上限值通常为 (复制系数 - 1)/机架数量 + 2,需要注意的是不允许同一个 dataNode 上具有同一个块的多个副本。

2.5 副本的选择

为了最大限度地减少带宽消耗和读取延迟,HDFS 在执行读取请求时,优先读取距离读取器最近的副本。如果在与读取器节点相同的机架上存在副本,则优先选择该副本。如果 HDFS 群集跨越多个数据中心,则优先选择本地数据中心上的副本。

2.6 架构的稳定性

1. 心跳机制和重新复制

每个 DataNode 定期向 NameNode 发送心跳消息,如果超过指定时间没有收到心跳消息,则将 DataNode 标记为死亡。NameNode 不会将任何新的 IO 请求转发给标记为死亡的 DataNode,也不会再使用这些 DataNode 上的数据。由于数据不再可用,可能会导致某些块的复制因子小于其指定值,NameNode 会跟踪这些块,并在必要的时候进行重新复制。

2. 数据的完整性

由于存储设备故障等原因,存储在 DataNode 上的数据块也会发生损坏。为了避免读取到已经损坏的数据而导致错误,HDFS 提供了数据完整性校验机制来保证数据的完整性,具体操作如下:

当客户端创建 HDFS 文件时,它会计算文件的每个块的 校验和,并将 校验和 存储在同一 HDFS 命名空间下的单独的隐藏文件中。当客户端检索文件内容时,它会验证从每个 DataNode 接收的数据是否与存储在关联校验和文件中的 校验和 匹配。如果匹配失败,则证明数据已经损坏,此时客户端会选择从其他 DataNode 获取该块的其他可用副本。

3.元数据的磁盘故障

FsImageEditLog 是 HDFS 的核心数据,这些数据的意外丢失可能会导致整个 HDFS 服务不可用。为了避免这个问题,可以配置 NameNode 使其支持 FsImageEditLog 多副本同步,这样 FsImageEditLog 的任何改变都会引起每个副本 FsImageEditLog 的同步更新。

4.支持快照

快照支持在特定时刻存储数据副本,在数据意外损坏时,可以通过回滚操作恢复到健康的数据状态。

三、HDFS 的特点

3.1 高容错

由于 HDFS 采用数据的多副本方案,所以部分硬件的损坏不会导致全部数据的丢失。

3.2 高吞吐量

HDFS 设计的重点是支持高吞吐量的数据访问,而不是低延迟的数据访问。

3.3 大文件支持

HDFS 适合于大文件的存储,文档的大小应该是是 GB 到 TB 级别的。

3.3 简单一致性模型

HDFS 更适合于一次写入多次读取 (write-once-read-many) 的访问模型。支持将内容追加到文件末尾,但不支持数据的随机访问,不能从文件任意位置新增数据。

3.4 跨平台移植性

HDFS 具有良好的跨平台移植性,这使得其他大数据计算框架都将其作为数据持久化存储的首选方案。

附:图解HDFS存储原理

说明:以下图片引用 (https://blog.csdn.net/hudiefenmu/article/details/37655491)

1. HDFS写数据原理

2. HDFS读数据原理

3. HDFS故障类型和其检测方法

第二部分:读写故障的处理

第三部分:DataNode 故障处理

副本布局策略

彩蛋

资源获取 获取Flink面试题,Spark面试题,程序员必备软件,hive面试题,Hadoop面试题,Docker面试题,简历模板,优质的文章等资源请去 下方链接获取 GitHub自行下载 https://github.com/lhh2002/Framework-Of-BigData Gitee 自行下载 https://gitee.com/li_hey_hey/dashboard/projects

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据老哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【愚公系列】软考中级-软件设计师 036-软件工程基础(需求分析)
软件工程需求分析是软件开发过程中的重要环节之一,它主要是通过收集、分析和规范用户的需求,为软件开发团队提供明确的需求指导,确保软件开发的目标和方向与用户需求一致。
愚公搬代码
2024/02/17
4540
软件需求分析与管理的十个问题
首先需求包括了产品需求,用户需求,软件需求。产品需求关注的是产品的标准化和通用化,会对收集到的用户需求进行分类和优化,结合业界标准系统模型进行抽象并通用化。用户需求反映的是用户面临的问题域,根据问题域用户期望的能够达到的解决效果;而对于软件需求则是用软件工程的语言结构化和文档化的对用户需求和产品需求的描述。
阿新
2019/02/13
1.6K1
软件需求-架构师之路(五)
重点:软件需求分为 业务需求、用户需求和系统需求,三大类。(重点:业务需求、用户需求和系统需求)
用户9919783
2023/09/06
3120
软件需求-架构师之路(五)
1、软件项目规划过程——所有表集合
总之,估计项目成本和规模需要综合考虑多个因素,进行详细的调研和分析,以制定出可行的计划和预算。
红目香薰
2023/10/11
4540
【愚公系列】软考中级-软件设计师 033-软件工程基础(考点简介)
软件工程基础是指软件工程的基本概念、原理、方法和技术等基础知识。在软件工程学科中,这些基础知识对于设计、开发、测试和维护高质量软件非常重要。
愚公搬代码
2024/02/14
3260
2、软件项目跟踪和监督过程——所有表集合
这些表格可以通过使用项目管理软件来自动生成和更新,也可以手动创建和更新。无论如何,它们都是监督项目进展和结果的重要工具,可以帮助项目团队及时发现问题和风险,并采取相应措施来确保项目按计划进行。
红目香薰
2023/10/11
3320
软考高级:需求变更管理过程概念和例题
需求变更管理过程是软件项目管理中不可或缺的一部分,主要目的是确保项目能够响应需求的变化,同时保证项目目标的实现和质量的维护。这一过程涉及以下几个关键步骤:
明明如月学长
2024/05/24
1190
软考高级:需求变更管理过程概念和例题
项目管理第五章项目范围管理内容_项目范围管理在规划过程组四个模块
1.项目章程,2.项目管理计划,3.项目文件,4.商业文件,5.协议,6.事业环境因素,7.组织过程资产
全栈程序员站长
2022/11/08
7960
项目管理第五章项目范围管理内容_项目范围管理在规划过程组四个模块
【愚公系列】软考中级-软件设计师 035-软件工程基础(过程模型)
软件工程的过程模型是指开发软件的过程中所采用的一种规范化方法或框架。常见的软件工程过程模型包括瀑布模型、迭代开发模型、喷泉模型、敏捷开发模型等。
愚公搬代码
2024/02/16
4440
【PMP】PMBOK第六版项目管理5大过程组10大知识领域知识点汇总
7.在没有对变更进行全面评估之前,不能找CCB,更不能立即实施变更,但是,较小的变更需不要报告给CCB.
心跳包
2020/08/31
2.2K0
【PMP】PMBOK第六版项目管理5大过程组10大知识领域知识点汇总
需求管理那些事儿
在实际工作中,大家很少有机会经历从0到1的项目,绝大多数情况是加入到一个已经发展了一段时间的团队,参与维护已经运行了几年的项目。
阿杜
2019/04/22
5690
需求管理那些事儿
《软件开发的201个原则》—— 一般原则、需求原则、设计原则、编码原则、测试原则、管理原则、产品原则、演变原则
我无意中发现了这一个书《软件开发的201个原则》,是国外一个大佬写的,国内诸多大佬推荐,发现写的很好,可以用来指导软件的开发!下面的内容是我手打的一遍,内容不全,甚至一些信息可能敲错了,大家想看完整地内容,还是建议网购买书!
明志德道
2023/10/21
1.1K0
《软件开发的201个原则》——  一般原则、需求原则、设计原则、编码原则、测试原则、管理原则、产品原则、演变原则
管理学第三章_企业集团管理第五章自测
(1)规划范围管理:对如何定义、确认和控制项目范围的过程进行描述。 (2)收集需求:为实现项目目标,明确并记录项目干系人的相关需求的过程。 (3)定义范围:详细描述产品范围和项目范围,编制项目范围说明书,作为以后项目决策的基础。 (4)创建工作分解结构(WBS):把整个项目工作分解为较小的、易于管理的组成部分,形成一个自上而下的分解结构。 (5)确认范围:正式验收已完成的可交付成果。 (6)范围控制:监督项目和产品的范围状态、管理范围基准变更。
全栈程序员站长
2022/11/08
3340
管理学第三章_企业集团管理第五章自测
软件项目管理知识点总结
项目的定义和特征: (1)美国项目管理权威机构--项目管理协会(Project Management Institute,PMI)认为,项目是为完成某一独特的产品或服务所做的一次性努力. (2)德国DIN(德国工业标准)69901认为,项目是指在总体上符合下列条件的唯一性任务: ①具有预定的目标; ②具有时间、财务、人力和其他限制条件; ③具有专门的组织. (3)《项目管理质量指南(ISO10006)》定义项目为:“具有独特的过程,有开始和结束日期,由一系列相互协调和受控的活动组成.过程的实施是为了达到规定的目标,包括满足时间、费用和资源等约束条件”. (4)中国项目管理知识体系纲要(2002版)中对项目的定义为:项目是创造独特产品、服务或其他成果的一次性工作任务. (5)联合国工业发展组织《工业项目评估手册》对项目的定义是:“一个项目是对一项投资的一个提案,用来创建、扩建或发展某些工厂企业,以便在一定周期内增加货物的生产或社会的服务.” (6)世界银行认为:“所谓项目,一般系指同一性质的投资,或同一部门内一系列有关或相同的投资,或不同部门内的一系列投资”. (7)一般地说,所谓项目就是指在一定约束条件下(主要是限定资源、限定时间、限定质量),具有特定目标的一次性任务. 共同特征: (1)一次性 (2)独特性 (3)目标的明确性 (4)活动的整体性 (5)组织的临时性和开放性 (6)开发与实施的渐进性 常见的习题都是选出符合项目定义的事物,如:创建一个具有特定功能的软件是项目,但是日常打扫卫生就不属于项目 项目的特征: 1.有明确的目标 2.项目之间的活动具有相关性 3.限定的周期 4.有独特性 5.资源成本的约束性 6.项目的不确定性 项目与日常运作有什么不同: 1.项目是一次性的,日常运作是重复进行的 2.项目是以目标为导向的,日常运作是通过效率和有效性体现的 3.项目是通过项目经理及其团队工作完成的,而日常运作是职能式的线性管理 4.项目存在大量的变更管理,而日常运作则基本保持连贯性
全栈程序员站长
2022/08/25
1.7K0
软件项目管理知识点总结
信息系统项目实施管理方案
针对本项目,我公司提供的实施详细内容包括: 1) 合理、科学的设备选型及购置项目需求的全部设备; 2) 完成项目需求全部设备和系统的现场安装、配置及调试; 3) 系统联调; 4) 项目验收及测试,提交详细验收及测试文档; 5) 系统试运行,并提交相关技术文档; 6) 提供专业培训及现场用户培训; 7) 售后服务支持;
用户7454708
2023/05/08
9130
信息系统项目实施管理方案
【愚公系列】软考高级-架构设计师 109-软件架构演化原则
软件架构演化原则是指在软件架构设计和演化过程中应该遵循的一些指导性原则和规范,以确保软件系统在不断变化和迭代的过程中保持稳健、可维护和可扩展。
愚公搬代码
2024/08/15
1920
8、软件配置管理过程——所有表集合
以上是一些常见的实施中管理软件配置项表的步骤,具体的实施方法可以根据实际情况进行调整和优化。
红目香薰
2023/10/11
3360
十大管理领域可能的问题与解决举措
熟读吧,根据案例中出现的情况,使用不同的话术 可研过程中可能出现的问题 项目经理的技术经验不足 没有正式、书面的新产品研发项目建议书就开展可行性研究工作 新产品研发的可行性研究工作不充分,尤其缺少技术可行性分析和论证 研发过程中对人才缺乏、竟争对手等带来的风险缺乏充分的分析,没有合理有效的应对方案 没有新产品的初步设计方案就开始研发工作 新产品的需求和技术指标不应由领导把关,应进行外部评审 在项目启动前缺少对项目成本的估算或成本估算工作未到位 可行性研究报告缺少必要的内部论证或外部评估环节 没有制订综合、全
用户3148308
2021/05/27
7860
需求管理规范
        MOMO云敏捷项目管理,融合了敏捷、DevOps思想,打通了整个从需求、研发、测试、运维、运营的端到端敏捷。在实践中通过运维自动化,将Scrum敏捷团队开发的产品快速上线,并通过及时的运营,反馈给敏捷团队进行方向调整。
红目香薰
2022/11/29
6070
需求管理规范
软考高级:需求验证概念和例题
需求验证是软件开发过程中的一个关键环节,它主要包括需求评审和需求测试两个部分。下面分别对这两个部分进行讲解。
明明如月学长
2024/05/24
1370
软考高级:需求验证概念和例题
推荐阅读
相关推荐
【愚公系列】软考中级-软件设计师 036-软件工程基础(需求分析)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档