Hadoop分布式文件系统——HDFS原理简介
阅读前必看
这篇文章与其说是一篇文章,不如说是一篇在家学习的笔记,其中大部分内容来自于github上一个大神的开源笔记,在此附上链接,表达版权所属以及敬意:github源地址
一、介绍
HDFS(Hadoop Distributed File System)是Hadoop下的一个分布式文件系统。可以执行任意一个文件系统所应该具有的功能,目录结构比较类似于Linux文件系统。特点是分布式以及大数据存储。
具有高容错、高吞吐量的特点,可以部署在低成本的硬件上。
二、HDFS设计原理
2.1 HDFS架构
HDFS遵循M/S(主/从)架构,由单个NameNode(NN)和多个DataNode(DN)组成
- NameNode:负责执行有关文件系统命名空间的操作,例如打开、关闭、重命名文件和目录等。还负责 集群元数据的存储,记录着文件中各数据块的位置信息
- DataNode:负责提供来自文件系统客户端的读写请求,执行块的创建、删除等操作。
2.2 文件系统命名空间
HDFS的文件系统命名空间的层次结构比较类似于Linux文件系统,支持目录和文件的创建、移动、删除和重命名等操作,支持配置配置用户和访问权限,但不支持硬链接和软连接。NameNode负责维护文件系统命名空间,记录对名称空间或其属性的任何更改
2.3 数据复制
由于Hadoop被设计运行在廉价的机器上,这意味着硬件是不可靠的,为了保证容错性,HDFS提供了数据复制机制。HDFS将每一个文件存储为一系列块,每个块由多个副本来保证容错,块的大小和复制因子可以自行配置(默认情况下,块大小是128M,默认复制因子是3)
2.4 数据复制的实现原理
在写入程序位于datanode上时,就优先将写入文件的一个副本放置在该datanode上,否则放在随机datanode上。之后在另一个远程机架上的任意一个节点上放置另一个副本,并在该机架上的另一个节点上放置最后一个副本。此策略可以减少机架间的写入流量,从而提高写入性能。
如果复制因子大于3,则随机确定第四个和之后副本放置位置,同时保持每个机架的副本数量低于上限,上限值通常为(复制系数-1)/机架数量+2
注意:不允许同一个datanode上具有同一块的多个副本。
2.5 副本的选择
一句话来说就是:就近原则
为了最大限度地减少带宽消耗和读取延迟,HDFS在执行读取请求时,优先读取距离读取器最近的副本。如果在与读取节点相同机架上存在副本,则优先选择该副本。如果HDFS集群跨越多个数据中心,则优先选择本地数据中心上的副本
2.6 架构稳定性
心跳机制
每个DataNode定期向NameNode发送心跳消息,如果超过指定时间没有收到心跳消息,则将DataNode标记为死亡。NameNode不会将任何新的I/O请求转发给标记为死亡的DataNode,也不会再使用这些DataNode上的数据。由于数据不再可用,可能会导致某些的复制因子小于其指定值,NameNode会跟踪这些块,并在必要时进行重新复制。
数据的完整性
由于设备故障等原因,存储在DataNode上的数据也会发生损坏。为了避免读取到已经损坏的数据而导致的错误,HDFS提供了数据完整性校验机制来保证数据的完整性,具体操作如下:
当客户端创建HDFS文件时,它会计算文件的每个块的校验和,并将校验和存储在同一HDFS命名空间的单独隐藏文件中。当客户端检索文件内容时,它会验证从每个DataNode接收的数据是否与存储在关联校验和文件中的校验和匹配。如果匹配失败,则证明数据已经损坏,此时客户端会选择从其它DataNode获取该块的其它可用副本。元数据的磁盘故障
FsImage 和 EditLog 是HDFS的核心数据,这些数据的意外丢失可能会导致整个HDFS服务不可用。为了避免这个问题,可以配置NameNode使其支持FsImage 和 EditLog 多副本同步,这样FsImage 或 EditLog 的任何改变都会引起每个副本FsImage 和 EditLog 的同步更新。
支持快照
快照支持在特定时刻存储数据副本,在数据意外损坏时,可以通过回滚操作恢复到健康的数据状况。
三、HDFS的特点
3.1 高容错
由于HDFS采用数据的多副本方案,所以部分硬件的损坏不会导致全部数据的丢失
3.2 高吞吐量
HDFS设计的重点是支持高吞吐量的数据访问,而不是低延迟的数访问
3.3 大文件支持
HDFS适合于大文件的存储,文档的大小应该是GB 到 TB级别的
3.4 简单的一致性模型
HDFS更适合于一次写入多次读取(write-once-read-many)的访问模型。支持将内容追加到文件末尾,但不支持数据的随机访问,不能从文件任意位置新增数据
3.5 跨平台移植性
Java特点,HDFS具有良好的跨平台移植性,使得其它大数据框架都将其作为数据持久化的首选方案。
图解HDFS存储原理
数据来源:HDFS漫画图解
HDFS写数据原理
HDFS写数据原理
HDFS 故障类型和检测方法
- 读写故障处理
- DataNode故障处理
- 副本布局策略
参考资料
- Apache Hadoop 2.9.2 > HDFS Architecture
- Tom White . hadoop 权威指南 [M] . 清华大学出版社 . 2017.
- 翻译经典 HDFS 原理讲解漫画
- 再次附上:本文参考
Hadoop分布式文件系统——HDFS原理简介相关推荐
- Hadoop分布式文件系统HDFS的工作原理详述
Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.它能提供高吞吐量的数据访问,非常适合大规模数据集上的应 ...
- JAVA大数据(二) Hadoop 分布式文件系统HDFS 架构,MapReduce介绍,Yarn资源调度
文章目录 1.分布式文件系统HDFS 1.HDFS的来源 2.HDFS的架构图之基础架构 2.1 master/slave 架构 2.2 名字空间(NameSpace) 2.3 文件操作 2.4副本机 ...
- 大数据技术之Hadoop分布式文件系统HDFS系统知识整理(从入门到熟练操作)
系列博客 1.大数据技术之Hadoop完全分布式集群搭建+Centos7配置连通外网和主机 2.大数据技术之Hadoop编译源码 3.大数据技术之Hadoop分布式文件系统HDFS系统知识整理(从入门 ...
- Hadoop分布式文件系统--HDFS结构分析
前言 在Hadoop内部,详细实现了很多类的文件系统,当然最最被我们用到的就是他的分布式文件系统HDFS了. 可是本篇文章不会讲HDFS的主从架构等东西,由于这些东西网上和资料书中都讲得非常多了. 所 ...
- Hadoop分布式文件系统 (HDFS)
Hadoop分布式文件系统 简介 HDFS(Hadoop distribute file system) 是Hadoop核心组成,是分布式存储服务 分布式文件系统能够横跨多态计算机.在大数据时 ...
- Hadoop 分布式文件系统 - HDFS
当数据集超过一个单独的物理计算机的存储能力时,便有必要将它分不到多个独立的计算机上.管理着跨计算机网络存储的文件系统称为分布式文件系统.Hadoop 的分布式文件系统称为 HDFS,它 是为 以流式数 ...
- 分布式文件系统—HDFS—入门简介
原文作者:Zh_Y_G 原文地址:HDFS入门简介 目录 HDFS是什么? 设计目标: 安装配置 HDFS读写流程图解 CheckPoint HDFS是什么? 易于扩展的分布式文件系统 运行在大量普通 ...
- Hadoop分布式文件系统HDFS
HDFS的探究: HDFS HDFS是 Hadoop Distribute File System的缩写,是谷歌GFS分布式文件系统的开源实现,Apache Hadoop的一个子项目,HDFS基于流数 ...
- Hadoop分布式文件系统——HDFS
一.介绍 HDFS (Hadoop Distributed File System)是 Hadoop 下的分布式文件系统,具有高容错.高吞吐量等特性,可以部署在低成本的硬件上. 二.HDFS 设计原理 ...
最新文章
- 【codevs2011】【LNOI2013】最小距离之和
- expect自动化交互脚本(一)
- grub配置文件丢失的情况下修复
- html引入avalon,avalon中文文档
- bind搭建(二)反向解析
- git/github使用完整教程(2)分支
- 关于python中自己写的模块之前相互调用函数
- Java实现MD5加密解密类
- [转载]for循环的执行顺序
- python 根据字符串语句进行操作再造函数(evec和eval方法)
- https://www.ptc.com/en/industry-insights/state-of-augmented-reality
- 安卓开发---环境搭建(2022最新)
- HBuilder X 无法启动微信开发者工具问题解决方法
- QQ/微信里被禁止访问的网页怎么处理 如何检测域名是否被QQ/微信 屏蔽
- 索引顺序查找(分块查找)
- Fiddler抓包简易教程
- 字体大宝库:20款超细英文字体免费下载
- error while loading shared libraries: libnvinfer.so.8 |【TensorRT 依赖解决】
- 大数据主要就业方向有哪些?
- DCB学习之三(CN)
热门文章
- Qt之SVG转QPixmap并改变颜色
- HTC头显显示错误:头戴式显示器插入错误显卡
- Python学习(一) 进制转换、ASCLL转换
- 装箱问题(01背包模型)
- 安全运维-如何在Kubernetes中使用注释对ingress-nginx及后端应用进行安全加固配置实践...
- python数据可视化—用pyecharts画地图
- 智慧交通:基于PP-Vehicle的交通监控分析系统
- itunes一直显示正在验证iphone恢复_iPhone 如何降级?可能要抓紧啦
- 仿微信、短信、QQ等消息数目右上角红色小圆球气泡显示(基于Android XML布局文件实现)
- AI能否取代设计师这一行业?