关于HDFS的概述及组成与架构详解

一、 hdfs简介
1.1 hdfs的概述
hdfs是基于 流数据 访问模式的 分布式文件系统 ,其设计建立在 “一次写入、多次读取” 的基础上,提供高吞吐量、高容错性的数据访问,能很好地解决海量数据的存储问题。
流数据 是指数千个数据源 持续生成 的数据,可以理解为随时间延续而 无限增长 的动态数据集合。
通俗点说,如果把数据比如成一个水库,那么流进去的水,就是流数据(就像我们听的音乐,属于音乐流;而看到的文字、图片这些较为固定的,一次性下载的,形成不了流)。
在hadoop生态圈中,hdfs属于底层基础,负责存储文件。
1.2 hdfs的优点
hdfs的优点:
高容错性。提供了容错和恢复机制,副本丢失后,自动恢复。
高可靠性。数据自动保存多个副本,通过多副本提高可靠性。
适合大数据处理。可以处理超大文件,比如 tb级甚至pb级 的文件。
适合批处理。移动计算而非移动数据;数据位置暴露给计算框架。
支持流式数据访问。一次性写入,多次读取(一个数据集一旦生成,就会被复制分发到不同的存储节点,各节点可以进行读取/访问);保证数据一致性。
低成本运行。可以运行在低成本的硬件之上。

hdfs 默认保存 3 份副本。
第一个副本:放置在 上传文件 的数据节点(第一个副本如果是在 集群外 提交,则随机挑选一个 cpu 比较空闲 、 磁盘不太满 的节点);
第二个副本:放置在与 第一个副本 不同 的机架的节点上;
第三个副本:放在与 第二个副本 相同 的机架的其他节点上。
1.3 hdfs的缺点
hdfs的缺点:
不适合处理 低延迟 的数据访问。比如用户 要求时间比较短 的低延迟应用(主要处理高数据吞吐量的应用)。
不适合处理 大量的小 文件。会造成寻址时间超过读取时间;会占用namenode大量内存,因为namenode把文件系统的元数据存放在内存中(文件系统的容量由namenode的大小决定),小文件太多会消耗namenode的内存。
不适合 并发写入。一个文件只能有一个写入者,hdfs暂不支持多个用户对同一个文件的写操作。
不适合 任意修改 文件。仅支持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 工作机制及其原理 。


Fitbit公司一口气发布了三款智能手表新产品
苹果技术专利曝光,或将用于解决折叠屏设备的折痕和开裂问题
铠侠将建设新制造厂以支持第六代3D闪存的生产
整流充电柜
盘点4G牌照发放一年中的得与失
关于HDFS的概述及组成与架构详解
NFC用电感器的选择及使用方法要点
人工智能模型服务商“布尔数据”完成数千万元A轮融资
powerpcb:多层板减为两层板的方法
SMT加工焊盘翘起是什么原因导致的?
用多只白色发光二极管制作的微光灯
线束世界|一文搞懂HSD与FAKRA性能测试要求
Varjo推出新一代VR头显VR-3及XR头显XR-3
组网设备有哪些
美国Dish与英特尔合作,把英特尔5G基础设施整合到5G网络中
土壤分析仪器的简单介绍
曙光建设的首座液冷数据中心已运行2500天
北京大学电子设计自动化研究院挂牌成立,行芯科技与北大联手建设联合实验
身份认证带动了怎样的网络安全趋势
锂电池产品性能改良或能加速新能源汽车发展