阅读前必看

这篇文章与其说是一篇文章,不如说是一篇在家学习的笔记,其中大部分内容来自于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 架构稳定性

  1. 心跳机制

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

  2. 数据的完整性

    由于设备故障等原因,存储在DataNode上的数据也会发生损坏。为了避免读取到已经损坏的数据而导致的错误,HDFS提供了数据完整性校验机制来保证数据的完整性,具体操作如下:
    当客户端创建HDFS文件时,它会计算文件的每个块的校验和,并将校验和存储在同一HDFS命名空间的单独隐藏文件中。当客户端检索文件内容时,它会验证从每个DataNode接收的数据是否与存储在关联校验和文件中的校验和匹配。如果匹配失败,则证明数据已经损坏,此时客户端会选择从其它DataNode获取该块的其它可用副本。

  3. 元数据的磁盘故障

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

  4. 支持快照

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

三、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漫画图解

  1. HDFS写数据原理

  2. HDFS写数据原理

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

  • 读写故障处理
  • DataNode故障处理
  • 副本布局策略

参考资料

  1. Apache Hadoop 2.9.2 > HDFS Architecture
  2. Tom White . hadoop 权威指南 [M] . 清华大学出版社 . 2017.
  3. 翻译经典 HDFS 原理讲解漫画
  4. 再次附上:本文参考

Hadoop分布式文件系统——HDFS原理简介相关推荐

  1. Hadoop分布式文件系统HDFS的工作原理详述

    Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.它能提供高吞吐量的数据访问,非常适合大规模数据集上的应 ...

  2. JAVA大数据(二) Hadoop 分布式文件系统HDFS 架构,MapReduce介绍,Yarn资源调度

    文章目录 1.分布式文件系统HDFS 1.HDFS的来源 2.HDFS的架构图之基础架构 2.1 master/slave 架构 2.2 名字空间(NameSpace) 2.3 文件操作 2.4副本机 ...

  3. 大数据技术之Hadoop分布式文件系统HDFS系统知识整理(从入门到熟练操作)

    系列博客 1.大数据技术之Hadoop完全分布式集群搭建+Centos7配置连通外网和主机 2.大数据技术之Hadoop编译源码 3.大数据技术之Hadoop分布式文件系统HDFS系统知识整理(从入门 ...

  4. Hadoop分布式文件系统--HDFS结构分析

    前言 在Hadoop内部,详细实现了很多类的文件系统,当然最最被我们用到的就是他的分布式文件系统HDFS了. 可是本篇文章不会讲HDFS的主从架构等东西,由于这些东西网上和资料书中都讲得非常多了. 所 ...

  5. Hadoop分布式文件系统 (HDFS)

    Hadoop分布式文件系统 简介 ​ HDFS(Hadoop distribute file system) 是Hadoop核心组成,是分布式存储服务 ​ 分布式文件系统能够横跨多态计算机.在大数据时 ...

  6. Hadoop 分布式文件系统 - HDFS

    当数据集超过一个单独的物理计算机的存储能力时,便有必要将它分不到多个独立的计算机上.管理着跨计算机网络存储的文件系统称为分布式文件系统.Hadoop 的分布式文件系统称为 HDFS,它 是为 以流式数 ...

  7. 分布式文件系统—HDFS—入门简介

    原文作者:Zh_Y_G 原文地址:HDFS入门简介 目录 HDFS是什么? 设计目标: 安装配置 HDFS读写流程图解 CheckPoint HDFS是什么? 易于扩展的分布式文件系统 运行在大量普通 ...

  8. Hadoop分布式文件系统HDFS

    HDFS的探究: HDFS HDFS是 Hadoop Distribute File System的缩写,是谷歌GFS分布式文件系统的开源实现,Apache Hadoop的一个子项目,HDFS基于流数 ...

  9. Hadoop分布式文件系统——HDFS

    一.介绍 HDFS (Hadoop Distributed File System)是 Hadoop 下的分布式文件系统,具有高容错.高吞吐量等特性,可以部署在低成本的硬件上. 二.HDFS 设计原理 ...

最新文章

  1. 【codevs2011】【LNOI2013】最小距离之和
  2. expect自动化交互脚本(一)
  3. grub配置文件丢失的情况下修复
  4. html引入avalon,avalon中文文档
  5. bind搭建(二)反向解析
  6. git/github使用完整教程(2)分支
  7. 关于python中自己写的模块之前相互调用函数
  8. Java实现MD5加密解密类
  9. [转载]for循环的执行顺序
  10. python 根据字符串语句进行操作再造函数(evec和eval方法)
  11. https://www.ptc.com/en/industry-insights/state-of-augmented-reality
  12. 安卓开发---环境搭建(2022最新)
  13. HBuilder X 无法启动微信开发者工具问题解决方法
  14. QQ/微信里被禁止访问的网页怎么处理 如何检测域名是否被QQ/微信 屏蔽
  15. 索引顺序查找(分块查找)
  16. Fiddler抓包简易教程
  17. 字体大宝库:20款超细英文字体免费下载
  18. error while loading shared libraries: libnvinfer.so.8 |【TensorRT 依赖解决】
  19. 大数据主要就业方向有哪些?
  20. DCB学习之三(CN)

热门文章

  1. Qt之SVG转QPixmap并改变颜色
  2. HTC头显显示错误:头戴式显示器插入错误显卡
  3. Python学习(一) 进制转换、ASCLL转换
  4. 装箱问题(01背包模型)
  5. 安全运维-如何在Kubernetes中使用注释对ingress-nginx及后端应用进行安全加固配置实践...
  6. python数据可视化—用pyecharts画地图
  7. 智慧交通:基于PP-Vehicle的交通监控分析系统
  8. itunes一直显示正在验证iphone恢复_iPhone 如何降级?可能要抓紧啦
  9. 仿微信、短信、QQ等消息数目右上角红色小圆球气泡显示(基于Android XML布局文件实现)
  10. AI能否取代设计师这一行业?