HDFS知识总结

HDFS的核心组件

1.NameNode

(整个集群的核心,NameNode本地磁盘中管理着文件系统的镜像文件及编辑日志,在内存中管理着文件系统元数据信息(主要是BlockMap与NameSpace)

namenode之中的核心:

核心1: 文件系统镜像文件(FsImage)
磁盘中存放着的文件元数据信息,可以看做持久化后的HDFS目录树。{元数据信息[FileName、副本数、副本所在位置…] }

核心2:编辑日志文件(EditsLog)【元数据的更改日志】
减少NameNode内存开销:对于FsImage的写操作不需要将整个FsImage加载到内存,而是将操作记录在编辑日志中
通过SecondaryNameNode定期更新fsImage进行同步

namenode之中的内存文件:
核心3:NameSpace【相当于内存中的FsImage】
主要组成
1. imageHead(快照版本、集群id等)
2.每个文件或目录的元数据信息(文件名称、权限信息、所属组、所属用户等),如果是文件还会存在block对象信息

核心4:数据块映射信息(BlocksMap):【BlocksMap其实是一个Map<block,blockInfo>】
从NameSpace的信息中可以很明显的看出,并没有记录每一个block所对应的datanodes信息,而block对应的datanode信息是在datanode启动时将本地保存的block信息汇报给nameNode,namenode在接收到datanode的汇报后,将block信息以及其所在的datanode信息等保存在内存中的BlockMap中。
Datanode向namenode汇报信息的过程叫做blockReport,而namenode将block -> datanodes的对应信息保存在一个叫BlocksMap的数据结构中。
这部分内容没有永久性固化,而是在内存中存有。(这部分内容需要频繁的读取)
这个BlocksMap是NameNode功能的核心,同时这也是hdfs不擅长处理大量小文件的原因
(因为向HDFS上传大量小文件会生成大量的blockMap从而占用大量的内存空间,导致NameNode内存溢出)

SecondaryNameNode: 辅助节点。

用于同步NameNode中的元数据信息,辅助NameNode对fsimage与editsLog进行合并(冷备份)

合并过程:

未完待续

DataNode

存放具体数据块的节点,主要负责数据的读写,定期向NameNode发送心跳

当DataNode注册到NameNode时,会将自身所有的数据块信息注册到NameNode的内存中。生成对应的BlockMap

HDFS的优缺点

优点
1.副本机制,所以数据更安全
2.因为是分布式存储,所以适合批处理
3.高可用行
4.元数据持久化
5.禁掉了一些功能,使得集群更加完美
------ 文件一旦上传成功,就不能修改block块的大小

缺点
1.无法毫秒级的读写数据

  1. 读写复杂需要找nn请求
  2. 形成管道,文件切割block block packet

2.不适合存储大量的小文件,容易造成元数据过多,NN内存溢出
解决办法

  • 将小文件合并成一个大文件
  • 联邦机制

3.不能并发写入,但是可以并发的读

HDFS的启动操作

当NameNode启动后,会将fsimage与editesLog文件加载到内存中进行合并,在内存中生成NameSpace[fsimage] 并将合并后的fsimage保存到本地磁盘然后在本地磁盘生成新的编辑日志。此时NameNode内存中的Fsimage及BlocksMap的key【block对象】都已经加载完毕,但是BlocksMap的value还并没有没加载。当dataNode启动后向NameNode汇报完毕【blockreport】,NameNode将汇报信息保存在blocksMap中后才算加载完毕。在NameNode完全启动前,整个文件系统处于安全模式,不允许更新操作。

HDFS的脑裂问题

查看了解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值