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