Hadoop读写流程与2.X架构

平安模式

集群启动时的一个状态,处于平安模式的状态下,只向客户端提供文件的只读视图

HDFS的权限

HDFS对权限的管制

只能避免坏蛋做错事

不能避免好人做好事

机架感知策略

咱们须要将正本放在不同的DN节点上,节点也须要肯定的考量

可靠性、可用性、带宽耗费

第一个节点

集群外部(优先思考和客户端雷同节点作为第一个节点)

集群内部(抉择资源丰盛且不忙碌的节点为第一个节点)

第二个节点

抉择和第一个节点不同机架的其余节点

第三个节点

与第二个节点雷同机架的其余节点

第N个节点

与后面节点不反复的其余节点

HDFS写数据流程

宏观流程

客户端向HDFS发送写数据申请

filesystem通过rpc调用namenode的create办法

nn首先查看是否有足够的空间权限等条件创立这个文件,或者这个门路是否曾经存在,权限

有:NN会针对这个文件创建一个空的Entry对象,并返回胜利状态给DFS

没有:间接抛出对应的异样,给予客户端谬误提示信息

3.DFS如果接管到胜利状态,会创立一个对象 FSDataOutputStream的对象给客户端应用

4.客户端须要向NN询问第一个Block寄存的地位

NN通过机架感知策略 (node1 node 2 node8)

5.须要将客户端和DN节点创立连贯

pipeline(管道)

客户端和node1创立连贯 socket

node1和node2创立连贯 socket

node2 和Node8创立连贯 socket

6.客户端将文件依照块block切分数据,然而依照packet发送数据

默认一个packet大小为64K,Block128M为2048个packet

7.客户端通过pipeline管道开始应用FSDataOutputStream对象将数据输入

客户端首先将一个packet发送给node1,同时给予node1一个ack状态

node1承受数据后会将数据持续传递给node2,同时给予node2一个ack状态

node2承受数据后会将数据持续传递给node8,同时给予node8一个ack状态

node8将这个packet承受实现后,会响应这个ack给node2为true

node2会响应给node1 ,同理node1响应给客户端

8.客户端接管到胜利的状态,就认为某个packet发送胜利了,直到以后块所有的packet都发送实现

9.如果客户端接管到最初一个pakcet的胜利状态,阐明以后block传输实现,管道就会被撤销

10.客户端会将这个消息传递给NN,NN确认传输实现

NN会将block的信息记录到Entry,客户端会持续向NN询问第二个块的存储地位,顺次类推

block1 (node1 node2 node8)

block2 (node1 node8 node9)

blockn(node1 node7 node9)

当所有的block传输实现后,NN在Entry中存储所有的File与Block与DN的映射关系敞开FsDataOutPutStream

宏观流程

1.首先客户端从本人的硬盘以流的形式读取数据文件到本人的缓存中

2.而后将缓存中的数据以chunk(512B)和checksum(4B)的形式放入到packet(64K)

chunk:checksum=128:1

checksum:在数据处理和数据通信畛域中,用于校验目标的一组数据项的和

Packet中的数据分为两类,一类是理论数据包,另一类是header包。

一个Packet数据包的组成构造

3.当packet满的时候退出到 增加到 dataqueue

4.datastreamer开始从dataqueue队列上取出一个packet,通过FSDataOPS发送到Pipleline

在取出的时候,也会将packet退出到ackQueue,典型的生产者消费者模式

5.客户端发送一个Packet数据包当前开始接管ack,大数据培训会有一个用来接管ack的
ResponseProcessor过程,如果收到胜利的ack

如果某一个packet的ack为true,那么就从ackqueue删除掉这个packet

如果某一个packet的ack为false,将ackqueue中所有的packet从新挂载到 发送队列,从新发送

6.最终DFS保留的数据格式为

blk_ 为trunk文件

blk_ .mate 为checksum文件

HDFS读数据流程

首先客户端发送申请到DFS,申请读取某一个文件

DFS去NN查找这个文件的信息(权限,文件是否存在)

如果文件不存在,抛出指定的谬误

如果文件存在,返回胜利状态

DFS创立FSDataInputStream对象,客户端通过这个对象读取数据

客户端获取文件第一个Block信息,返回DN1 DN2 DN8

客户端间接就近准则抉择DN1对应的数据即可

顺次类推读取其余块的信息,直到最初一个块,将Block合并成一个文件

敞开FSDataInputStream

Hadoop1的窘境

单点故障

每个群集只有一个NameNode,NameNode存在单点故障(SPOF)

程度扩大

未来服务器启动的时候,启动速度慢

namenode随着业务的增多,内存占用也会越来越多

如果namenode内存占满,将无奈持续提供服务

业务隔离性差

失落inprocess