HDFS的学习笔记

HDFS的学习笔记

HDFS是Google公司的 GFS 论文思想的实现,它有NameNode(名称节点)、DataNode(数据节点)、SecondaryNameNode(第二名称节点)组成。

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

1. HDFS简介

1.1 HDFS 概述

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

流数据 是指数千个数据源持续生成的数据,可以理解为随时间延续而无限增长的动态数据集合。

在Hadoop生态圈中,HDFS属于底层基础,负责存储文件。

在这里插入图片描述

2. 优缺点

优点:

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

HDFS 默认保存3分副本

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

第二个副本:放置在与第一个副本 不同 的机架的节点上;

第三个副本:放在与 第二个副本 相同的机架的其他节点上。

缺点:

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

2. HDFS 的组成与架构

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

在这里插入图片描述

2.1 NameNode节点

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

节点职责:

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

其职责有以下三个方面:

① 管理维护HDFS的命名空间

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

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

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

② 管理DataNode上的数据块

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

③ 接收客户端的请求

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

2.2 DataNode节点

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

节点职责:

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

其职责有以下三个方面:

① 保存数据块

一个数据块会在多个DataNode进行冗余备份(在某一个DataNode最多只有一个备份)。

② 负责客户端对数据块的IO请求

在客户端执行写操作时,DataNode之间会相互通信,保证写操作的一致性。

③ 定期和 NameNode进行心跳通信,接收NameNode的指令

如果NomeNode结点10分钟没有收到DataNode的心跳信息,就会将骑上的数据块复制到其他DataNode节点。

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

2.3 SecondaryNameNode节点

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

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

节点职责:

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

在这里插入图片描述

其职责有以下两个方面:

① 防止edits过大

定期合并fsimage 和edits文件,使edits大小保持在限制范围内。这样做减少了重新启动NameNode时合并 fsimage 和 edits 耗费的时间,从而减少了NameNode 启动的时间。

② 做冷备份

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白居不易.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值