00:00
呃,好了,各位同学,那说了这么多,那接下来终于可以开始去部署have on SPA环境了,那部署have on SPA环境了,我们首先需要先保证咱们的have是可以用的,你们都说你have还有问题呢,对吧?OK,那所以咱接下来需要做的一个工作呢,就是先去测试一下咱们每个同学的have是不是正常的,是不是可用的,OK啊,那在这儿呢,我已经把hi度提起来了,来,我S靠GPS一下啊,Hi度我已经起来了,那接下来我是就可以直接测试have来了,对吧?那怎么测嗨呢,你就打开have的客户端,往里边呢,随便执行一条搜索语句能成功是不是就没问题啊,对吧?啊,比如说在这儿呢,我就直接启动have客户端,OK,那这时候可能有都会想起来,诶,我在启动have客户端之前,是不是应该启动have的两个服务啊,是不是这样的。哎,那哪两个类,一个是ma store,还有一个是什么,还有一个是have操to对吧?诶我不起那两个服务,我的have的客户端,我能不能打开,能不能正常使用也是可以的啊,你比如说现在呢,我这是不是已经打开了,对吧?完之后呢,比如说我实实行一个show data BAS show database,然后直接回车,你会发现我这个数据库是不是能查出来啊对吧?那理论说我这儿应该没有太大问题,我的have应该是能用的,但是有些同学你在自己去操作的时候,你可能会遇到一个情况,对吧,你不起那两个服务,我的have客户端我就用不了,有没有可能有这种情况啊。
01:19
有对吧,诶那这时候就涉及到一个问题了啊,就是我这两个服务到底什么时候可以不起,什么时候必须得起呢。诶,这个我给大家简单的,呃,简单的解释一下啊,我这个客户端没问题,我就先退出了啊好,那么就给大家说明一下,就是have当中那俩服务到底什么时候必须得洗,什么时候可以不洗,首先咱们先说have so to俩服,一个是have,一个是ma star,对吧?先说have so have so to,他什么时候必须得洗。什时B得型,什么时候B得写,咱得知道汉so是干什么用的,对吧?它是干啥用的?对,它其实就是用来提供一个JDPC接口,对吧?让我们的一些客户端是不是通过JDBC去访问have啊,对不对?比如说B烂客户端,它采用的协议是不是就是GDPC协议啊,对吧?那你要想用B烂客户端去访问have,那你就得起have,有to就得起,是这样的。那换句话说,如果我不用JDBC协议去连接这个have,那我是不是就可以不起have to,对吧?所以have to这个很简单,他们应该是能理解的。那接下来我们再来思考一下这个mato mato咱们什么时候可以起,什么时候可以不起。
02:22
卖了四套服,什么时候可以,什么时候可以补齐什么什么不齐。啊。嗯,这个其实很简单啊,就是MAS store,首先咱们也得先知道它是干什么用的对不对,它是干什么用的?对,那MAS store它是不是会去连接买circle,然后给我们提供什么?对,给我们提供一个原数据服务,对吧?也就是MAS store呢,也会提供各种各样的接口,然后呢,我们能够从他在相应的接口当中获取相应的原数据,没问题吧,是这样的啊好,那大家都知道我们这个比如说have客户端对吧,我去执行一条SQ的时候,它肯定是要拿到相应的语言数据的吧,这个为什么?其实很简单,比如说举个例子,我在看客户端里边,我写一条circle select星from某一张表,那理论上这个circle索L语句最终会去哪呢?会去我们的HDF,是不是查这个表的文件啊,对吧,那他怎么知道这个表在哪呢?他是不是得去访问一下原数据,原数据里边是不是存储了每个表到每个路径的一个映射关系,对吧?OK,那所以说需要拿到原数据再去访问相应的这个路径下的文件,是这样的啊,那所以说我们客户端是需要拿到原数据的,是需要获取原数据信息的。
03:32
好,那客户端获取原数据信息的方式,其实嗯大致的分可以分为这样的两类,一类呢,是通过一个什么,是通过这个MAS star去进行获取,还有一类呢,是是怎么做呢?就是相当于是这个MAS star啊这个客户端呢,是能够直接去访问买circle这个这个数据库的啊有这样的两种方式,一种是通过masar服务,那一种呢,是直接访问买circle各OK啊那既然有这样两种情况,那是不是这个MAS star就有些情况下就得起,有情况就不用起来,对吧?什么时候起呢?哎,你你想通过max访问,那你的ma是不是就得起对吧?那我不想通过ma,我想让他直接访问买了,那你是不是就不用起了?哎,就是这样的,好,那现在问一下大家,我这个客户端是通过MAS store获取原数据,还是直接连接买S获取原据?这个由什么决定?
04:21
这个取决于什么,取决于咱们自己的配置吧,不对,你看你怎么配的呗,对吧,你要是想你你通过你自己的配置对吧,你让他去防M,那他就访问买对吧,你通过你这的配置,你让他买访问买,那是不是就访问买对吧?好,那通过哪个配置参数了,哪个配置参数能决定这个事了。哎,应该有一个参数,大家可能已经忘记了,这个肯定配过啊,来我们找到have,我们进到have的目录,那这里边有一个have default XL,这里边是存储have当中的一些默认参数啊,对吧?好,那咱们现在把这个参数打开,呃,这个配置文件打开,打开之后呢,咱们找一个这样的参数啊,叫做呃,Ma到点uri,来大家看一下这个参数就是它。
05:02
诶,实际上就是决定我们这客户端采用哪种方式去获取原数据的参数,就是它,哎叫做have.mato uri,那这个参数你后边你需要给他配一个什么内容啊,正常要配的话,你是不是给他配上一个ma store的地址啊,对吧?那这个参数是给谁用的呀,其实就是给咱们客户端用的吧,对不对,你给你客户端你配上一个这样的参数,好,那你的客户端启动之后,它是不是就会去从这个参数指向的地址去获取出去,对不对,那如果你客户端没配这个参数,那他是不是就不会去访问他了,现在就去哪了,他是不是就直接去访问买S克呀,对吧?诶就是这样的一个逻辑啊,OK,那所以说呃,那你的还的客户端对吧,到底是通过哪种方式获取原数据的,是不是就由那个参数决定对吧?加上它就是ma,不加就是访问S啊,OK啊,那我这儿有没有加上那个参数呢?我的have set当中实际上是没有那个参数的uri,我搜一下啊啊,你会发现是没有的对吧?OK,那就所以说我刚才是不是就可以直接启动have的客户端了,对吧?那大家那块。
06:03
可以根据自己的实际的配置情况去选择相应的这个方式,这个大家一定要理解一下啊,好了,那这个完成之后,我把视频停一下。呃,来各位同学大家再坚持一下啊,那下面呢,我们就正式开始部置或者是部署这个have one2的环境了,那首先我现在已经证明have是没问题的了,那接下来咱们要干啥呀?接下来是不是咱们就可以开始去配置这个或者是部署Spark了呀,对吧?啊然后呢,在部署Spark之前,我需要给大家简单的说明一下啊,就是大家现在这个采集项目的集群上,有些同学是不是可能已经装上s Spark呀,对不对,为啥?因为有这样一个情况,就是之前咱们是先学的采集,又做的这,又学的s Spark对吧?那所以说呃,有些同学这个s Spark可能就是在采集项目的集群上面去学的,那有些同学呢,可能是单独又开了一套新的集群去学的s Spark,对吧?两种情况可能都有啊这样的啊,然后在这儿呢,我给大家简单的说明一下,这两种情况咱们怎么去做啊,如果说现在同学们大家的那个,呃,采集项目的集训上边已经有Spark了,OK,那这一步你就不用去做了,就不用再去单独的安装Spark了啊这样的,而且你那有Spark可能也不止一个,对吧,里论可能是不是装了好几个呀,对吧,里边有什么有什么Spark。
07:11
的,呃,Local模式,SPA stand alone,还有SPA雅安模式对吧?诶也可能好几个对吧,好几个,那这个没关系啊,那你这里边只需要用任意一个就够了,OK啊好,那这时候我们就得考虑一个问题,什么问题呢?我让have用哪个对吧,你这好几个,那have到底用哪个呢?啊这给大家解释一下啊,首先我们得先知道have是根据什么去找这个Spark的依赖的,大家都知道have得得去加载SPA依赖对吧?它根据什么去加载的呢?实际上呢,是根据一个环境变量去加载的,Have会根据Spark和后这个环境变量所指向的那个路径去加载它需要的SPA的炸包,哎,是这样的啊,那所以说一会儿那咱们是不是每个人都要去配置一个Spark home嘛,对吧?那像咱们大家同学现在这种情况,就是你三个Spark摆在这儿了,你是不是只需要让你的Spark home环境变量指向其中任意一个就行了呀,对吧,任一个就行,那都可以,为什么都可以呢?因为我要告诉大家是什么啊,就是咱们这三个Spark他们的区别是什么,区别是什么的配置是不一样的,对吧。
08:11
但是里边的炸包一样不一样是一样的对吧?而我们这个havewa Spark呢,诶have它只会去加载炸包,不加载配置文件,那所以说你这三个用谁都可以啊,这是大家需要注意的,那这种情况大就照这个去做就行啊,那你像像跟我这儿一样的对吧?就是我这个像集群当中现在还没有SPA,那没有的话就老老师装一个新的,那就完事了啊好,那咱们接下来呢,就继续往下进行,呃,那我这儿没有,所以我首先是不是得先去部署一个Spark啊对吧?那部署s Spark,那我们是不是得先拿到SPA的安装包对吧?好,那现在咱们去拿一下啊,我CD到OT software那完之后呢,我进到这个哪呢,进到这,诶我这已经有SPA了,对吧?Spark好,那大家观察,我这呢有两个安装包,那我先删一个啊RF-F,然后呢,把这个解压之后的先删掉啊,这个删掉好完了之后,删完之后大家注意观察,我这是不是拿到了两个SPA的安装包啊,对吧?然后呢,我给大家发的这个资料当中也是有两个SPA安装班的,这两个SPA安装班呢,我们简单的看一下分别是什么啊,来找到这个位置SPA那是不是有俩呀,对吧。
09:11
这俩他俩有啥区别?看一下有啥区别,一个是带有hi doop依赖的,对对,一个呢是不带有hi do依赖的,首先需要声明的是这两个安装包都是直接从SPA的官网上下载下来的,这个不是我们呃自己编译的,哎,这一点先稍微的注意一下啊,OK,好,那在这儿我们为什么一定要需要这样的两个SPA安卓包呢?诶,这个一会儿等我们用到的时候,我再逐个的给大家解释,那现在呢,我们先看第一个啊,这一个是什么,是带有诶这个hi do依赖的,对吧?OK,那现在我们是不是得部署一个Spark呀,对吧?那咱们部署的这个Spark就用谁呢?就用这个带有hide依赖的啊,是这样的,然后大家之前在学习have对SPA的时候,那大家装的那个Spark是不是也是带有hide依赖的,对吧?那也就现在咱们在five这台节点的本地装的跟之前大家装的是一样的,是一样的啊好,那现在我们就先把第一个给它解压一下,二杠CSVF,然后呢,我们找到这个带有hi度1I的安,然后呢,给这压到哪呢?杠达C到OD model好解压过去,找完之后呢,我们进到OD,进到model,好,那现在呢,我们需要做一个操作,就是把它的这个哎文件名给它改一下,东名改一下,嗯,就只保留SPA就行了啊好了,那SPA现在就有了,有了之后我怎样能让have找到它需要的依赖呢?是不是得去配置一个SPA home的环境变量了,对吧,好,那咱现在需要的做的工作呢,就是把它打开完了之后呢,我们直接呃编辑一下,那当然这里边我实际上也已经有了这个SPA的home的环原变量了,对吧,这边我就不用再重复的配置了啊那玩意大家如果是新加上的,你需要怎么做,你是不需要去给它source一下,对吧?啊这个一定要注意。
10:47
呃,然后呢,再提醒一下大家啊,就是如果你基因当中已经有那三个Spark了,那你这样的这个Spark home只需要是不是指向其中的任意一个就行了呀,对吧?这块不要直接复制粘贴,要记得改一下啊,行了,那这个完成之后我们继续往下走,那下边呢,就是所有同学都得去做的了啊,下边我们要做什么工作呢?首先我们需要先在have当中去创建一个Spark的配置文件啊,注意是在哪呢?是在have的。com目录下边去添加一个Spark default.com这样的一个文件,诶,这个文件大家有没有印象?Spark defa.com这个文件有印象吧?这是谁的配置文件?这是Spark的配置文件对吧?OK,那在这个文件里边我们能配置一些什么东西啊?
11:28
能是不是能配置一些与应用,也就是与我们提交的这个计算任务相关的一些参数啊,对吧?啊,那比如说一些什么master啊啊,或者什么driver的内存与Q内存等等,是不是可以在这里边配养对吧?啊是这样的,然后大家都知道我们再去提交一个SPA任务的时候,像我们刚刚提到的那些参数是不是有好几种配置方式啊,对吧,至少有三种,哪三种呢?比如说第一种我可以我我可以在代码里写死对吧?没问题吧,比如说我写SPA任务对吧?啊,我我可以在代码里边指定我的master等等等,甚是不是可以在代码里边写词对吧?OK,还可以在哪还呢?
12:00
还可以在我们,哎写完代码之后,对吧,我给他打包对不对,那打包完之后,我们是不是得使用一个Spark submit去提交这个任务啊,对吧?你在提交任务任务的时候是不是也可以传参对吧?Spark杠杠master等等是不是也可以传参呀,对吧?诶这也是一种方式,那还有一种方式就是什么呢?是不是就是在这样的一个Spark def comfort的配置文件里边去填这些参数,对吧?那如果代码里没写完了之后呢?诶提交任务的时候也没传参,那是不是他就会去使用咱们这个文件里边的配置参数了,对吧?OK,是这样的啊,那这边呢,我们要做的工作就是啥呢?就是在have当中去创建一个这样的Spark配置文件,那这样一来,那将来我们在这个highone SPA这个环境当中,我们去执行一个circle,最终它实际上也是要提交一个Spark任务,对吧,那是不是就可以用我们此处配置这些配置的这些参数来呀,对吧?这个大家理解一下行了,好,那接下来呢,我们去把这个文件给它创建出来,好,那现在呢,我们呃是在S的这个康复目录下面创建的,这是一个新文件,之后呢,我们把这几个必要。
13:01
参数给它加进来,CTRLC拿过来之后呢,放在这个位置,好,各位同学,我们简单的看一看这几个参数都是啥啊,首先第一个就是Spark master,咱们这是不是写的是雅A呀,对吧?相当于我们现在这个high王Spark用的是Spark哪种模式,是不是就是雅安模式啊对吧?应该是很好理解的,接下来往下走,下边这一对参数大家看能不能看懂,是不是s Spark event love inable啊对吧?这个参数干什么用的来着,是不是启用s Spark当中的那个就是运行的这个任务的日志记录功能啊,对吧啊对吧,OK,那玩哥你只要把它设成处,那OK,我们SPA的每一个运行的计算任务,那它都会把日志是不是记录下来,对吧?那记录在什么地方呢?是不是记录在HDFS一个路径上啊,对吧?这个路径由谁指定,是不是由以log d指令啊对吧?OK,好,后边呢,你需要去填写一个诶HDFS路径,然后要注意这个HDFS路径必须得怎么样才行提前存在对吧?所以一会咱们得自己创建一下啊OK,然后大家再去配这个参数的时候呢,一定要保证此处的主机名和端口号跟自己那个位置是不是得保持一致啊对吧,跟哪一样就行。
14:05
跟这儿一样,是不是就完事儿了,对吧?一定要一致,这个一定要注意啊,行,那它完成之后我们继续往下看,那这儿呢,我们还需要去配置一个Spark memory和spark.memory这是配置什么呀?十就是driver和ex的内存啊,对吧?注意在这儿呢,我们其实配置的比较小啊,我们只各自给了一个G啊,在这儿呢,其实生产当中我们需要给大一点,你至少需要给个445个G,对吧,至少四个G啊,是这样的,在这儿呢,我们只给一个G是为什么呢?是因为咱们现在这个虚拟机环境下,是不是内存太少了呀,对吧?如果我们一个ex一个driver就给他四个G的内存,那是不是我们整个集群也起不了几个ex,起不了几个driver,对吧?嗯,是这样的,那那也就会导致我们这个集群的并发度会下降,那当然呢,呃,实际上你给他四个G的内存,咱们也用不了那么多,因为我们自己模拟生成的数据也没那么多,对吧?那所以说一个G咱们就比较合适啊,在这儿呢,我们就都给一个G就完事了,必要的参数咱们暂时就先配这么多,好,那这个完成之后我们继续往下进行,那下边我们要做的一个非常关键的工作就是干啥呢?
15:05
是不是咱们得先把这个HDFM这个路径给它创建出来,对吧,要不然一会儿的话,你这块启动它就会报错啊,可RC咱们拿过来,我们把这个路径先提前的创建出来好了,各位同学,那截止到现在呢,呃,我们这个这个配置文件,咱们这块呢,就算是准备好了,准备好之后我们接下来呢,还需要去再做一个工作啊,这个工作是干什么呢?呃,可能这这节课时间有点长了,要不咱们先下午休息会儿吧啊,咱们就下节课再继续好吧,啊,我这儿停一下吧。那好了,同学们,那咱们继续接上节课啊,然后呢,往下部署部署这部署,呃,部署这个汉王SPA这个环境啊,那下面我们要做一个什么工作呢?是向HDFS上传Spark纯净版的炸包。诶,看到这个标题之后,大家可能会有俩疑问,第一个疑问呢,就是我们为什么还要向HDFS上面传一个SPA的大包,对吧?那另一个疑问就是啥呢?我传,我为什么一定要传纯净版的呢?
16:03
没问题吧,对吧?OK,那现在先解决第一个问题啊,就是咱现在为什么要向HDFS上传一个Spark的炸包,来大家想一想,你说我现在啊,这是不是已经有have了,对不对?我这儿是不是已经有Spark了啊完之后呢,我已经通过环境变量Spark hope是不是指向了Spark了?那理论上我们have只要一启动,是不是就能根据这个SPA home的环境变量找到它所预呃,它所需要的那个SPA依赖了,对吧?好,那我为什么还要向SPA,呃,向HDFS传一份这个SPA的依赖呢?为什么呢?诶,其实这个呢,哎,我们得从什么角度去考虑呢?我们得从就是呃汉王Spark去提交任务的这个流程这个角度去考虑,OK,好,那现在咱们来思考一个问题,同学们,就是我们现在啊,呃使用的这个呃就是汉王Spark,其实说白了也是用的Spark对吧?那你使用的Spark是什么模式呢?是什么模式啊,是雅安模式对不对?雅安模式也就是说我们将来对吧,Have拿到一个circle之后对不对,他会怎么做,它会解析,然后呢,去生成Spark代码,然后会自动打弯,打完包之后,它其实说白了have就是帮我们执行的一个Spark me这样一个命令,对吧?然后那时候把任务提交到了我们的雅上面,对好,那大家简单的回忆一下,我们往雅安上边去提交任务的流程是什么样的啊,你不管是提交MR任务还是提交SPA任务,是不是都是类似的一个流程啊,对吧?好,那咱们回忆一下这个大概的流程是什么样的?首先那我们需要先干啥,是不是先请求这个resource manager啊,对吧?啊,那需要跟他。
17:35
请求一部分的这个资源,那resource manager接受到请求之后呢,他会怎么样啊,会给我们分配相应的这个资源,对吧?OK,那这个资源其实说白了,咱们前面说的是什么container container对吧?实际上每一个container其实说白了都是哪的呀,都是位于说node manner上的这个一一个紫禁城啊,对吧,啊,是这样的,OK,那完之后呢,我们这儿呢,找到这个,呃,Not me not me,这都是一个一个的NM。
18:01
NMNM,也就是将来呢,我们所有的这个任务,对吧?你甭管提交了MR还是SPA,它是不是都是在noe manager上面去运行的,没问题吧?OK,那大家想一想,你说note manager要想去运行我们这提交的SPA任务,或者是我们提交的这个任务,它得有什么才行,它得有我们这个任务所需的依赖,是不是才可以没问题吧?那所以说我们在申请到资源之后,我们本地的客户端它通常会怎么样呢?是不是会把我们这个任务所需要的炸包,所需要的一些配置文件是不是上传到哪儿,是不是它会上传到HDFS的一个临时路径上啊,对吧,他为什么要上传到那去?其实很简单,就是为了供谁去使用,是不是就是为了供node manager使用对吧?每个no manager是不是都能够访问到咱们的HDFS对吧?那他们就会去HDFS上拉取这个任务所需要的这个包等等等等,OK,那拉取过来之后,那我这个note manager是不是就可以去跑这个咱们的程序了呀,对吧?诶是这样的,这一点咱们大家要稍微的理解一下好了,那接下来咱们就继续往下思考啊,那我们提交MA6或者是提交这个SPA任务,我是不是正常的情况下,每次提交一个任务都要往HDFS上上传这样的一份账网啊。
19:14
是每次提交任务是不是都要往上传对吧?那对应的我们现在这个亥王Spark上面来,我每执行一个亥王SPA的circle,是不是都要往HDFS上上传一个Spark的这个依赖啊,对吧?那你要想你要想你要知道啊,Spark的依赖是不是非常多,它有一大堆的账,对吧?那我每次提交任务我都要往往哪儿往HDR传一份账包,每次提交都要传上,这个是不是显然是不太高效的呀,对吧?那所以在这儿我们实际上是有一个优化手段的,注意这个优化手段并不是have提供的,而是谁提供的呢?是Spark提供的啊,也就是说我单纯的Spark任务也可以这样去优化,对吧?这是啥意思啊?就假如说我们现在跟have一点关系没有,我就用Spark submit去提交have的,呃,去提交SPA的任务对吧,就是你用Spark submit,你往雅安上面提交SPA任务,是不是也是每次提交都要往上面传一份SPA的账包,对吧?那所以SPA当中呢,它是有这样的一个优化条,优优化参数的一个优化手段,怎么优化呢?其实很简单,那就是怎么样我们。
20:15
提前在HDFS上边准备一份我们这个SPA包,对不对,然后呢,我们再在提交的那个任务上边,咱们配置一个参数,配什么参数呢?你得告诉他你那个smart的栅栏是不是在HDF那个路径才行啊,对吧?要不然你光放上去,那我这是不是还是找不着对吧?你得告诉这个任务,OK,那我们这个账包我提前给你放在哪了,那这样一来的话呢,他就不会说在每次提交任务都往上面提交,呃,去上传一份账包了,是这样的,那这就是我们往HDFS上边上传死弯和炸弯的原因,主要是为了优化一下,OK,那接下来咱继续往下思考,是不是还有另外一个问题啊,对吧,就是我们往H加边传,为什么要传那个纯净版的,对吧?我不传这个纯净版,我传那个带hi毒依赖的不行吗?哎,为什么要传纯净版这个其实大家可以想一想,这个也很简单啊,OK,首先纯净版跟非纯净版它俩的区别是不是就是差在hi度依赖上面呀,对吧?OK,那你想一想,我们这有必要让它带有hi doop依赖吗?没必要,为什么?你想将来咱们这些JA包是下载到哪去运行的,是不是下载到node manager上面去执行的,Node manager它所处的环境有没有hi do依赖?有啊,对吧?既然有,那我是不是就没必要再把这些hi do依赖重复的给它上传到HTFS了,你重复来上上去上去,那这个note是不是还得重复的下载下来,对吧,没必要,对吧?而且这里边还可能会存在一些隐患啊,什么隐患呢?就是兼容性问题,比如举个例子,假如说我现在嗨,这个Spark里边带有的hi度不依赖跟我们集群上面运行的hi度,它这个版本不兼容,它是冲突的,那是不是还可能会出现兼容性问题啊,对吧,是这样的,所以说不管从哪个角度考虑呢,我们这儿呢船诶纯净版的是更加合适的,诶这一点大家稍微的理解一下就行了啊,所以现在呢,我们就。
22:00
需要往HDFS上面去上传一份Spark的纯净版包啊啊,那现在咱们上传到哪个路径呢?呃,这个其实随便你找随便一个路径就行了,那咱们现在要做的第一个工作就是先得拿到咱们这个纯码的弯啊,啊在哪呢?进到OD soft,进到我刚才那个Spark,那在这儿呢,我们给它解压一下套杠ZX这个直接解压到当前路径就行,这个无所谓啊,找到SSPA克3.0,然后再找谁应该是V的hi度啊,对吧?是不带度比带的啊,直接解压好,解压之后LL我们进到这个解压的目录,进来之后大家来看啊,这是不是有一个JA啊,对吧?这里边存放的是不是就是SPA所有的JA包,对吧?咱们进去看一下啊,没问题吧?好,那咱们接下来需要做的工作应该是什么呀?是不是给他上传到HTS对吧?那传到哪个路径呢?看一下文档啊呃,他这是让我们上传到了这个SPA jas这个路径了,对吧?那咱们就按照它的来啊来,我们把这个路径先提前转出来,那之后呢,我们是不是得执行一个嗨度吧,FS杠杠什么杠库的对吧?然后直接点杠星是不是就完事了,那这样一来就能把所有的大包都上传到HDFS这个路径上了,好,那这时候我们就稍微的等一会儿就行了啊好,那等它传完之后,那咱接下来需要干什么呢?
23:09
那现在你说接下来我们是不是肯定得配置一个参数才行,配一个什么参数。是不是得告诉氦王SPA这个环境,我的炸包放到哪个路径上来呀,对吧?是这样的,所以在这呢,我们需要去配置这样一个参数,好那接下来咱们继续往进行,下边我们在哪配这个参数呢?是在have set当中去配置相应的参数了,所以咱接下来呢,需要找到have参塔啊,我这个账牌已经查完了啊,然后我们进到OBD,进到model,进到I have完之后呢,我们进到com,那进来之后我们打开这个have,打开之后呢,我们在这里边呢,需要去配置一系列的参数,好那现在呢,我们把这个参数先拿过来,其实一共就俩啊,这一系列就是俩来拿过来,拿来之后呢,我们放在这个位置啊,好,那现在呢,我们看一下这俩参数分别是啥,先看第一个,呃,第一个就是spark.yeah and点这其实就是我刚刚给大家所说的,是不是指定我们上传到HS那个Spark包的路径的一个参数,对吧?好,那完之后往下翻,那这个路径咱们不能随便写,这个是不是必须得跟刚才咱们自己上传的一个路径保持一致啊,对吧?呃,然后呢,还是有一点要注意,就是这个主机名和断码,这个必须跟咱们自己这个环境保持一致啊好,那接下来继续往下看。
24:15
那下边这个参数其实也就比较简单了啊,这个参数是啥呀?have.execution.engine这是什么呀?是不是就Spark对吧?那相当于我把这个眼擎是不是切到了SPA了对不对?OK,那我在这儿配置这个参数,这意味着什么?意味着将来我是不是只要打开哈有客户端,我走的就是SPA克引擎没问题吧?OK啊,那然后呢,如果我不在这儿配置,那我在哪儿呢?我打开还有客户端之后,我再去S这个参数行不行?也行,对吧,你要赛的话,是不是就是相当于是临时有效,在这个当前绘画是有效的,对吧?诶完了之后呢,言外之意就是什么呢?比如说我这儿呢,打开这个hi有客端了,我不想用这个随便引擎了,我能不能再给它切到这个mmr了,能你可以随意的切换,对吧?你想切到哪个,你是不是就set一下就完事了,对吧?诶这个可以随便切的啊,这个大家理解一下就行了,好了,那这个完成之后,Shift文字内,那这个配置文件咱们就配完了,OK,那截止到现在呢,我们这个high王SPA的环境其实就算是配置完毕了,好配完之后咱们紧接着就来做一下这个测试啊。
25:15
嗯,来吧,同学们,我们接下来呢,就可以去测试一下咱现在这个have王SPA的环境了,OK啊,那怎么去测呢?其实很简单,那我们是不是正常情况下,你打开have的客户端完了之后呢,你去跑一个需要走计算引擎的circle是不是就完事了,对吧?你不能上来直接执行一个select星,Select星不测不出来啊,对吧,它不走计算引擎嘛,对吧?哎,那在这儿呢,我们比如说跑一个音色的语句,那就OK了,OK,那在这儿呢,我需要先启动一个还有后端,当然各位同学啊,就是这个是自己的环境而定,如果你配置了那个什么mato u RA那个参数了,你现在是不是还得把那个ma store提起来,对吧,我这就不写了啊,直接打开开后端。好,打开之后啊,呃,细心的同学应该能够发现,就是你现在开启还有客户端跟你之前开启客户端还有客户端应该有一点点区别,不知道有没有发现啊,有没有发现了吗?哪有区别,实际上这个位置跟之前是有点区别的,就是之前你在开启客户还有客户端的时候,这儿实际上是会给你打印一个日志了,他会说什么呀?说have on Mr已经过时了,建议使用have onw,或者是还有on t对吧?哎,它正常这会有一条那样的日志,但是现在我们配上这个,呃,海王SPA这个引擎之后呢,它就不会再出现那种日志了啊,这个新型是能发现的啊,但这个无所谓啊好,那接下来咱们就开始做一下这个测试,怎么测呢?首先我们需要先去创建一张这个简单的表,来看一下这张表create table student是不是就两字段呀,对吧,非常简单,我直接回车,好,那这个表建好了,建好之后我们是不是只需要给他来一个音色的就完事了,对吧?来音刺的肯定C拿过来,咱们给他跑一下,那我直接回车,嗯,好,那现在我。
26:53
等着就行了,对吧,如果他能正确的插入进去,而且那他的这个计算任务的类型也是Spark,是不是就说明咱们的环境是OK的呀,对吧?好,那现在咱们稍微等一会,哎,在等的过程当中,很多同学就会有疑问了,啊,这个这么慢呢,对吧?那理论上咱们之所以给have切换这个SPA引擎就是为了干啥,是不是就为了提速啊对吧?那我现在我就跑这么一条小三口,这么半天了还没插入进去呢,这不是跟咱们想的不太不太一样啊对吧?OK,那这是为什么呢?咱们先等他跑完看看能不能成功啊,能成功我再给大家解释啊,OK,现在正在已经开始跑了,对吧?现在说跟之前是有点区别的对吧?OK,你注意观察他出现一个什么样的概念,是不是TE这对吧,在这这儿其实对应的就是什么呀,就是咱们那个,呃,是不是那个我们SPA当中的一个sta划分的一个概念,对吧?好OK,那从这儿我们能侧面的反应过来,这应该现在已经是什么吧,已经是害王SPA的一个任务了,对吧,那说明咱们这环境应该是没问题的,好,那现在我们再回到最开始那个问题来,为啥这么慢对不对,那其实你。
27:53
刚才确实是慢啊,但是你注意观察,我现在再跑一条40条,比如说我这了再换一条啊直接走,你注意观察,这回还慢了,这回是不是就不慢了呀,对吧,这回非常快了啊,那我再再来一条,你比如说再来一个这个三对吧,直接回车,好他速度也是非常的快,对吧,完了之后稍微等一下啊,各种打我脸对吧?来,那现在呢,我们查一下这个数据啊,我们来一个select星from,刚才咱们这张表student对吧?来看一下这个数据有没有正确的插入呢?是插入了对吧?然后呢,我们大概能得到一个这样的规律啊,就这个氦王子外的环境呢,它有一个这样的特点,什么特点,我们在跑第一条SQL的时候,它比较慢,对不对,但是呢,我再跑后边的SQ,是不是要比第一次快多了呀,对吧,这个是为什么呢。
28:39
他为什么这样了呢?这个我需要给大解释一下了啊,那这个亥王Spark跟亥王R他们俩还是有非常大的区别的啊,现在呢,给大家解释一下,首先那不管是亥王S2还是汉氦王MR对吧?那都是干啥呢?是不是都会把我们三二号转成一个真正的计算任务啊对吧?那完之后呢,呃,在have on Mr这种环境下,它会把circle转成Mr map6任务对吧?那在SPA这个环下呢,会转成SPA的任务对吧?哎,但是呢,它俩还是有区别,什么区别?首先第一个就是我们have on Mr的环境下边,对吧,是一个circle转成一个map的job啊,是一个circle转成一个maps job,而在have王SPA的环境下是什么样的啊,是have的一个绘画对应一个Spark的job。
29:30
是一个绘画对应一个SPA job啊这际样什么意思呢?那我什么叫一个还有绘画,就是我打开还有客户端,然后呢,里边我跑一大堆的circle,甭管跑几个circle对吧?那他们实际上都是什么在一个Spark job里边去跑的,对不对,那当我呃这个把这个have的这个客户端关了之后,那我这个会话是不是才算是结束了呀,对吧,是这样的,也就是说一个绘画里边的多条circle,诶是对应一个Spark job的,是这样的啊OK,好,那现在呢,我们再来解释一下,就是为什么刚才咱们这这么慢,那后边呢就又快了,其实这么一回事,就是OK,你第一次去执行这个server的时候,那这个需要干什么呀,他是不是要需要需要去雅安上面申请相应的资源,对不对,申请资源之后呢,他是不是会拿到这个nono上面资源,对吧,拿到之后他需要启动什么东西,启动driver,启动ex,需要启动整个SPA的环境对吧?好启动完之后,那这第一条S执行完之后,大家想一想,你说我的driver会停吗?E会停吗?会吗?不会停的,对吧,刚才咱们说了。
30:31
因为在high one SPA的环境下边是一个绘画,是不是对应一个job呀,对吧?我的绘画没结束,那我的driver ex会停吗?就不会停对吧?那所以说我们再跑第二条思的时候,我们是不是就不用再去重新的申请资源,重新的启动专业Q了,对吧?那这样一来再跑思是不是就快了,对吧?诶,那这样一来的话,那咱们这个问题就算是解释清楚了,OK,各位同学,那接下来呢,咱们再来思考一个问题,我现在这个绘画有没有推。没退对吧?绘画没退出去,那我们那个Spark的那个任务是不是就没有结束,没结束那他的资源会释放吗?不会释放,那所以说理论上我们现在去查看雅安上面的这个应用界面,应该是能够看到这个具体的任务的,对吧?好,那咱们现在去看,因为我们是雅安模式嘛,对吧?来,我们现在打开嗨杜OP1038088,好,打开之后大家来看一下,这是不是有一个clu mettrix啊对吧,是不是我们集群的一些指标对吧?然后呢,你注意观察一下这个位置是不是apps running等于一啊对吧?说明现在正在有一个任务,呃,有一个任务正在运行,OK,那现在往下走,那这其实就是我们刚刚启动的这个have on SPA的任务,其实也有have one SPA,对吧?那我们这个application type是不是就是SPA类型的对吧?诶这块应该也是能够看到的,然后我们再重点往后看看这个位置,大家看啊,这是不是有一个progress对吧?这个指的是什么?是任务的进度对吧?OK,这个进度那有同学可能会认为,诶这是不是卡住了呀,其实没卡住,他这儿其实就是这样的啊,就是我们只要这个任务没结束,这个进度是不是就不会到。
31:57
头啊,对吧,啊,是这样的,因为我们现在资源没释放了,然后包括后边这个垂UI,现在是不是还是application master这样一个链接啊,对吧?那当我们这个任务结束之后,那这儿会发生什么样的变化,首先这个会到头,那这个呢,会变成啥history吧,因为已经结束了,是不是就该该追踪那个历史服务器的,呃,那个地址来对吧,这个一定要理解一下好了,那这个实际上就是我们现在这个任务的一个情况,OK,好,那现在问题来了,比如说我现在呢,想把这个任务结束,那我怎么结束它呢?
32:25
怎能怎样能把这个任务结束啊,其实这个方案就太多了啊,那首先第一个最直接的办法,我把have客户端退了,Have客户端已退,那这个job是不是就相当于结束了,那这个资源它是理论上就会释放了,对吧?诶,这是呃比较优雅的一种方式啊,那在这儿呢,我们还可以更呃就是呃粗暴一些对吧?那你还可以怎么办呢?你可以去把这个任务给它KO掉,对吧?那怎样去KO延延上的任务大家知道吗?怎么去KO?怎么去KO啊,其实很简单啊,那OK,注意观察我点一下这个前面的任务的ID,点点完之后注意观察左上角,这有一个啥,是有一个KFPK这样对吧,我现在点它一下,点点完之后他问我are you sure对吧?那那完之后呢,你要点确定,他就会给你kill掉了,那当然这块呢,我就暂时先不killo了啊,那还可以怎么killo了,你也可以用命令行去K,那OK,你比如说随便来到一个我们这个节点,你执行一个这样的命令,叫做雅安这个后边接一个APP啊,然后呢,后边杠list,这个雅安P-list能够,呃,能够查看哪些内容呢?能够查看咱们这个雅安当前正在运行的任务,你看这儿是不是就列出来了一条啊,对吧,这一条跟我们页面上看到的这一条是不是应该是一样的呀,对吧,一模一样的OK啊好,那完之后这是查看,那你在命令行其实也能K,怎么KO呢?就直接沿A,然后呢杠kill,然后呢你就把这个ID给他拿过来,直接一回车,哎,完之后他就kill掉了啊是这样的啊OK,那这个呢,我就不再演示怎么kill了啊,那这边呢,我就给大家把这个客户端给它退。
33:54
片直接溃了退出,那退出之后呢,我们再去眼上边查看一下这个页面,刷新注观察,那这个running的任务是不是就没有了,对吧?那下边注意观察这个资,这个呃,Progress是不是到头了,对吧?这个已经变成黑色资源也就释放了啊是这样的啊,OK,那这就是high one Spark这个环境的一个测试,大家一定要注意到have on Spark和have on Mr的一个区别,MR那边是什么,怎么来着,一个circle对应一个job对吧?而have on Spark这边是一个have的绘画对应一个Spark的照,哎,不是一个circle一个照了,哎,这个一定要注意啊,行,那完成之后视频我停一下。
34:31
呃,好,海王Spark,那咱们就算是测试通过了,没有问题了啊,那咱接下来呢,就来看一下这个雅安这个环境,咱们如何去进行配置,呃,雅安环境这边呢,其实我们要做的就只有一件事,就是啥事呢?来看一下标题,增加application master资源比例,呃,可能看到这个标题之后,大家不知道他说的是什么,对吧?OK啊,那在这儿呢,给大家简单的说一下啊呃,我们先把这段话读一下吧,这段话读一下这段话可能呃就是解释的要详细一点,咱们看一看能不能看懂啊他说了是容量调度器对每个资源队列,诶这个资源队列的概念大家还有印象吧?啊就是我们呃牙当中这个调度器是不是分为三种嘛,对吧?啊,分别是呃,First in first out对吧,还有一个是fair schedule啊,就是公平调度器对吧,还有一个capacity schedule,也就容量调度器对吧?好,那我们现在默认使用的是不是容量调度器啊,对吧?在容量和公平调度器当中,其实都有这个资源队列的概念,对吧?OK,那我们这一个集群里边呢,我可以划分。
35:31
单个资源队列,然后呢,我们的任务是不是可以选择提交到不同的资源队列当中呢?对吧?每个队列我可以分配一定比例的资源啊,是这样的啊,这个稍微的理解一下好了,那容量调度器做了一个什么操作呢?容量调度器会对每个资源队列当中同时运行的application master占用的资源进行限制,诶这个咱们怎么理解,比如举个例子啊,那假如现在呢,我这有一个资源队列里边呢,我是不是正常情况下会有呃,非常多的这个container啊,对吧?那么说每个contain我是不是可以运行一个task对吧?我可以运行一个APP master,我也可以运行一个Mac task,我也可以运行一个reduce task对吧?诶是这样的,好,那完之后呢,他这做了一个什么操作呢?它对我这个队列当中能够同时运行的APP master,这个这这样的一个资源进行了一个限制,而它限制了多少呢?10%啥意思也有,整个队列最多只能有10%的资源。
36:31
去跑AP master。哎,大家可以琢磨琢磨,你说他为啥要去做这个限制,他为啥要做这个限制。能不能想明白为什么他要对APP master占用的资源进行限制,哎,你其实这个你反过来想一想就行了,假定它不限制,你假定它不限制,不限制它可能会出现什么情况,那比如举个例子啊,假如说现在呢,我们这个资源目前是空闲的状态,里边什么任务都没跑,完了之后呢,我同一时刻向这个队列里边提交大量的计算任务,对不对,那我每一个计算任务对对吧,是不是首先都得掀起一个什么。
37:10
对,首先就得掀起一个AP master,对吧?那这个AUSS起下来之后,什么时候会停呢?是不是得等整个任务都结束,Map结束,Reduce结束,是不是才能停啊,对吧?OK啊,那假如我现在同时提交大量的这个任务,那每个任务都要有一个p master,那有没有可能出现这样的一个极端情况呢?P master把这个资源占满了,全是APP master了,要是全APP master之后,咱们这就会陷入一个僵局,对吧,没问题,OK,那为啥呢?我APP master我都停不了啊对吧?你要想停你得保证啥,你得保证map跑完,Reduce跑完对吧?但是我map reduce有资源跑没有啊对吧,没有跑那就都僵在这儿了对吧?啊,那这样一来肯定不是我们想看到的了,对吧?那所以说我们这个容量调度器呢,实际上是会对我们这个队列当中APP master所占用的资源进行限制的,默认就是限了10%啊,那实际上呢,在真实的生产环境当中,这个参数我们不用调整,那不用调整对不对,这个是没有任何问题的啊,但是呢,在咱们现在这个虚拟机环境。
38:11
咱们就得调一下这个是为什么呢?是因为是不是咱们这个整个虚拟机集群的资源太少了呀,对吧?啊是这样的,比如说那我现在这个雅安集群一共有多少内存呢。那从哪能看出来,刷新一下这个AP这个牙的页面完之后还是看这个class matrix啊,你往后走好的,那这我有一个什么是不是memory total一共就有12个G的内存啊,对吧?诶问一下大家这12个G的内存怎么来的,大家知道吗?是实际上是根据我们自己配置来的吧,对不对,我们实际上应在应该在每一台这个呃节点上面书都对hi度op做一个参数的配置啊对吧,哪个参数大家还记得,那咱们找一下啊来进到OBD model hi do吧,ETC hi do吧,对吧,然后打开应该是看谁看亚赛的吧,对吧?打开之后呢,我们找一下哪个参数应该是应该是不是这个往下走应该是这个参数吧,对不对,雅安note manager resource memory以兆为单位对吧?这个是不是就指的是每个note manager提供多少内存给雅安使用啊对吧,我这配置的是每个是不是提供四个G啊对吧,三个节点三次是不是正好12啊对吧,是这么来的,OK,也是,我们现在整个集群一共就有12个G的资源,那你12个G的资源,假如说你限定只能有10%的资源用来跑,跑谁跑那个AP master,那一个AP master,假如咱们现在就占一个G的内存,对不对,那我现在只能跑几个呀?是不是只能跑一个,我跑一个占10%,占一个G内存,我再。
39:37
跑一个数俩G就超过12的10%了呀,对不对,那也就是说我现在假如说提交一个这样的任务,我这个任务呢,需要一个container,需要去跑这个AP master,我需要比如说两个contain,呃,去跑这个麦克,需要一个这个container去跑radio萨,因为我只需要这么点资源,对不对?那我现在集群资源已经被占满了吗?没有吧,我是不可能还会空余很多的资源,但是我再往上提交还能提交吗?提交不上去了,为什么比为你再提交是不是就超过了AP master的那个资源上线了呀,对吧,你就提交不上去了,就会导致我们这个集群资源的利用不够充分啊,所以在这儿呢,我们为了保证让他充分的去利用这个集群资源,那我们需要怎么办呢?是不是把这个参数相应的调大一点就完事了,对吧?诶OK,那接下来呢,我们就去调整一下这个限制啊好,这个限制咱们在哪去调整呢?是在容量调度器的配置文件当中去调整的,容量调度器的配置文件是哪个大家还记得吧。
40:32
是不是这个呀,Capacityca.XML文件对不对?OK啊,大家之前在学习前面的基础课程的时候,有没有去给我们的雅安增加过队列呀,增加过吗?应该增加过吧,对吧?可能有同学已经忘了啊,OK,那其实当时增加队列是不是就用这个菜这个配置玩家去增加的对吧?好,我们现在进的OPT model,进到hi doop啊,然后呢,进到ETC hi doop之后呢,我们找到这个文件啊,叫做capacity,然后呢,这个schedule对吧?就是它对吧?好,那现在怎们给它打开,打开之后再找一下刚才咱们那个参数啊,不用找了,就在这儿呢,是就这个对吧?其实这个参数名字虽然长,但是你你基本上看一看它的名字,你就知道它啥意思了,你看是不是啊牙。
41:13
调度器是不是容量调度器啊,对吧?这个是什么?最大的am是是不是就是F是master对吧?然后呢,Resource就是资源对吧,Percent是不是就是比例啊对吧?就这意思啊好,默认是零点一百分之十,在这儿呢,我们直接给它调大点,调整800.8%,然后呢,Shift z,好,你给它调成0.8之后,咱需要需要需要做一个什么操作呀,是不是得给它分发一下对吧?XSYNC后边接上谁?哎是不是接上这个可pass sc就完事了,对吧?好,分发完之后,咱接下来需要做一个什么工作,是不是就是重启啊对吧?OK,在重启之前啊,我先给大家去看一个东西,看哪来咱们看这个位置啊,还是打开这个页面,打开页面之后呢,我们找到谁,找到schedule schedule,是不是就调度器啊,对吧,里边就会有咱们这个调度器的一些相关内容,来往下翻,咱们找谁就找这个位置,这个里边咱们存放的是什么,是application q q是不是就是咱们指的那个资源队列,对吧?好,那咱们现在有几个资源队列,大家来看。
42:09
这几个有一个q root,有一个q default,对吧?这是几个队列,实际上这就只有一个,就是呃,雅安当中我们这个资源队列,它是一个什么样的数据结构呢?是一个树形的数据结构,对吧?OK啊,那这个数据结构它是什么样的?首先它会有一个根节点,根节点下边是不是可能会有什么呀,会有它子节点对不对?OK,那完了之后子节点,子节点是不是也能再有它的子节点,对吧?OK,它是一个这样的树形结构,就是咱们去配的时候呢,也得按照这样的一个树形结构去配置好,那完了之后问一下大家啊,我们假如说这儿就有一个这样的树形结构的一个队列,那我现在能往里边提交任务的队列有几个?这是根节点对不对,那根节点能不能提交任务?能不能,那他能不能提交,他能不提交,诶,你要记住,就是雅安当中的这个队列呢,我们在提交任务的时候,只能往叶子节点去提交,只能往叶子节点去提交啊,是这样的啊好,那也是我现在是不是只能往这儿,还有这还有这啊对吧?大家知道什么叫做叶子节点吧?啊可以这么理解,就是没有子节点的节点,我们称之为叶节点,对吧?或者说你你把这个树啊,你要把它倒过来看,或者你把脑袋倒过去看也行啊,是这样的,那倒过来你就比较形象,就比较好理解了,怎么理解呢?你看啊,这个在最底下倒过去是不是最底下就是根呀,对吧?然后最上面的是不是就是叶子呀,对吧,这叫叶子叶列啊,是这样的啊OK,那这个东西呢,是我们提交任务的地方,其他的地方都不能提交,你看咱这虽然你看起来是两个一个入的一个defat,但其实怎么一个关系,入的是那个根节点的,然后它只有一个叶子节点,是不是就是这个default,我们能提交的对地方的只有这个default root没法提交,把这个理解一下啊好了,完之后我打开它之后,我们看一个什么东西呢?你点它点开之后,你能发现这里边是不是会有这个队列的。
43:54
各种各样的参数啊,对吧,这里边儿我们就看一个关键的参数,就是谁就是它。这是什么?Conig的max application master limit这目目前显示是不是还是10%啊对吧?好,那其实这个就是我们刚刚讲的那个资源限制那个参数了,对吧?好,那理论上我把雅安重启之后,它应该变成多少才行,得变成80才行,对吧?那现在我们把雅安停了,然后呢,再起看一看能不能生效啊来我们再执行一个这个SPA,然后看这个雅安点SH稍微的等一下啊,放心直接怎么了?
44:30
直接改APP master的大小,呃,你说改APP master所占用资源的大小是吗?呃,也行,你稍微的给它调小一点也行,但是没有改这个直接啊,咱就改这个吧,统一改这个就得了啊好,那现在呢,我们刷新一下啊,刷新一下呃,完之后大家来看一下,这边我们拿过来,拿来之后呢,我们看一下这里边有没有变成80%已经有了对吧?那就说明咱这已经生效了啊这样的啊,就是咱咱这之所以要调整这个参数呢,就是为了保证我们这个集群的资源能够被充分的利用起来,对不对,那现在呢,我是不是就不会再出现刚才那种情况,只跑一个任务,资源空闲着,我再往上提交,提交不上去的情况下,对吧?那现在我就能同时跑更多的计算任务了,这个大家理解一下啊,行了,那这个参数咱们到现在为止就完事了,生产环境当中这个参数我们可以不调啊。
我来说两句