00:00
咱们来继续啊,刚才呢,我们这边说了我们的resource manager,现在呢,我们根据指令在某个node manager当中去启动application case master,我们这里走的是它的一个进程,所以呢,我们这里直接拷贝啊,同学们来拷贝,拷贝以后,因为走的是进程嘛,那所以我们这里应该是有一个闷方法的,这个没问题吧,诶看源码要把一些基本的语法思路呢给他考虑清楚啊,那么既然是个进程,他一定得有个闷方法,那么闷方法就是静态的,这种操作一般都是在半生对象当中点开,点开以后这就是我们的OB master,咱们找到它的main方法不就在这个位置吗?那好了,我们一块儿来看一看,哦,对了,既然是一个main方法的话,那么我们在这里面是不是应该有对应的一个节点操作呢?所以啊,我们在这个地方同学们看啊,我们给它来一个。放过来在这里啊,咱们放过来放到这边,然后呢,给它拉开啊拉开嗯,拉开以后呢,我们这里为了让大家看着舒服一些,我这里写上啊,嗯,咱们叫application,咱们的master啊,咱们就叫它了,好,然后呢,给它反过来,诶,这是我们的application master。
01:15
呃,这里呢,我给它标识上一个绿色吧,啊,咱们标识上一个绿色。好,那么我们的application matter是一个我们的进程啊,它是一个进程,那这个进程当中我们看他做了什么事情呢?首先问方法,然后呢,它这里面有一个叫applicationlic master argument,它会把咱们的命令行参数给它做一个封装,我们来点开,点开以后这个叫pass啊,那我们这里其实就是一个解析参数的意思,那么它的解析参数啊,其实你会发现,你看它就用了模式匹配当中我们这里的这个东西,杠杠class,那这个杠杠class其实不是还是我们左边的这个内容嘛,同学们看我们左边的这个动作不就是杠杠class嘛,它一直在传,但一直没有用上,对不对?所以啊,咱们在现在的这个位置,这个杠杠class其实还是有的啊,好,那么我们回过头来继续咱们后退,后退以后咱们来往下走,下面呢,有一个咱们这个叫不说了啊,咱们接着往下,呃,下面这个地方再去拗了一个盐的configuration,然后呢,这边去拗了一个叫application。
02:21
他把咱们当前的那个类的对象创建出来了,我点一下看看都里面都有东什么东西啊,点开点开以后我看看确认一下,好像里面也没有什么东西,什么类加载器之类的,对不对?诶大家看有这么一个东西叫做雅n RM client,这啥意思啊,就意味着在咱们的这个application matter当中有一个叫雅n RM client,那这个呢,我们就得给大家在里面稍微画一下了啊来咱们拷贝。拷贝以后呢,把这个呢,我们拿过来啊,拿过来有这么一个东西,这个我们给它起个名啊,咱们拷贝放的过来好嗯,然后呢,给它用一个别的颜色吧,咱们给它一个紫色好不好,诶好了,那这个干啥用的呢?对不对,我们现在就稍微的咱们分析一下啊呃,这个呢,我们叫盐RM点点完以后大家看这个能看懂吗?这个叫am,叫RMAM就是application matter r m就是resource manager,说的简单点呢,是不是意味着是我们的。
03:24
Obation matter和我们resource manager之间的一个客户端,那不就是我们的OB matter连接resource的客户端吗?好了,咱们后。后退以后,那我们基本上这个也就差不多了,再往这看,那这个master呢,我们后点。它后面呢,会有一个叫做run啊,有一个叫做run run方法是吧,我们点一下run运行,运行之后往下,下面呢,是一些我们的配置,这个咱不管它,咱们接着往下,然后下面呢,会有什么什么东西呢,挨在这儿叫做if。如果是集群模式的话,那咱们当前讲的不就是集群模式吗?它就会有一个叫run driver,所以拷贝拷贝以后同学们看啊,在咱们的这个地方,咱们来往下走,嗯,在哪呢?在这儿吧,哎,在这啊。
04:12
有一个叫做run driver,这个run driver呢,它是我们的application master当中的有一个叫run driver就是它了啊好,那我们现在看看他的干嘛啊,其实我们看到这个名称是不是感觉会更加熟悉啊,同学们,因为咱们前面讲了一大堆,其实没有涉及到咱们的核心的对象,比方说driver啊,Ex没有看到,但是这里多多少少出现了一个driver,对不对,诶就是这个意思啊,所以呢,我们这里呢,看到了一个咱们比较熟悉的一个概念了。好,那我们就点它一下,点点完以后这边有个叫driver,然后呢,我们往下,下面呢,有一个叫start application,叫启动用户的应用程序。然后呢,他起了个名叫user class thread叫线程,这个不懂啥意思,咱们一会儿再说啊,咱们接着往下,往下呢,他这边有一个叫thad us.wait result,这个是什么意思,给大家简单解释一下,它的这个地方是现成的主摄功能,它会等待,等待什么呢?等待一个结果,等待结果,等待的其实就是Spark contest的结果,就是你的上下文的环境对象。
05:24
什么意思啊,就意味着同学们看啊,当我们的程序走到run driver的时候,他这边会启动一个应用程序,然后呢,在这会等着,等谁呀,等一个上下文的环境对象,所以呢,就意味着我们在这一步当中,他一定要想办法把环境对象给他准备好,他才能继续往下走,否则你在等待的话,你这边什么都不做就肯定不行,所以啊,这个方法就尤其重要了,所以来咱们拿过来啊,这个顾名思义啊,它在启动我们叫做用户咱们的啊应用程序。
06:00
好了,那我们现在看到这儿以后呢,这么到底在干嘛呢?我们来点一下,点点完以后大家可以看到在咱们当前的位置,它用到了一个类加载器,这个类加载器它会加载一个这个类的类来自于叫u class,那这个类是什么类呀?我们点一下点点完以后,这是一个叫argument的一个参数类,然后呢,我们去搜索一下,搜索之后你会发现它就来自于那个杠杠class。所以说我们前面画图的时候,这个杠杠class在咱们当前的这个位置就要用上了,所以啊,我的箭头同学们看我的箭头咱们拿过来,我们的这个杠杠class,就是它需要在咱们这儿用一下。所以啊,把箭头拿过来要用一下,他拿它用什么呢?诶,咱们接着往下看啊,咱们后退后退后退到这个位置以后,有个叫get method,它要从你指定的类当中去找到它的main方法,但是找到main方法以后并没有什么用途,咱们接着往下,往下有一个叫new th,然后呢,后面会有个叫start,叫启动线程。
07:13
但是大家有没有发现,这个现成的名字叫做driver。诶,有没有发现这个现象啊,同学们,所以我们在当前的位置,咱们给大家把这个画上啊,来拷贝,拷贝以后给大家把颜色区分开,这个呢,黄色咱们就是叫driver啊,它就是一个我们的就是它了啊,那么这个黄色呢,就是一个我们的线程,所以我们就是根据这个东西啊,根据我们的18个派这样的杠杠class,然后在这边有个线程,这个线程当中会怎么办?它会反射创建,所以同学们看在这个我们的里面,我们还应该再加一点东西来,嗯。所以把这个呢,我们拷贝啊,拷贝放到咱们这个地方,咱们改一下名啊,咱们叫做Spark contest,把这个环境对象应该给它稍微的放到这边啊来放到这边。
08:12
嗯,好了,我觉得这么画是不是就可以了呢?用一个红色吧,表示比较重要的一个含义啊,就是driver当中有一个这个Spark contest就是它了,嗯,好,那么大家看一下我们自己的那个程序当中,它就会有一个什么我们的诶那个方法,那方法它启动之后是不是应该执行那个wrong啊,所以这个run方法就会执行,执行以后它就判断你的那个main方法是不是静态的,他说了如果不是静态的话,会有一个error,那如果是静态的话,它会invoke,就是调用的意思,调用你的那个main方法。哎,老师啊,那如果咱们这个要不是Spark派,是咱们自己的word count呢,那不就等同于执行了你的word count吗?所以啊,同学们记住了,在我们的第三步的这个位置啊,来我们这写上吧,嗯。
09:01
这个应该是我们的application master,它根据我们的参数来启动这个driver的线程,所以我们这里呢,给它用一个三啊,咱们写上一个三,咱们写个三干嘛呢?我们的am啊,来根据我们的啊,来根据我们的参数来启动咱们叫driver的线程。啊,Driver的线程啊,并我们叫初始化咱们的Spark contest,这个非常重要啊,非常重要,嗯,好了,那么然后呢,给它放到咱们的这个位置啊,这是我们的第三步,那么恰恰因为你会初始化Spark,大家看一下啊,咱们的程序咱们随便打开一个点开,如果现在执行的是你的程序的话,那咱们这里面就会有我们的word count了,所以咱们打开,打开以后你的main方法就会被执行,执行以后这个地方不就在初始化咱们的这个环境吗?那么当你的环境初始化完成以后,我们的整个操作就可以继续往下走了,那么大家可以看到在咱们刚才的这个地方来,咱们后退啊,啊,也别后退了,咱们这里直接去搜索来搜索啊,搜索之后,大家可以看到在这个位置上,他就等待成功就可以继续往下走了,OK,咱们先说到这里。
我来说两句