Hadoop--HDFS的两大核心

Hadoop–HDFS的两大核心

一:写数据

1)具体步骤

1.客户端向namenode发送RPC请求;

2.namenode检查权限以及文件是否存在(是否可以上传);

3.namenode确认可以上传文件的话会向客户端发送一个确认信息;

4.客户端将文件分块(每个block块128M)按照顺序上传,向namenode申请这些block块存储的datanode列表;

5.上传第一个block块:

1.通过交换机建立一个pipelin通道;

2.block会以“packet queue”的形式传输,每一个packet的大小是64k;

3.为了保证packet传输的正确,当packet向最后一个datanode的传输完成之后,datanode会返回一个ack packet(确认传输到了),在客户端维护着一个ack queue(确认队列),客户端收到一个ack就会从ack queue中移除一个ack;

4.每传输8个packet(即512k)就需要进行一个校验;

5.节点列表在通道中进行复制;

5.整个block块的所有packet重复改动作;

6.其他的block块和第一个block传输方式一致,传输完成关闭pipeline.

2)在pipeline上的datanode如果出现了异常?

​ 将会被移除,nn会分配新的dn加入pipeline(保证副本的个数)

3)注意

只要写入了 dfs.replication.min(最小写入成功的副本数)的复本数(默认为 1),写操作就会成功,并且这个块可以在集群中异步复制,直到达到其目标复本数(dfs.replication的默认值为 3),因为 namenode 已经知道文件由哪些块组成,所以它在返回成功前只需要等待数据块进行最小量的复制。

在这里插入图片描述

二:读数据

1)具体步骤

客户端将要读取的文件路径发送给 namenode,namenode 获取文件的元信息(主要是 block的存放位置信息)返回给客户端,客户端根据返回的信息找到相应 datanode 逐个获取文件的 block 并在客户端本地进行数据追加合并从而获得整个文件

1.客户端向远程的HDFS发送RPC请求;

2.通过交换机建立通道,如果数据存在,namenode会视情况返回整个文件的block块列表,对于每个block块,namenode都会返回拷贝的datanode地址;

3.客户端收到block列表,会选取离客户端最近的datanode去读取block块,如果最近block的在本地就是本地读取;

4.读完一个block块之后,断开与datanode的连接,client去寻找下一个block块最近的datanode;

5.读完列表block块之后,如果文件还没有读取完成,namenode会返回下一批block块的列表;

6.每次读取完一个block之后都会进行checksum校验,如果读取错误,客户端会通知 namenode,然后再从下一个拥有该 block 拷贝的 datanode 继续读。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值