00:00
好,接下来我们来看一下第四章HDFS的一个读写流程,它是一个非常重要的面试题。被问到的概率呢,非常高啊,所以说这块呢一定要认真听啊,我们首先来看一下AFS入数据的一个流程,也就是说我从客户端如何把这个数据写入到这个a dys集群。那底层是怎么操作的?来,我们首先来看一下这个原理啊。呃,相当于是两个人的一个对话,呃,右侧呢,这是as集群,那这里面有的角色呢,有name node,还有对应的data note节点,对吧?好,那接下来左侧呢,是客户端。他呢,准备把自己的这个数据,比如说送送点A传送到这个集群上。这样一个过程好。那好,那客户端呢,他想把自己的这个数据传送到集群,那他首先怎么做呢?首先他得有一个A端呢。对吧?哎,创建一个客户端,那他创建这个客户端是什么样的客户端呢?记住他创建的是一个distribute file system,比如说分布式的文件系统。
01:03
哎,这个很重要哈,很重要啊,因为这个EDS客户端它有很多种类型,哎,我们要选择啊分布式的,因为默认是不是本地啊,Local还记得吧,啊好,那行,那创建这个分布式系统之后,他要干什么事儿呢?哎,他要向这个name node进行请求说呀,我要将这个送送点avi传送到你集群的优质艾特硅谷这个路径下。对吧,哎,要传,那大家想你要是这个name到你要干什么事儿,是不是所有客户端想传什么他就传什么呢?不是吧,对哎,我们要对它进行一个校验。我们要检查你这个客户端有没有权限往这里面去写。还记得吧,哎,每一个这个文件,它是不是都有所有的用户和用户组啊。哎,检查一下权限是否OK,哎,不OK,直接拒绝了。那再来,那你有了权限,我就一定能往这个目录下写这个文件吗。那如果这个目录下已经有了一个送的。
02:02
那我说告诉他这个文件已经存在,你这次写入是不是失败了?啊,对他要进行这些合法性的一个检查,那当然除了这些啊,还有其他的一些内容,那最关键的是这两个。OK吧,好,那回头来,哎,比如说内蒙诺的检查完之后说可以上传好给他进行一个回复。回复完之后,那这个客户端他还要干什么事儿呢。说你允许我上传了,那哥们你得告诉我上传到哪啊,对吧,你这集群上有N多个data node节点。我是我自己选择随便传吗?肯定不是的啊,肯定不是的哈,哎,他有对应的这个选择策略。首先他要选择,哎,优先选择本地节点。啊,然后呢,本地节点之外呢,是其他机架的一个节点,这里面是引出来一个机架的一个概念哈,后面我们会单独去讲这一块啊,你稍微先有个印象好吧,啊,这个存储这个副本策略,比如说他怎么选,这里面是有一个优化的一个方法的啊最后呢,是其他节点的力啊,其他几架的另一个节点,诶,他首先考虑的是什么事儿,你想你要是这个内蒙诺的这个呃,架构设计者,你会怎么让他去选择呢?
03:11
哎,这里面涉及到节点距离最近。你在哪个客户端选择说,哎,我在这个NOTE1提交的数据,那我是不是直接上传到data note1,我的距离最近呢?我速度最快吧,对吧?哎,这是他他的想法,那也是代码的想这个作者的一个想法,那还有一点,那如果说大家都在这个节点上提交数据,你是不是会导致这个节点呢?呃,这个存储数据量非常大呀。那我还要考虑的是负债均衡。哎,这里面还有这这这个含义啊,负载均衡,比如说我不是说把都在本地,我一定就都把这个数据存储在本地,他会考虑当前是否有多个这个客户端,同时再往这个电动端写,如果多个客户端都在写的话,那他就把这个节点排除掉了,他就让这个节点哎去把这个客户端啊,把这个数据啊,把这个传输到其他节点上。
04:00
OK吧,啊,也就说这里面既考虑了减均离最近,又考虑了对应的这个负载均衡相关的一些事情啊。好,那后面那些细节再说,那正常情况下呢,他返回三个节点,那接下来客户端又干什么事儿呢?那我就真正的得创建一个数据流,往外去写数据。对吧,好,那再大家思考一个问题。如果你是这个客户端的设计者。你要往三个节点上写数据,你怎么写?有同学说,那我就往这写啊,再往这写,再往这写。对吧,啊,有没有这种想法呢?那另一种另一种写法呢,就是我往这写,你我想往这写往这写。知道吗?哎,就跟咱们上完课之后给大家发送这个视频。我是老师呢,一个人对应了你班六七十个人的这个客户端,对吧,哎,老师一个人跟你们分享对吧,我这我这是呃QQ分享。对吧,嗯,然后每个人都连接我这电脑。
05:00
我还是说我先把这个。视频传给班长。然后呢,班长传给组长。组长呢?再传给每一个组员。大家觉得哪一个更好一些?其实呢,如果说你这是多个客户端都对接我这一个主机的话,那有任何一个节点他没有拷贝完毕,我是不是都要等啊。一直在等这个这个节点就得拷贝完毕吧,我才能离开,是这样吗?但是如果说我这样去传。穿他穿他,我是不是只要保障他是OK的,那其他他就可以慢慢的往后去传呢。哎,对啊,所以说这种方式呢,也是这个as他所选择的这个啊,设计方案他先选择对吧?哎,第一个模块进行传输,传输完之后他跟他建立通道,再跟他建立通道。哎,这样是把这个管道建立畅通。OK,然后呢,进行一个应答。是吧,哎这样一套流程,那有同学该担心了,说海哥,那你这个是串行啊,你必须得保证说这个这个note里面,哎,这个数据完事之后,然后你往下一个传,再往下传,那你这个没有我这个并发这个快呀。
06:09
是不是这样的呢?哎,这个架构设计者啊,他已经想好了,他不是你你想象的那种玩法,他怎么玩的呢?他是这样先传输给他,他一一份儿数据呢,是往磁盘上写,另一份在内存当中直接就传给。下游了。能懂吗?哎,所以说它这个传输效率是很快的哈,它是直接传给你这之后又往上往下走,然后传给你一份之后,他这个数据呢,往下往下去发送。这个效率很高啊行,那它具体发送的时候,那我一次发多少数据呢?你这个流里面最小单位是多少呢。记住,这里面传输的最小单位呢,叫packet。哎,这一个一个小球是packet,那这个packet的大小呢,是64K。啊,64K,那这64K的packet它是怎么产生的呢。那这样产生的哈,首先你这块写创这个流的时候,它是先创建了一个缓冲队列,在这个缓冲队列里面,它存储的是这些内容,叫track。
07:06
它的最小单位叫track track呢是512字节,再加上四位的一个校验位,啊校验位那加在一起呢,是516个字节,那516个字节。它攒够多少呢?五百六十一十六个字节,攒够到64KB的时候,就会形成一个大的串。哎,大的串啊,大的这个pack啊pack。听懂吗?哎,先是形成truck truck之后形成pack,形成一个一个packet之后,这个pack再发送到下一个date date。哎,是这样一套流程。能懂吗?啊,我给你再稍微细化一点啊,首先呢,这里流过来之后,它先形成的是串串。哎,是512。加上四个字节对吧,哎,然后这么多个之后。这点多个之后形成,这是一个整体pack。PACT,那packca呢,形成一个pack,然后再形成一个pack,再形成pack,又放到一个缓冲队列里面。
08:06
然后进行一个发送,哎,每次呢,我发送的是一个拍的对象。那我发送完一个派对对象发送完,发送完送之后,每一个发送完之后,对方都要给我个应答。爱过英达是否接收成功,如果都接收成功之后,这里面的数据,哎,它会还有一个缓冲哈,还有一个叫啊AC这个队列啊,这说的比较细了啊,嗯,那里面AC队列它会网站里面发送的时候,它会存储一份缓冲数据。那我这边应答成功之后,缓冲数据才会被删除,那这有什么好处呢?哎,它防止是你这边发送的时候没成功,那我这儿呢,还给你备份了一份数据,你下次呢还可以再发行,那这个后面这个细节啊呃,大家了解一下就行了,后面呢会带家去看这个源码哈,啊正常情况下呢,这是官网的一个,呃,类似的这种出出线条的一个架构图啊啊记住这种就可以了,那我们稍微再回顾一下啊,稍微回顾一下。
09:03
首先呢,这是两个两个这个对象,一个呢是客户端,那个是集群好客户端呢要上传数据,比如说200兆的这个,呃,128兆的啊,200兆200兆的送送点avi。那它会创建一个分布式文件系统,进行一个上传。好,那他要上传这个文件,能不能上传呢?内弄的要进行检查,首先检查你的权限,之后呢,检查你的目录结构,检查都OK之后,告诉你可以上传,可以上传,他立即发送请求说哥们儿,我要往哪一个路径上去传,好,那他会告诉他,哎,我给你挑选了三个节点,这里面考虑的是哎,每一个节点是否可用,以及呢,负载均衡,节点距离最近等等因素,哎,给你三个节点,那它返回来三个节点之后,这面呢,就开始创建流啊,创建流的过程当中,它首先创建的是。哎,是以这个为单位。
10:00
放单位,然后形成packet啊,然后以packet单位往下去准备要发啊,那发生之前它要先建立的是什么呢?建立的是这个管道,哎,把这个通信管道建立起来,那他为什么要这么去建立呢?建立的原因就是因为哎这样呢,效率反而会更高一些,我既往你内存里面写一份,又往直板上写一份啊,然后呢,后续呢,你这个节点只要他成功,那他就可以慢慢的往后去传输啊,防止呢,我这么这么去传啊,导致呢,我这个一个人对应着多个客户端,那这个效率啊,会把它这个效率拉的非常低啊。那之后呢,开始传,那传的过程当中,就是刚才说了啊,最小单位是truck啊,加上一个校验位,那这个由串和校验位呢,组成了一个packet,那每一个发送单位呢是packet再往下发,那好,那他发的时候呢,记住它是给这边发的,同时它又准备了一个AC队列。啊,这个A队列呢,主要是接收这个下一端是否这个应答成功啊,应答成功之后,我这里面数据才删除掉啊是这么一个备份作用,好,那他往这发,往这发往这发,发往磁盘上写一份内存留一份往下继续发送啊,然后磁盘里写一份。
11:12
带内存,再往下发送。发送完之后,他们进行应答应答应答,应答应答都成功了,他会收到这里面说应答OK,都OK之后这个数据删除掉。对吧,啊,如果没有成功,那怎么办?他把这个应答的数据再塞到这个这个原来这个发送数据的这队列这个pack里面啊,继续下面往下走啊。啊,这是APS的一个读写流程啊,非常重要啊,非常重要,大家一定要认真听。
我来说两句