hdfs重点知识总结

本文总结了HDFS的产生背景、定义、优缺点、组成架构、数据读写流程,以及Namenode和Secondary Namenode的角色。HDFS具有高容错性和大数据处理能力,但不适用于低延时访问和大量小文件存储。详细阐述了数据写入时客户端如何与DataNode交互,以及读取时DataNode如何传输数据给客户端。此外,解释了Secondary Namenode在减轻Namenode负担和确保元数据安全方面的作用。
摘要由CSDN通过智能技术生成

hdfs的产生背景

随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统来管理磁盘,但是不方便管理和维护,因此迫切需要一种系统来管理多台电脑上的文件,这种系统就是分布式文件管理系统,hdfs只是分布式文件管理系统中的一种。

hdfs定义

hdfs(hadoop distributed file system),它是一个文件系统,用于存储文件,通过目录来定位文件,它又是分布式的,由很多服务器联合起来实现其功能。
hdfs的使用场景:适合一次写入,多次读出的场景,且不支持文件的修改,主要用来拼接。

hdfs优缺点

优点:
1)高容错性:数据自动在多个datanode中保存多个副本,增加了容错,另外可以把副本放到廉价机器上面,节省开销,增加容错。
2)适合处理大数据(TB PB EB ZB)它们之间的进位为1024
缺点:
1)不适合低延时数据访问,由于数据量过大,无法做到向mysql一样做到秒级,甚至毫秒级反应
2)无法高效对大量小文件进行存储,会占用大量namenode内存来存储文件,随着namenode增加,会增加寻址时间。

hdfs组成架构

在这里插入图片描述

hdfs写数据流程

1)当数据来时,传给hdfs client,client 创建 distributed file system。
2)client向namenode请求上传文件。
3)namenode响应可以上传文件,NameNode返回3个,分别为dn1、dn2、dn3等等(这取决于副本数)。
4)请求上传第一个block(hadoop1.x/2.x数据块大小为64M,在hadoop3.x数据块默认大小128M,大于这个,会由hdfs客户端切割成多个block)。
5)namenode响应,告诉client往哪些节点(dn)中写入数据
6)hdfs客户端建立FSDataOutputStream。
7)FSDataOutputStream请求建立Block传输通道,客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成,dn1、dn2、dn3逐级应答客户端。
8)客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答。
9)应答成功,传输数据,packet大小默认为64KB(如果有一个datanode得到完整数据,就会传输成功,而如果达不到default replication,那么就由namenode启动副本备份策略)
10)当一个block传输完成之后,重复回到4执行,请求上传第二个block。

hdfs读数据流程

1)client通过Distributed FileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。
2)挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。
3)DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。
4)客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。

namenode和secondary namenode

namenode元数据存储在哪里? 内存?namenode磁盘? or ?
1)下面我们来看一下,如果存在内存中,那么如果计算机断电,所有的数据都会丢失,致使集群无法工作;
2)而如果存在namenode磁盘上,那么会经常访问,和响应客户请求,必然会导致工作效率降低;
3)于是我们把数据放到磁盘中(FsImage),然后去减少io的次数,这样可以减少namenode的工作压力,那么怎么能减少磁盘的io呢?
4)我们引入了Edits文件,这个文件主要工作是记录元数据处理的步骤,由它和FsImage能够合成整个完整的文件;
5)长时间的往Edits文件中添加数据,会导致文件过大,效率降低,而且一旦断电,恢复元数据的时间较长,也可能全部丢失,为了解决这个问题,我们想到一定时间让FsImage和Edits文件进行合成;
6)如果合成在namanode中完成,也会进行IO,降低效率,因此,引入一个新的节点SecondaryNameNode,专门用来FsImage和Edits合成;

工作原理

1.第一阶段:Namenode启动
(1)第一次启动Namenode,创建FsImage和Edits文件,如果不是,直接加载编辑日志和镜像文件到内存。
(2)客户端对元数据进行增删该的请求(查不会记录到Edits文件中),记录到Edits文件中。
(3)然后在内存中对元数据进行增删改。
2.第二阶段:Secondary NameNode工作
(1)定期询问NameNode是否要进行合成,并带回结果
(2)如果要进行合成,那么拷贝文件到Secondary Namenode中,合成
(3)生成新的镜像文件拷贝到Namenode
(4)然后把namenode中镜像文件覆盖

##NameNode在启动时就只需要加载之前未合并的Edits和Fsimage即可,因为合并过的Edits中的元数据信息已经被记录在Fsimage中。

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值