00:01
好,在讲完h base的API之后呢,我们第一部分h base基础的内容就已经全部介绍完了,在基础的内容里面呢,我们简单介绍了h base,安装部署了h base,同时呢,在API里面告诉大家如何去在代码里面使用h base啊,那这一部分内容呢,相信有很多有基础的小伙伴们是选择直接跳过的啊,直接跳到了我们h base进阶,也就是内部原理的这部分内容啊,那当然了,这个也是可以的啊,如果你之前有使用过h base的话,好,那在我们第四章啊h base进阶里面呢,我们会展开一个新的篇章啊,会详细的给大家介绍h base底层的一些原理啊,那我们呢,先学习完API再来学习这个原理呢,可以讲的更加深入一点啊,会在这里呢,我们会介绍每一个我们使用到的进程及其内部的一些组件,同时呢,会在源码里面给大家和代码呢相互对应上啊,那首先呢,我们第一节呢,需要学习的是master的一个架构。
01:01
这里的master就是我们提到的h base的组件master和region server啊这种主要的进程,好,我们通过PPT呢,来一起来看一下。好,那么首先呢,是master的一个简单介绍啊,它是我们HP里面的那个主要进程,就是它是老大对吧?它管理reading,它具体的实现类呢,叫h master啊,这就意味着代码已经告诉你了啊,它主要的类就是h master,如果你想要查它内部的一个组成的话,你直接去查找h master的内容就可以了啊,那它通常呢,是部署在name node上面了啊,因为呢,呃,H base是以HDS为基础的数据库啊,我们通常呢是跟HD相对照的啊,管理源数据,H master也管理数据,所以呢,它跟name node放在一起啊,而reading server呢,管理的是数据,那它通常呢,和data notde放在一起啊。好,咱们继续往下啊,来看一下,这是我们master的这个服务端啊,就那个server端,这个server端里面呢,它需要通过主配去管理他的小弟们啊,管理他的小弟们相信这种结构呢,对于使用阿帕奇框架比较多的同学们呢,哎,都不是很陌生啊,组kper呢啊h base呢,这些框架呢,都是类似的啊,毕竟组K派这个东西啊,它就叫铲屎官对吧?动物管理员,它管理着啊阿帕奇家的各种各样的小动物们。
02:27
好,尽管h base呢,是一个大鲸鱼对吧?哎,不太会在动物园里出现它这个结构呢,大致是这么来去理解的啊,就是这些小D啊,哎,并不能够直接跟master去通讯,不能够直接跟master通信,不能够通讯的原因是分布一致性的问题啊,因为组开派能够帮他们实现这个分布的一致性,他们自己通讯就没有办法,哎。实现这么一个功能了,需要自己写一大堆代码啊,非常的麻烦,所以他们通常啊,都会选择如何来操作呢?每一个region server,把自己的信息注册到组K派上面啊,注册到组K派上面相当于什么意思呢?相当于如果啊,呃,这就像什么?这就像你班级里面的学生啊,和班长的关系是一样的,如果学生直接到班长的位置上去找班长啊,那不太行,为什么呢?因为班长啊可能不在,哎,我我去找班长了,班长不在,那我这个话没办法告诉他,我心里憋着难受,我一定要传递给他,他传递不了。
03:24
你知道吧啊,那所以怎么办呢?找一个一直在的组K板啊,那它既然是一直在的主K啊,它可以是一个固定的东西啊,比方说呢,它是黑板啊,他是黑板,那这个小弟们如果有什么话想对master说的话,他就写到这个自己那个黑板的位置上,每一个小弟都把自己的信息注册到对应黑板的那个位置上,好,然后master怎么管理的,诶,Master不用直接去联系小弟,一样道理啊,你这个同学找班长找不到,那班长小找同学的时候呢,他也找不到,也干着急对不对,他怎么办呢?他把他的信息修改到组课本里面。
04:02
啊,修改组片面所有region server注册的信息呢,都会在组K里面,那同时呢,Master直接去修改组K里面信息,通过修改组片信息,同时呢,完成对region serve的一个监控啊,完成一个监控啊,那这个分布式的基础架构啊,只要是依赖于组keep,基本上都是这种模式啊,依赖组keep好,这是它的一个基础功能啊,管理手底下的reading server呃,在基础功能之外呢,它需要跟HDS文件系统也有一定的交互啊,那它主要的交互呢,就是这个非常特殊的表,叫ma表,原数据表啊,原数据表呢,在我们的h base里面也是作为一个表格存在的啊,它不是特殊存储的原数据啊,它也是h base里面的表格,它有表名,表名就叫me啊,它也有列足,列足叫in for里面也有RK也有列,跟我们别的表使用起来是一样的,它唯一的最大特点就是啊,你不能动它。
05:00
啊,他身份特殊对吧?啊,你不能去动它啊,还有一点呢,就是我们在用list去查看表格的时候啊,作者呢,已经帮我们过滤掉了啊,也不想让你看到他对吧?哎,他的目的很明确,就是你不要来动我啊,不要来改我,不然的话后果自负,肯定会出现各种各样奇怪的bug,对吧?不要我们用户不要去改这张表,那谁来修改这张表呢?由master来修改这张表啊,由master来修改这张表。这张表里面会记录着哪一个region server管理了哪一个region啊,有对应的一个管理信息,好,这个管理信息呢,会被h master里面的一个叫负载均衡器的东西啊进行一个调节,对吧?哎,如果你哪一个region server管理的region太多了啊,管理region太多了,那咱这个几个小D之间啊,分配不均,容易打架啊,所以这个master呢就出面啊,会把这个region呢分配的均匀力点啊,分配的最小力度就是region了啊,不会说按行来分啊,那还按行来分,太细了啊,数不过来太多一太多行了,数十一行的不分,按region来进行拆分啊,这叫第一个负载均衡器啊,都去MAT表了解region的一个分配,通过连接ZK啊了解region server的启动情况啊,五分钟调控一次分配平衡啊,就这个原数据表里面会记录哪个region s管理了哪几个region。
06:23
对吧,它它已经记录了这个信息了,然后呢,负载均衡器会五分钟来看一次,看看是否平衡,它一方面看是否平衡,另一方面它会去通过主规范里面记录到小弟们的那个信息啊,就我说的,如果你它它里面会有一个心跳机制啊,这心跳机制相信大家都不陌生,对吧?主K派之间和瑞金S间会有心跳机制,这个心跳机制呢,能够判断这RIS是否还活着啊,这小弟呢还在不在啊,如果他有事走了,不在了,他他把自己关机了啊,那他呢,就会在那个主里面擦掉这个信息,他没有这个信息之后呢,再进行负载均衡的时候,都理所当然把他的region呢给到别人去进行一个管理啊,这叫第一个负载均衡器啊,紧接着呢,是第二个叫原数据表管理器啊,这个名字呢,其实无所谓,你只需要知道它专门启动了一个。
07:14
线程啊,专门启动一个线程在进程里面吧,Master服务端是一个进程里面呢,有多条属性,在多条属性呢,对应多个线程啊,那这个线程呢,专门就是用来管理这个原数据表的。这个原数据表呢,我们都知道这个h base的表啊,会有非常多个版本,对不对,非常多个版本,那这个短版本呢,你看它里面记录了什么,记录着,呃,Region的一个分配啊,这region分配呢,五分钟调控一次,那理所当然,这个版本现象应该是非常多的,来回变对不对,来回变那它过一段时间之后它变的。一个小时之前变的那个信息就变得没有意义了,就过期数据就会变得没有意义,所以我们原数据原数据表管理器这个东西啊,就会定期的来去清理啊,清理整理这个原数据表里面的数据啊,整理一下嘛,对吧,你整理一下更好用一点啊,不用有一个过多的一个版本的冗余啊,这叫原数据表管理器啊,除了这个之外呢,还有一个叫master。
08:14
Pro waal啊,这wal呢叫预写日志啊,这个预写日志呢啊,如果你了解阿法框架比较多的话,相信并不陌生,什么叫预写日志呢?啊,就是说啊,这些服务器他如果做一件比较简单的事情,就跟我们人干活是一样的啊,如果你干一个比较简单的事情,比方说你在搬砖啊,你身边的这个好兄弟拍拍你肩膀说,哎,给我拿个锤子啊,那你顺手就拿给他了,然后把锤子递给他的时候呢,你说一个给,哎,然后这就OK了,对吧?哎,你这个活呢就干完了。但是呢,你在工作里面并不总是这种简单的活。如果你有一个很复杂的一个活,比方说什么呢?比方说让你搬一小时一小堆的一个砖啊,你不可能咔咔呼吸呼吸在这一直搬,你不可能让你那个人啊一直等着你,对不对,这时候怎么办呢?啊,你需要有一个记录啊,一个记录保证呢,你一定会把这个砖搬完,那这个预写日呢,就类似这么一个东西啊,呃,Master在执行任务的时候啊,他这个任务它没有办法快速的操作完,因为会涉及到不同地方的一个读写啊,不同地方一个读写,呃,比方说我们给这个master创建一个表格。
09:26
Master如果想要创建一个表格的话呢,他需要去修改对应的一个原数据表,一个信息,还要完成一个对应的分配,这个活呢,相对还要经过好几个流程,比较长,那他为了避免这个活做到一半的时候,Master自己挂了,他怎么办呢?搞一个预写日志啊,他先记录下来,我要创建这么一张表啊,要创建这么一张表,他记录这个东西的目的是什么呢?如果他在创建表的过程当中,他挂了。Master被kill掉了对吧?那谁来干活啊,Backup master,哎,备胎就顶上了啊,Backup master会转正为master,同时呢,Backup master会来读写这个预写日志,会来读这个预写日志啊,他来读这个预写日志呢,就能够接着那个创建表格继续去操作,而这个预写志存在哪呢?还是存在HD上面存在对应的这个WS这么一个目录下面啊,这个h base的是我们对应的那个h base的存在HD上数据的那个根目录,这是根目录,根目录里面有一个叫master data文件夹,在里面有一个WS,这里面存着master的预写日志啊预写志好,那这里呢,就是我们主要的一个功能啊,管理他master自己的预写日,如果他宕机了,那让backup master呢读取日志数据,再继续接着他活继续做啊好,这就是我们master架构的一个整体的一个介绍,这里面呢,给我们主要介绍了三个比较重要的。
10:53
一个组件啊。好,我们这边呢,还有一个预写日志的一个介绍啊,本质上呢,预写日志还是把这个数据啊给写到了HD上面啊,那写到HD上面它会有一个小文件问题,对吧?我们这里呢,为了避免小文件问题,设置是32兆的文件,或者一小时滚动一个这个对应的一个预写日日文件啊,32兆或者一小时啊呃,有的同学可能觉得32兆比128兆要小,对不对啊,那是因为啊,预写日志这个东西,它文件量数据量上不去。
11:25
它只记录创建一个表格这么一条命令啊,它在多少命令才能够32兆,所以32兆已经可以了啊,已经可以了啊,不要要求太高,对不对,当我们执行完这个命令之后呢,如果是同一个文件里面所有的命令全部都执行完了,它还会对应的删除这个预写值,所以这个呢,你不用担心,系统呢会自己解决啊,会自己解决。好,那这个呢,就是我们master的一个详细架构啊。
我来说两句