00:00
好,接下来呢,我们来看一下机架感知。那什么是机架感知呢?翻译过来,其实就是副本存储节点的一个选择。那稍微回忆一下,我们在讲as写数据过程的时候,是不是客户端,它要往哪几个节点上写数据,是不是要征询name no的意见?那内not会给它返回出回来对应的三个节点,那它根据什么原则进行返回呢?它优先返回的本地节点,然后另一个呢,是其他机架的一个节点,还有其他机架的另一个节点。那这是我们说的,那它是不是这样返回的呢?那我们来看一下这里面,首先呢,你要想看的话,可以从官网上去看一下,在它官网这个路径上有对应的下面这段话。啊,由于我的网速啊,不是那么特别好啊,直接给大家啊看一下啊,直接拿过来了,那说for the common case比是正常情况下,When the replace啊,Factor is three,你说你有三个副本的时候,HDFS的存储策略是什么呢?说这个put呀,第一个副本。
01:08
On the local machine什么意思?是不是在本地节点呢?好,那another,第二块副本在哪?再一个different RA,但是呢,叫remote,是不遥远的地方,哎,也就说不在你相同机架上的另一个节点。那还有the last,也就是最后一个副本,它放在哪?放在in the same remote了,是不是跟你第二个副本存储在同一个机件?是这样一个过程吗?哎,这是个官方的原话啊,你自己可以看一下,OK,好,那给大家用图形画表示一下什么意思。打开,假如说在你生产环境下呢,这有三个机架。OK吧,那这里面呢,有对应的三台服务器,三台服务器,三台服务器。对应的服务器。好,那他怎么存呢?首先说第一个副本呢,在客户端所在处的一个节点随机选一个啊在机架上进提交,那一般呢,他会优先选择你在哪台机器上提交,我就优先选择谁,那是不是就提交上来了,就在这。
02:11
OK。那我第二个副本在哪呢?第二个副本说是在另一个基架的是一节点,那我是不是可以选择它,也可以选择它呀?好,那假设呢,这里面我们选择的是机架二。把数据传过来了。哎,这就是第二符文,那我可以选择NN0,也可以选择N1,也可以选择N2都可以啊,这是随机的一个节点。那再来,那我第三个副本选择的是跟你第二个对吧?哎,跟你第二个副本所在的同一个机架,然后呢,随机节点你可以选择N1,也可以选择N2。OK,那假如说我选在这儿。那他为什么要这么选呢?大家有没有思考的问题?这么选有什么好处呢?你看啊,第一个计价呢,我选择本地考虑的是什么。是我节点距离最近,我上传速度最快。好,那我第二个数据,那我为什么不传在这儿,传在这儿呢。
03:01
为什么跑别的机架去少了是保证你的数据的可靠性啊,哎,对他从这个角度去考虑的啊,所以说呢,他把数据呢,又传到这儿。那同学同学说你要保证可靠性,那你你再传下一个机架,每个机架上都保存一个多少啊,哎,它同时又要兼顾对应的效率,你在这机架同机架内部传输,是不是比你跨机架传输网络速度要快一些?哎,就是这样一个原因哈,这是嗨多他自己的设计的一个思想,那么从源码上再给大家看一下它是不是这么设计的。哎,那怎么看呢?哎,你这个CTRLN查找对应的这个类,然后里面找对应的这个方法就可以了哈。呃,来到这里面ADS,然后呢,CTRLN。V,好吧,哎,就这一类,这个类里面我们找对应的这个方法处是他给的。好,然后点进去对吧,那这个方法叫选择target节点。
04:00
是不是选择你对应的副本要存储在哪些节点呢?哎,就是这个含义哈,那你看这里面代码说number of result,如果等于零,相当于是你第一个副本,那第一个副本我选择哪呢?看这。啥意思?Choose local stories是选择本地的节点呢,哎,这是他第一选择,那好,那第二个副本选择谁呢?这是第二个,哎,记住我放大一点啊。他第二个副本看他选择的叫remote RA是不是远程的一个节点啊,那跟谁远程呢?你看啊,这里面选择完之后产生的是DN0,那DN0传进来,那我跟你这个DN0相对来说是远程的,那我是就不在你这个DN0对应的机架上,你DN0在这个机架,那我下一个节点就在另一个基架上。这含义,这就是remote right。OK好,那我这个产生了这个第二个副本,那我是不是这个就叫DN1啊,哎,对它叫D1。
05:00
来那往下走,那我第三个副本怎么选择。第三,那首先他先判断了一个这个,如果说你这个DN0和DN1在同一个机架上。啥意思啊,就是你公司集群当中一共就一个机架啊,或者两个机架,那他没选择,他都选择就近的一个数据了,那这时候怎么办呢?它第三个副本要求你选择remote RA,你说远程的跟谁呢?跟DN0,你这是DN0,这DN1,那他让你另一个尽量的选择其他机件。哎,还是从可靠性的角度去考虑啊,当然正常情况下呢,是不会出现这种情况的,OK吧,哎,好,那再往下,那我们这个数属于这个锌块啊。那心块出在哪呢?看呢处着local RA本地节点,那跟谁是本地的这个一个机架呢,D1,你看你这是第一个机架对吧,这是第二个D1,那说你第二块呢,是跟DN1在同一个基架,那不是在这啊再来一个。不是这么存储的吗?哎,无论从官网上说明还是从这个代码上,哎,它都是按照这种方式进行一个存储的,好,这就是呢,对应的机架感知啊。
我来说两句