HDFS原理加强之---集群维护、上传数据和下载数据

一、集群维护(namenode和datanode之间的通信)

具体流程

1、namenode启动,进行初始化;namenode启动时把最新的FsImage加载到内存中。

<(1)namenode里面有一个FsImage的目录结构,记录某一永久性检查点(Checkpoint)这个时刻的整个HDFS的元数据信息;还有一个edits,记录所有对HDFS的写操作。

(2)HDFS会定期对最近的FsImage和edits文件进行CheckPoint,CheckPoint发生后会将前一次CheckPoint后的所有edits文件合并到新的FsImage中,HDFS保存最近两次CheckPoint的FsImage。

(3)存储元数据信息的FsImage会定期将元数据对象序列化到磁盘以保证宕机后数据的正确性与可用性。>

2、datanode启动,根据配置文件hdfs-site.xml中配置的dfs.namenode.rps-address;linux01:8020获得namenode的位置,找到namenode进行注册。

3、namenode接收datanode的注册,进行校验,校验成功后分配集群ID(ClusterId)和存储数据的统一目录,并生成datanodeUuid唯一标识和存储标识。

4、连接完成后,datanode向namenode汇报存储容量和存储数据情况,之后(默认)1h汇报一次;namenode中存储datanode节点列表。

5、datanode定期执行sendHeartBeat方法定期向namenode心跳请求一次,默认间隔3s。

<心跳机制

(1)两个目的(从):一是从节点证明自己还存活,二是领取主节点分配的任务。

(2)HDFS是主从结构,当主节点启动时会启动一个进程间通信服务IPC(Inter),当从节点启动后,自动连接到主节点;主节点接收从节点的数据的汇报 , 并更新元数据(节点映射)。

(3)主从节点之间互相通过心跳机制发送任务(主)和汇报信息(从)。>

6、当某一datanode发生宕机时,如果datanode已经10次没有接收到datanode的心跳(10次以内可能认为是网络问题等原因),namenode会再等5分钟,如果仍未接收到心跳,会对datanode进行检查校验;如果发现datanode进程不存在,会再等5分钟之后第二次进行检查校验;如果没有,会认为datanode挂掉了,并将其剔除。HDFS默认的超时时间是30s+10min。

在这里插入图片描述

二、写入数据(以上传为例)

1、datanode启动,向namenode注册,namenode进行校验,校验完成分配集群ID(ClusterId)、存储数据的统一目录,生成唯一标识和存储标识datanodeUuid;datanode汇报磁盘存储容量和数据信息。

2、客户端向namenode发送上传请求(文件大小、物理切块大小、副本个数等)。

3、namenode接收请求,进行校验(存储容量、权限、分配元数据信息),完成后返回ok。

4、客户端收到namenode的ok响应。

5、客户端请求上传第一块数据,namenode生成一个临时工作目录,给客户端返回第一块数据的元数据信息和可用的3个(默认存储3个副本,可以修改)datanode节点。

6、客户端和返回元数据信息的3台机器建立连接通道,检查连接是否通畅。(客户端与datanode之间串联,根据网络通信算法找到最近的datanode,由客户端上传第一块数据给最近的datanode,并由此datanode传给其他datanode;客户端与datanode之间并联会影响传输速度)

7、客户端本地IO输入流读取待上传文件的第一块数据内容,一边读取一边转换成分布式输出流(DistributeOutputStream),封装字节数据为数据包(提高传输效率)。

8、datanode分布式输入流读取,一边读取一边转换成分布式输出流,将数据写到本地磁盘指定文件夹下;同时将数据输出到下一个datanode2,再经由datanode2传输给datanode3,都会将数据写到本地磁盘统一指定文件夹下,此过程不再赘述。

9、当集群中有一个数据块传输成功,上传的数据块成功 ; 如果副本个数不够,后续datanode会自动维护副本个数。

10、客户端在进行第一块传输过程中,如果第一个节点宕机或者发生其他情况使得数据无法正常上传,数据传输失败,主节点会重新规划元数据,分配传输任务;

在第一块成功上传到第一个节点之后,某个接收数据副本的节点宕机,不会影响第一个节点将数据上传成功的信息返回给客户端,主节点会根据心跳机制将数据副本存储到其他节点,如果过一段时间这个节点恢复正常,主节点会删掉其中一个副本。

在这里插入图片描述

三、读数据(以下载为例)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值