文章目录

  • 一、NameNode 概述
  • 二、DataNode 概述
  • 三、HDFS的工作机制
  • 三、HDFS 写数据流程
  • 四、HDFS 读数据流程
  • 五、HDFS重要特性
    • 1. master/slave 架构
    • 2. 分块存储
    • 3. 名字空间(NameSpace )
    • 4. Namenode 元数据管理
    • 5. Datanode 数据存储
    • 6. 副本机制
    • 7. 一次写入,多次读出

一、NameNode 概述

  1. NameNode 是 HDFS 的核心。
  2. NameNode 也称为 Master。
  3. NameNode 仅存储 HDFS 的元数据:文件系统中所有文件的目录树,并跟踪整个集群中的文件。
  4. NameNode 不存储实际数据或数据集。数据本身实际存储在 DataNodes 中。
  5. NameNode 知道 HDFS 中任何给定文件的块列表及其位置。使用此信息NameNode 知道如何从块中构建文件。
  6. NameNode 并不持久化存储每个文件中各个块所在的 DataNode 的位置信息,这些信息会在系统启动时从数据节点重建。
  7. NameNode 对于 HDFS 至关重要,当 NameNode 关闭时,HDFS / Hadoop 集群无法访问。
  8. NameNode 是 Hadoop 集群中的单点故障。
  9. NameNode 所在机器通常会配置有大量内存(RAM)。

二、DataNode 概述

  1. DataNode 负责将实际数据存储在 HDFS 中。
  2. DataNode 也称为 Slave。
  3. NameNode 和 DataNode 会保持不断通信。
  4. DataNode 启动时,它将自己发布到 NameNode 并汇报自己负责持有的块列表。
  5. 当某个 DataNode 关闭时,它不会影响数据或群集的可用性。NameNode 将安排由其他 DataNode 管理的块进行副本复制。
  6. DataNode 所在机器通常配置有大量的硬盘空间。因为实际数据存储在DataNode 中。
  7. DataNode 会定期(dfs.heartbeat.interval 配置项配置,默认是 3 秒)向NameNode 发送心跳,如果 NameNode 长时间没有接受到 DataNode 发送的心跳, NameNode 就会认为该 DataNode 失效。
  8. block 汇报时间间隔取参数 dfs.blockreport.intervalMsec,参数未配置的话默认为 6 小时.

三、HDFS的工作机制

NameNode 负责管理整个文件系统元数据;
DataNode 负责管理具体文件数据块存储;Secondary NameNode 协助 NameNode 进行元数据的备份。
HDFS 的内部工作机制对客户端保持透明,客户端请求访问 HDFS 都是通过向NameNode 申请来进行。

三、HDFS 写数据流程

详细步骤解析:

  1. client 发起文件上传请求,通过 RPC 与 NameNode 建立通讯,NameNode检查目标文件是否已存在,父目录是否存在,返回是否可以上传;

  2. client 请求第一个 block 该传输到哪些 DataNode 服务器上;

  3. NameNode 根据配置文件中指定的备份数量及副本放置策略进行文件分配,返回可用的 DataNode 的地址,如:A,B,C;

    注:默认存储策略由 BlockPlacementPolicyDefault 类支持。也就是日常生活中提到最经典的 3 副本策略 。

    • 1st replica 如果写请求方所在机器是其中一个 datanode,则直接存放在本地,否则随机在集群中选择一个 datanode.
    • 2nd replica 第二个副本存放于不同第一个副本的所在的机架.
    • 3rd replica 第三个副本存放于第二个副本所在的机架,但是属于不同的节点
  4. client 请求 3 台 DataNode 中的一台 A 上传数据(本质上是一个 RPC 调用,建立 pipeline),A 收到请求会继续调用 B,然后 B 调用 C,将整个pipeline 建立完成,后逐级返回 client;

  5. client 开始往 A 上传第一个 block(先从磁盘读取数据放到一个本地内存缓存),以 packet 为单位(默认 64K),A 收到一个 packet 就会传给 B,B 传给 C;A 每传一个 packet 会放入一个应答队列等待应答。

  6. 数据被分割成一个个 packet 数据包在 pipeline 上依次传输,在pipeline 反方向上,逐个发送 ack(命令正确应答),最终由 pipeline中第一个 DataNode 节点 A 将 pipeline ack 发送给 client;

  7. 当一个 block 传输完成之后,client 再次请求 NameNode 上传第二个block 到服务器。

四、HDFS 读数据流程

详细步骤解析:

  1. Client 向 NameNode 发起 RPC 请求,来确定请求文件 block 所在的位置;
  2. NameNode会视情况返回文件的部分或者全部block列表,对于每个block,NameNode 都会返回含有该 block 副本的 DataNode 地址;
  3. 这些返回的 DN 地址,会按照集群拓扑结构得出 DataNode 与客户端的距离,然后进行排序,排序两个规则:网络拓扑结构中距离 Client 近的排靠前;心跳机制中超时汇报的 DN 状态为 STALE,这样的排靠后;
  4. Client 选取排序靠前的 DataNode 来读取 block,如果客户端本身就是DataNode,那么将从本地直接获取数据;
  5. 底层上本质是建立 Socket Stream(FSDataInputStream),重复的调用父类 DataInputStream 的 read 方法,直到这个块上的数据读取完毕;
  6. 当读完列表的 block 后,若文件读取还没有结束,客户端会继续向NameNode 获取下一批的 block 列表;
  7. 读取完一个 block 都会进行 checksum 验证,如果读取 DataNode 时出现错误,客户端会通知 NameNode,然后再从下一个拥有该 block 副本的DataNode 继续读。
  8. read 方法是并行的读取 block 信息,不是一块一块的读取;NameNode 只是返回Client请求包含块的DataNode地址,并不是返回请求块的数据;
  9. 最终读取来所有的 block 会合并成一个完整的最终文件。

五、HDFS重要特性

首先,它是一个文件系统,用于存储文件,通过统一的命名空间目录树来定位文件;
其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。

  1. 传统的存储模式:把文件放在指定的位置
    缺点:随着存储量增大 存储遇到了瓶颈

    本能反应:纵向扩展 缺啥补啥 磁盘不够加磁盘
    ----->有上限的限制 不能无限加下去

解决海量数据存储:横向扩展 分布式存储 多态机器共同存储

  1. 当数据分布式存储的时候,查找的时候 如何快速定位?
    给这个系统增加记录文件的位置 的元数据管理

  2. 数据文件太大的时候,不管是上传还是下载文件 耗时都太严重?

  3. 机器故障时不可避免,如何解决故障后的数据丢失呢?
    备份 默认3份
    备份数越多 数据越安全 冗余太高

1. master/slave 架构

HDFS 采用 master/slave 架构。一般一个 HDFS 集群是有一个 Namenode 和一定数目的 Datanode 组成。Namenode 是 HDFS 集群主节点,Datanode 是 HDFS 集群从节点,两种角色各司其职,共同协调完成分布式的文件存储服务。

2. 分块存储

HDFS 中的文件在物理上是分块存储(block)的,块的大小可以通过配置参数来规定,默认大小在 hadoop2.x 版本中是 128M。

3. 名字空间(NameSpace )

HDFS 支持传统的层次型文件组织结构。用户或者应用程序可以创建目录,然后将文件保存在这些目录里。文件系统名字空间的层次结构和大多数现有的文件系统类似:用户可以创建、删除、移动或重命名文件。
Namenode 负责维护文件系统的名字空间,任何对文件系统名字空间或属性的修改都将被 Namenode 记录下来。
HDFS 会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data。

4. Namenode 元数据管理

我们把目录结构及文件分块位置信息叫做元数据。Namenode 负责维护整个hdfs 文件系统的目录树结构,以及每一个文件所对应的 block 块信息(block 的id,及所在的 datanode 服务器)。

5. Datanode 数据存储

文件的各个 block 的具体存储管理由 datanode 节点承担。每一个 block 都可以在多个 datanode 上。Datanode 需要定时向 Namenode 汇报自己持有的 block信息。
存储多个副本(副本数量也可以通过参数设置 dfs.replication,默认是 3)。

6. 副本机制

为了容错,文件的所有 block 都会有副本。每个文件的 block 大小和副本系数都是可配置的。应用程序可以指定某个文件的副本数目。副本系数可以在文件创建的时候指定,也可以在之后改变。

7. 一次写入,多次读出

HDFS 是设计成适应一次写入,多次读出的场景,且不支持文件的修改。
正因为如此,HDFS 适合用来做大数据分析的底层存储服务,并不适合用来做网盘等应用,因为,修改不方便,延迟大,网络开销大,成本太高

【hadoop】HDFS原理 和 重要特性相关推荐

  1. Hadoop HDFS原理笔记

    1:Hadoop家族 2:Hadoop的两大核心 3:HDFS介绍 4:HDFS结构 5:HDFS架构图 6:HDFS的数据存储单元(Block) 7:HDFS设计思想 8:NameNode(NN)介 ...

  2. HDFS 原理、架构与特性介绍--转载

    原文地址:http://www.uml.org.cn/sjjm/201309044.asp 本文主要讲述 HDFS原理-架构.副本机制.HDFS负载均衡.机架感知.健壮性.文件删除恢复机制 1:当前H ...

  3. Apache Durid (HDFS原理 特性 读写测试 集群部署 架构设计)

    Apache Durid (HDFS 集群部署) Apache Durid (HDFS 集群部署) 1. 分布式文件HDFS 1.1 HDFS简介 1.1.1 HDFS发展历史 1.1.2 HDFS设 ...

  4. 大数据技术原理与应用 第三版 林子雨 期末复习(二) Hadoop HDFS HBase

    大数据技术原理与应用 第三版 林子雨 期末复习(二) Hadoop HDFS HBase Hadoop生态系统 HDFS HDFS结构 块 Name Node与Second Name Node与Dat ...

  5. Hadoop分布式文件系统——HDFS原理简介

    阅读前必看 这篇文章与其说是一篇文章,不如说是一篇在家学习的笔记,其中大部分内容来自于github上一个大神的开源笔记,在此附上链接,表达版权所属以及敬意:github源地址 一.介绍 HDFS(Ha ...

  6. Hadoop之深入HDFS原理<一>

    1.HDFS原理 1.三大组件(NameNode.DataNode.SecondaryNameNode) 2.NameNode a.作用:存储元数据(文件名.创建时间.大小.权限.文件与block块映 ...

  7. Python +大数据-hadoop生态-hadoop(三)--Hadoop HDFS

    Python +大数据-hadoop生态-hadoop(三)–Hadoop HDFS 今日课程学习目标 理解分布式文件存储的概念与实现 掌握HDFS分块存储.副本机制等特性 学会shell操作HDFS ...

  8. 漫画讲解HDFS原理

    HDFS简介 Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时,它和其他的分布式 ...

  9. HiveQL学习笔记(一):Hive安装及Hadoop,Hive原理简介

    本系列是本人对Hive的学习进行一个整理,主要包括以下内容: 1.HiveQL学习笔记(一):Hive安装及Hadoop,Hive原理简介 2.HiveQL学习笔记(二):Hive基础语法与常用函数 ...

  10. hdfs文件系统和linux文件系统,分布式文件系统HADOOP HDFS与传统文件系统LINUX FS的比较与分析...

    分布式文件系统HADOOP HDFS与传统文件系统LINUX FS的比较与分析 第3 0卷第 4期 2 1 8月 0 0年 苏 州 大 学 学 报(工 科 版) Vo_ O No 4 13 . Au ...

最新文章

  1. CSS魔法堂:更丰富的前端动效by CSS Animation
  2. C语言ODBC数据库操作
  3. RocketMQ:NameServer路由管理源码分析
  4. Django 3.2.5博客开发教程:HelloWorld欢迎页面
  5. 在Spring Boot中配置web app
  6. 我想自学Linux,需要从哪些方面学起
  7. java getrequest_Java Target.getRequest方法代码示例
  8. [解决]WebLogic跨域访问安全问题
  9. 补充总结:现代控制理论
  10. 《Word 排版艺术》一书的人到此交流
  11. 羲云社区团购微信小程序多门店版,首页开发
  12. 如何将绿色中文版的PDF编辑器下载下来
  13. C# Gmap 根据提供的经度和纬度、以及半径,取得此半径内的最大最小经纬度
  14. sql面试题,查询出每班每科最高分的学生
  15. 高德地图搜索附近地址所遇到的问题
  16. python批处理原始核磁数据用于DPABI
  17. 小孢子的神奇之旅-如何阅读MindSpore报错信息(1)
  18. stb_truetype解析ttf字体获取顶点信息
  19. 美赛latex模板单独修改目录的行间距
  20. 编程是将c语言编写的源程序,C语言程序设计基础教程习题答案20120319.doc

热门文章

  1. 记录一个Markdown编写的接口文档模版
  2. 数据字典怎么写_做数据分析,我只会同环比,谁能教我怎么写结论?
  3. 网易云音乐缓存文件解密
  4. U8服务器怎么修改会计制度,用友GRP-U8乡镇财政精细化管理新会计制度操作手册..doc...
  5. 【学习记录贴】#3——校园二维和三维电子地图制作
  6. 简单的c++人脸识别源代码
  7. python将字典写入txt文件_将一个字典写入txt文件并将其读回来?
  8. C语言实现约瑟夫环代码
  9. android 下载服务器的txt文档
  10. 系统架构设计师教程-学习-记录(29)系统开发基础知识-软件开发方法(5)软件系统工具