HDFS是Google公司的 GFS论文 思想的实现,它由NameNode(名称节点)、DataNode(数据节点)、SecondaryNameNode(第二名称节点)组成。其中, NameNode 相当于论文中的 GFS Master , DataNode 相当于论文中的 GFS Chunk Server 。

GFS   是一个可扩展的分布式文件系统设计思想,用于设计针对大型的、分布式的、对大量数据进行访问的文件系统。

  • 一、 HDFS简介
    • 1.1 HDFS的概述
    • 1.2 HDFS的优点
    • 1.3 HDFS的缺点
  • 二、 HDFS的组成与架构
    • 2.1 NameNode节点
      • 2.1.1 节点职责
    • 2.2 DataNode节点
      • 2.2.1 节点职责
    • 2.3 SecondaryNameNode节点
      • 2.3.1 节点职责

一、 HDFS简介

1.1 HDFS的概述

HDFS是基于 流数据 访问模式的 分布式文件系统 ,其设计建立在 “一次写入、多次读取” 的基础上,提供高吞吐量、高容错性的数据访问,能很好地解决海量数据的存储问题。

流数据   是指数千个数据源 持续生成 的数据,可以理解为随时间延续而 无限增长 的动态数据集合。
通俗点说,如果把数据比如成一个水库,那么流进去的水,就是流数据(就像我们听的音乐,属于音乐流;而看到的文字、图片这些较为固定的,一次性下载的,形成不了流)。

在Hadoop生态圈中,HDFS属于底层基础,负责存储文件。
(图片来源于网络)

1.2 HDFS的优点

HDFS的优点:

  1. 高容错性。提供了容错和恢复机制,副本丢失后,自动恢复。
  2. 高可靠性。数据自动保存多个副本,通过多副本提高可靠性。
  3. 适合大数据处理。可以处理超大文件,比如 TB级甚至PB级 的文件。
  4. 适合批处理。移动计算而非移动数据;数据位置暴露给计算框架。
  5. 支持流式数据访问。一次性写入,多次读取(一个数据集一旦生成,就会被复制分发到不同的存储节点,各节点可以进行读取/访问);保证数据一致性。
  6. 低成本运行。可以运行在低成本的硬件之上。

HDFS 默认保存 3 份副本。

第一个副本:放置在 上传文件 的数据节点(第一个副本如果是在 集群外 提交,则随机挑选一个 CPU 比较空闲磁盘不太满 的节点);
第二个副本:放置在与 第一个副本 不同 的机架的节点上;
第三个副本:放在与 第二个副本 相同 的机架的其他节点上。

1.3 HDFS的缺点

HDFS的缺点:

  1. 不适合处理 低延迟 的数据访问。比如用户 要求时间比较短 的低延迟应用(主要处理高数据吞吐量的应用)。
  2. 不适合处理 大量的小 文件。会造成寻址时间超过读取时间;会占用NameNode大量内存,因为NameNode把文件系统的元数据存放在内存中(文件系统的容量由NameNode的大小决定),小文件太多会消耗NameNode的内存。
  3. 不适合 并发写入。一个文件只能有一个写入者,HDFS暂不支持多个用户对同一个文件的写操作。
  4. 不适合 任意修改 文件。仅支持append(附加),不支持在文件的任意位置进行修改。

二、 HDFS的组成与架构

HDFS的组成架构图及各部分功能如下所示:


(图片来源于网络)

2.1 NameNode节点

当用户访问数据文件时,为了保证能够读取到每一个数据块, HDFS有一个专门 负责保存文件属性信息的节点,这个节点就是 NameNode 节点(即 名称节点 )。

2.1.1 节点职责

NameNode节点 是HDFS的管理者,负责保存和管理HDFS的元数据。

其职责有以下三个方面:
① 管理维护HDFS的命名空间
NameNode管理HDFS系统的命名空间,维护文件系统树以及文件系统树中所有文件的元数据。管理这些信息的的文件分别是 edits(操作日志文件) 和 fsimage(命名空间镜像文件) 。

editlog(操作日志):在NameNode启动的情况下,对HDFS进行的各种操作进行记录。(HDFS客户端执行的所有操作都会被记录到editlog文件中,这些文件由edits文件保存)

fsimage:包含HDFS中的元信息(比如修改时间、访问时间、数据块信息等)。

② 管理DataNode上的数据块
负责管理数据块上所有的元数据信息(管理DataNode上数据块的均衡,维持副本数量)。

③ 接收客户端的请求
接收客户端文件上传、下载、创建目录等的请求。

2.2 DataNode节点

HDFS首先把大文件切分成若干个小的数据块,再把这些数据块写入不同的节点,这个 负责保存文件数据的节点就是 DataNode 节点(即 数据节点 )。

2.2.1 节点职责

DataNode节点 负责存储数据,把Block(数据块)以Linux文件的形式保存在磁盘上,并根据Block标识和字节范围来读写块数据。

其职责有以下三个方面:
① 保存数据块
一个数据块会在多个DataNode进行冗余备份(在某一个DataNode最多只有一个备份)。

② 负责客户端对数据块的IO请求
在客户端执行写操作时,DataNode之间会相互通信,保证写操作的一致性。

③ 定期和NameNode进行心跳通信,接受NameNode的指令
如果NameNode节点10分钟没有收到DataNode的心跳信息,就会将其上的数据块复制到其他DataNode节点。

因此,NameNode节点上并不会永久保存DataNode节点上的数据块信息,而是通过与DataNode节点心跳联系的方式,来更新节点上的映射表,以此减轻负担。

问题:HDFS数据块默认大小为128M(Hadoop2.2之前为64M),将HDFS的数据块设置得很大的目的是什么?(传统数据块只有512个字节)

答:为了减少寻址开销,让HDFS的文件传输时间由传输速率决定(如果块设置得足够大,从磁盘 传输数据的时间 会明显大于 定位这个块开始位置 所需的时间)。

2.3 SecondaryNameNode节点

HDFS有一个定期创建命名空间的检查点(CheckPoint)操作的节点,也就是SecondaryNameNode节点(即 第二名称节点)。

出于可靠性考虑,SecondaryNameNode节点与NameNode节点通常运行在不同的机器上,且SecondaryNameNode节点与NameNode节点的内存要一样大

(如果想了解 SecondaryNameNode 的工作流程,可以参考这篇文章:浅析 SecondaryNameNode 的工作流程 )

问题:一般情况下,一个集群中的SecondaryNameNode节点也是只有一个的原因是什么?

答:因为如果多的话,会增加NameNode的压力,使其忙于元数据的传输/接收、日志的传输/切换,从而导致性能下降;同时,NameNode节点也不支持做并发检查点。

2.3.1 节点职责

SecondaryNameNode节点 定期把NameNode的 fsimage 和 edits 下载到本地,再将它们加载到内存并进行合并,最后把合并后新的 fsimage 返回NameNode (这个过程称为检查点)。

经典问题:NameNode与SecondaryNameNode有没有关系?

SecondaryNameNode节点的工作流程可以参考这篇文章:

其职责有以下两个方面:
① 防止edits过大
定期合并 fsimage 和 edits 文件,使 edits 大小保持在限制范围内。这样做减少了重新启动NameNode时合并 fsimage 和 edits 耗费的时间,从而减少了NameNode启动的时间。

② 做冷备份
对一定范围内数据做快照性备份,在NameNode失效时能恢复部分 fsimage 。

好了,HDFS 及其组成框架介绍完成。

如果想进一步了解 HDFS 的工作机制,可以参考这篇文章:图文详解 HDFS 工作机制及其原理 。


如果文章对您有帮助,请点个,留给评论支持一下

一文了解 HDFS 及其组成框架相关推荐

  1. VS2010-MFC(文档、视图和框架:分割窗口)

    转自:http://www.jizhuomi.com/software/226.html 上一节讲了文档.视图和框架结构中各对象之间的关系,本节主要讲讲在MFC中如何分割窗口. 分割窗口概述      ...

  2. 一文带你实现RPC框架

    原文地址:一文带你实现RPC框架 想要获取更多文章可以访问我的博客 - 代码无止境. 现在大部分的互联网公司都会采用微服务架构,但具体实现微服务架构的方式有所不同,主流上分为两种,一种是基于Http协 ...

  3. VS2019/MFC编程入门——文档、视图和框架:分割窗口

    上一节中讲了文档.视图和框架结构中各对象之间的关系,本节主要讲讲在MFC中如何分割窗口.在内容开始前为大家介绍一款MFC界面开发控件: Xtreme Toolkit Pro | 免费下载:是屡获殊荣的 ...

  4. vs2010c语言窗口程序,VS2010/MFC编程入门之四十一(文档、视图和框架:分割窗口)...

    上一节中鸡啄米讲了文档.视图和框架结构中各对象之间的关系,本节主要讲讲在MFC中如何分割窗口. 分割窗口概述 分割窗口,顾名思义,就是将一个窗口分割成多个窗格,在每个窗格中都包含有视图,或者是同一类型 ...

  5. 定制MFC多文档窗口的主框架背景

    问题描述: 如上图所示,这是用MFC创建的多文档程序,可以看到主框架的背景区是灰色的,如果我要在这块区域贴一张图片,应该怎么办呢?最容易想到的是在CMainFrame的OnPaint中对背景进行更改, ...

  6. ICLR 2023 | StrucTexTv2:端到端文档图像理解预训练框架

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 点击进入->[计算机视觉]微信技术交流群 转载自:CSIG文档图像分析与识别专委会 本文简要介绍ICL ...

  7. 一文读懂深度学习框架下的目标检测(附数据集)

    来源:大数据文摘 编译:及子龙,张礼俊,余志文,钱天培 本文长度为3716字,建议阅读5分钟 本文为你全方位解读机器视觉领域中的目标检测. 从简单的图像分类到3D位置估算,在机器视觉领域里从来都不乏有 ...

  8. 对接接口文档_接口自动化测试框架设计思路

    接口自动化测试--框架设计思路 1 前言 之前文章跟大家分享了一下自己在接口自动化测试中进行测试准备的一些相关知识点,接下来本篇文章详细分享一下接口自动化框架设计的思路总结,希望能对初次探索接口自动化 ...

  9. 鸡啄米vc++2010系列40(文档、视图和框架:分割窗口)

    分割窗口概述 分割窗口,顾名思义,就是将一个窗口分割成多个窗格,在每个窗格中都包含有视图,或者是同一类型的视图,或者是不同类型的视图. MFC分割窗口的方式有两种,动态分割和静态分割. 动态分割窗口通 ...

最新文章

  1. layui表格获取不到多层数据的解决方案
  2. java导出highcharts_java实现highcharts导出图片至excel
  3. 图解http协议头实例分析
  4. 我的算法学习(一)----数组的全排列
  5. 在linux的weblogic上增加启动参数
  6. CentOS 7磁盘分区及文件系统管理
  7. 使用shiro框架,注销问题的解决
  8. 电商促销海报BANNER设计要点,万能套用PSD分层模板,先收好!
  9. 【学习OpenCV4】图像像素数据类型的转换与归一
  10. vi显示行数命令和跳转到指定行
  11. win11系统安装vmware虚拟机win10 汇总
  12. java面试英语自我介绍_java英语面试自我介绍
  13. 倾听社区的声音,但别被他们牵着鼻子走
  14. wpf实现类似word文档的标尺功能
  15. ai技术对计算机的影响,人工智能技术的发展会对我们产生什么影响
  16. Qt开源库-顶级浮动窗口系统-Advanced-Docking-System【01】
  17. linux 下中文字体的支持
  18. OSDI 2021 VEGITO 论文阅读
  19. 书架bookshelf
  20. DIY基于RTD2662的LVDS屏幕驱动

热门文章

  1. 洛谷三月月赛——P5238 整数校验器
  2. 为什么跨浏览器测试很重要?7款跨浏览器测试工具请查收
  3. WPT2F42-6/TR PNP双极功率晶体管WILLSEM
  4. Unity SKFramework框架(二十五)、RSA算法加密、签名工具 RSA Crypto
  5. 用$refs去无法调用子组件的函数
  6. 白话机器学习算法理论+实战番外篇之LightGBM
  7. xmind可以画流程图吗_xmind8可以画流程图吗
  8. 【Java基础系列教程】第十五章 Java 正则表达式详解
  9. HDU 3068 2017 Multi-University Training Contest - Team 1 1006 Fuction: 循环节+最后一步
  10. python入门知识点-1