00:00
呃,来,各位同学,那咱接着往下进行,呃,那下边呢,我们要进行的这个工作就是什么呢?就是去准备一下咱这个数据仓库当中的这个,呃,这个海王SPA的环境好,那咱们接下来继续往下进行,呃,那在我们去布置之前呢,这这有一个这个小问题需要去说明一下,就是什么问题呢?就是海王SPA的一个兼容性问题,诶,OK啊,那大家琢磨琢磨,就是这个兼容性问题我们之前一直提到,对吧?大家在学习前面的这个框架的时候,也会提到这个兼容性问题,对吧?大家有没有想过,到底兼容性问题是怎么出现的,那出现之后我们又应该如何解决它呢?这个大家之前有没有想过呀?没没想过,那现在想一想,兼容性问题是怎么出现的啊,就什么时候才会出现兼容性问题。那至少OK,你比如说我现在要搭建一个环境,对吧?这两这一,呃,这个环境当中呢,我至少需要用到两个组件或两个框架,是不是才可能出现兼容性问题啊,对吧?好,那这个兼容问题怎么出现的呢?诶在这儿呢,我给大家系统的去说一下这个兼容性问题啊,然后再给大家说一下,就是遇到类似的问题,咱们到底怎么去解决啊,OK,那在这儿我们就以咱们当前的这个任务high one Spark这个环境为例去说明,OK,那high one Spark呢?那咱们要想把它搭起来,是不是首先我们需要保障咱们的这个,呃,节点上面我得有一个have才行,对不对?那除了有have还得有个什么呀?是不是还得有一个SPA才可以啊,对吧?没问题啊,好,那完之后咱们现在就考虑一个问题,考虑一个什么问题呢?就是说我这儿安装什么版本的have,我安装什么版本的Spark,咱是不是得去选一个版本啊,对吧?OK,那比如说在这儿我们选的have的版本是多少呢?是3.1.2。
01:40
没问题吧,OK好,那你还选3.1.2,那我的Spark我应该选什么版本呢?我这是随便选吗。是随便选吗?那不能随便选对吧,你是不是得去的官网上面看一看,Have3.1.2所支持或所兼容的Spark的版本是多少啊,对吧?啊,那这个你怎么去看呢。
02:00
怎么去看啊,一般情况下这个have的官网上它会有详细的这个说明,如果实在是没有详细的说明,你也可以去哪看呢?你也可以去哪看呢?也可以去have的源码里边去看,为什么这么说,你琢磨琢磨同学啊,你想一想,假如说我现在咱们现在本身就是have的这个开发人员啊,那你想一想,你要想去开发一下have当中的一个功能模块,什么功能模块呢?就是SPA和引擎模块,那你需要做一个什么工作,你是不是需要在咱们的这个项目当中去引入一个Spark的依赖啊,对吧?是是这个道理吧,同学们对吧?你想啊,什么叫汉王SPA来着,是不是就是拿到一条circle之后,我把这个circle解析成Spark的计算任务啊,对吧?那你你要想解析成SPA接的任务,你不得调用SPA的API嘛,对吧?诶你调用SPAAPI,那这边咱是不是就得引入Spark的依赖啊,对吧?好,那你想一想,你这引入SPA依赖的时候,是不是得指定一个版本,那我这儿引入的是哪个版本,那是不是我这个have支持的Spark就是哪个版本呀,没问题吧,哎,是这样的啊OK,好,那接下来呢,我就给大家去看一看,看看咱们这个所谓的have3.1点到底依赖的这个SPA版本是哪个版本,那咱们现在去找一下啊,OK,那首先那在这儿呢,我们呃找一下这个have的这个这个这个这个代码源码啊,直接你在这搜什么就行,就搜have get har就可以,呃,Get跟get har大家可能还没学过啊,呃,Get har呢,是一个这个代码托管平台,我们很多的这个开源工具呢,呃,它的代码都托管在这个get har上面,就是咱们在上面能拿到我们每几乎每一个开源项目的这个源代码啊是。
03:33
这样的,比如have我们也可以在这找,但是这个呢,可能咱们访问有点慢,这个咱们可以访问一下这个国内版的啊呃,访问一下get,看里边有没有have啊,呃,应该是有的啊,那现在咱们去点一下。呃,这个目前访问不了啊,咱们就先不访问了,那这边有没有have呢?呃,有没有have,咱们在这儿呢,再去重新的搜一下吧,来搜索爱。呃,可能还没有这个同步过来的这个这个镜像啊,可能没有啊,这个是不是啊,可能没有,没有的话呢,咱们再,诶这个应该是来咱们点一下这个好了,那那这个呢,其实就是咱们这个have的源码对吧?那完了之后呢,在这儿呢,因为这个get half上面它有一个这个就是呃,对应的是getate上面的一个分支的一个结构,对吧?就是里边呢,你得找到我们相应的版本才行啊,你点这那完之后咱们找哪个版本呢?咱们的版本应该是哪个版本啊,我们应该是3.1.2的一个版本对吧?那在这呢,我们点一下这个branch3.1,你点一下它点完之后呢,大家来看,这实际上就是3.1.2这个版本的这个health的源码,完了之后,咱这里边不用看太多东西,你就看一个东西,就你就知道了,看谁就行了。
04:44
他也是用maven去做的这个呃项目的管理对吧?那咱们看谁就行,你就看po文件是不是就完事了,Po文件当中他要想引入Spark依赖,是不是得指定一个Spark版本,对吧?那你这就搜一下这个s Spark,搜完之后呢,你就点1.1个这个s Spark v s,你会发现这里边是不是就有一个它所引入的s Spark版本啊,对吧?那所以说那当前这个have3.1.2的这个呃版本所兼容的Spark的版本是不是就应该是2.3.0啊,对吧?那所以在这儿呢,我们要想去搭建一个have王SPA环境,如果你装的have是3.1.2,那你的Spark你选2.3.0,这个会出现所谓的兼容性问题吗?这肯定是不会出现了,对吧?那是这样的啊,比为你这样去安装肯定没问题,但是呢,有些情况下呢,你这个不能随便去装,那有些情况可能说我这个还我这个s Spark,我就是不能用2.320,为什么呢?假如说我这儿还需要按一个其他的框架,我其他的框架呢,也需要用到这个Spark对不对,OK,那那玩意那个框架呢,我需要用到Spark3.020,对吧,就。
05:45
我这就必须得用3.0.0才可以,能理解吗?OK,那这种情况下,那这个have跟Spark它俩是否是兼容的,是不是就不好说了,对吧,就有可能会出现不兼容的问题啊,那假定咱们现在呢,选用的SSPA就是3.020,来我们分析分析到底啥情况会出现这个兼容性问题,来咱们分析一下啊,来大家琢磨懂,我刚才说了,我们假如说现在就是have的开发人员,那完了之后我们要想开发hi王Spark这样一个功能,那我们就需要在have当中引入Spark依赖,然后呢,是不是得调用SPA依赖当中的一些API啊,对吧?那完之后假如说啊,我们这儿引入的SPA依赖,那它就是2.3.0的,完之后呢,我们在调用它的API的时候呢,我们还调用一些什么样的呢?调用了一些过时的API,诶过时的API大家应该都知道是啥,对吧,过时就是说OK,我现在还能用,但是呢,诶将来的版本是不是可能会被移除啊对吧?好,那结结果现在呢,我这个呃开发hi3.1.2的时候,我就引用了Spark2.3.0里边的一些。
06:45
诶过时的API好,那完了之后呢,我们继续来进行,那结果呢,在3.0当中,SPA3点当中,他就把2.3.0里面的那些过时的API给怎么样了,给移除掉了。哎,给移除掉了,能理解吧,好了,那完了之后,那假如现在呢,我们在部署have王子万的时候,OK,那这儿这儿我装了一个这个have3.1.2,那诶我问一下大家啊,你这装这个have3.1.2的时候,这个have3.1.2里边会包含整个的2.3.0的SPA吗?会包含吗?
07:17
他不会的,通常你在给have去打包的时候啊,它里边不会包含整个的Spark的这个这个这个依赖的,它可能只会带有一些SPA的客户端等等等,他不会把整个Spark全打包在自己的安装包里的啊这样的,那所以说这种情况下你就得怎么办呢?是不是你装了have之后,你还得去装一个Spark呀,对吧,你得让他去引用咱们这个Spark当中的依赖对不对,OK啊好,那么之后假如现在我们就继续往下进行,那我这儿装了一个3.1.2,那这儿呢,我装了一个三点点零,那3.0里面里边它是不是已经把那些2.3.0过时的API移除了呀,对吧?啊,那这时候我的have3.1.2要想去引用SPA3.0里边那些特定的API的时候,是不是可能就就找不着了呀,对吧,为啥,因为已经被移除了吗。
08:00
对不对,哎是这样的啊,那这种情况下,你在执行海王子玩任务的时候,他就会报一个错,报什么错呀,就是说某个类找不着,或者是某个方法诶找不着啊等等等,他会报类似这样的错误,只要出现类似的错误,那大概率就是由兼容性问题导致的,这其实就是所谓的哎,兼容性问题就这么去,就这么出现的,OK啊好,那出现的原理咱们搞清楚了,然后大家再来思考思考,你说这个问题咱怎么解决。呃,最直接的办法肯定是替换Spark的版本,对吧,你换成二十三零啥事没有对吧?但是假如我们现在就是不能换,那这个怎么办呢?怎样能解决这个严重性问题?大家琢磨琢磨怎样解决这个问题啊对,其实你这应该从从哪下手,从谁下手,从have下手,对吧,你这儿可以怎么做呢?你可以把have的源码下下载下来,下载下来之后怎么做呢。对,改一下它的破文件当中那个Spark的依赖对不对,你把它的依赖版本有2.3.0升级为是不是3.0.0啊对吧,升为之后,那你这个是不是得干啥,你得重新编译重新打包才行,对吧?好,那我问一下大家,你说我这个直接编译打包,这能不能通过。
09:12
能不能通过肯定不能通过呀,对吧,他要是直接替换完直接通过,那我这个3.1.2跟3.0.0,它还还还会有兼容性问题吗?那就没有了,对吧,他肯定是通过不了的啊OK,那通过不了之后,那肯定会报错,对吧?那我们要做的工作应该是什么呢?就是哪儿报错。你得去改哪才行,对不对,他之所以报错是因为什么,是因为他是不是就报错的位置,就是他引用那个2.3.0过时API的位置嘛,对不对,那完之后你提成3.0是不是没有那个API了,所以他是不是会会报错呀,对吧?那这时候咱们就得找到报错的位置,然后呢,去改一下它的源码对不对,怎么改呢?那说白了就是把那些过时的API用什么去替换,用3.0.0里边的SPA的新的API去替换了,对吧?诶OK,那这样一来的话呢,诶改完之后你再重新编译打包对不对,那如果说他要是再报错,你还得再接着改,再报错,再接着改,你直到他不怎么样,直到它不报错为止,那现在你得到的这个have3.1.2,这才是一个兼容Spark3.0的。
10:12
诶,这个一定要注意一下啊,也就是在这儿呢,正常解决健身问题可以这样去解决啊,OK啊好,那完之后呢,这边呃,整个解决这个have3.1.2这个健身性问题的这个呃过程呢,我课上就不掩饰了啊,实际上咱们这儿呢,装的这个呃氦王Spark可能确实就存在这个兼容性问题,确实就存在兼容性问题,然后呢,大家现在自己装的这个呃have呢,包括就是之前给大家发的这个have啊,就本身就已经是一个经过呃这个我改源码,然后重新编译的一个版本了啊,已经是这个编译好的一个版本啊,也就是它现在目前已经是兼容have这个3.0.0了,这个大家稍微的注意一下就行了,那我们就不用在课上编译了,然后同学呢,要想去了解一下这个have编译源码,我到底是怎么去编译的,我改源码到底怎么改的,对吧?那这个课上我就不想说,因为这个太浪费时间了,光去编一下这个哈源码,咱们可能得花一下午的时间啊,是这样的,太浪,所以说这样呢,我就不演示了,呃,然后呢,之前我就演示过一个班啊,就是太浪费时间了,那完了之后呢,一会我会把。
11:13
这个呃,相关的视频给大家发一下,然后大家要是感兴趣的话,你可以去看一看啊,是这样的啊,OK,那就说这么多啊,这是关于我们这个have on Spark的一个兼容性问题的说明,行,这个完成之后我把视频停一下啊。呃,好,各位同学,那咱接下来呢,简单的说一下,就是关于你去编一个某一个框架的源码的时候,你大体是怎么去做的啊,实际上如果说你要是单纯的去编译源码啊,单纯的去编译源码,这个其实很简单,对吧?编编译源码怎么编译啊,通常我们这些框架呢,它是不是都用一些这种,呃,这种就是对啊,就是或用ma啊,或者用graid这样的一些工具去管理啊,对吧,那所谓的编译打包,你就执行一个什么就行了,你就执行一条编译打包的命令是不是就完事了,对吧?你比如说我要是用ma,对吧,我就执行一个f clean package是不是就完事儿了,对吧?这这其实就是在编语在打包啊,对吧,这个其实通常是很简单的啊,是这样的啊好,那完之后呢,难可能难在什么地方呢?就是难在可能你需要去改源码上,对吧?改源码是比较麻烦的,OK啊好,那接下来呢,给大家简单的介绍一下,就是比如说我想编译某一个框架的源码,我到底怎么去编译啊好他现在就以哈为例,你比如说我现在要想编译哈的源码,对吧,那我是不是就得哎从它的官网上面去找一找它的源码,我应该如何编译啊对吧?我。
12:28
这条编译命令具体应该怎么写啊,对吧?哎,其实每个框架的官网都有相当说明,咱以哈尔为例,我们进到还有官网完了之后呢,进来之后咱们找谁,找这个getting star的一一一般就就可以了,好,那完之后我们一般找谁啊,你就找那种building或者是compel的一个字眼,Building是不是就是构建的意思啊,对吧?哎,或者是,哎这个这个就是构建或者就是变译的意思,对吧,你就找build building或者这样的一些字眼,你就说咱们这个位置,这就是啥,是就有一个什么building have from s对吧?诶,那你就找它呗,点点完之后呢,这里边就会给我们列出来这个have源码编译的步骤,你看这个怎么去做的,非常简单,首先第一步执行这样的一个GC命令,这个其实很简单,这就在干啥呢?就是在下载have源码啊,这个东西呢,你也可以直接去找到这个页面,然后点击download也是可以的,那在这儿呢,以后大家会学这个get和get har的啊,这个命令其实很简单,就是下载have的源码,好,那下载下来之后,接下来干啥呢?你看这是不是就进到了那个have的根目录下面了,对不对,那进到之。
13:28
之后呢,呃,执行了一个什么命令,就这个命令没N,这一看就是main的一个编译命令,对吧?Mn clean package对不对?完事之后后边传一些参数,那这样一来的话呢,你就等着就完事了,它就会下载相应的依赖,然后进行编译,最终打包完成,对吧?那打包完成之后呢,进到这个路径下边,你就能够找到咱们这个编译之后的一个二进制的安装包了,啊就是这么个逻辑,其实这个编译说实话比较简单,难,可能难在什么地方呢?难在改源码上面啊是假如我们就以现在咱咱这个场景为例啊,我是不是需要去改一些have的源码啊,对吧,那这个怎么去改呀?
14:03
啊,首先咱们得知道就是第一点就是我们编译这个源码的时候,咱们通常得在什么环境下去编译,得在你这个hi将来的运行环境下去编译,对吧?那咱们hi将来是不会运行在linu环境下,对吧?那所以我们编译的时候,我是不是最好在Li Li环境下去编译啊,对吧?OK,所以说那在这儿呢,通常你可能需要诶进到这个位置下载源码,然后呢,是不是去进行编译对吧?然后然后编译完之后,如果说你要不改源码,这个没问题,直接编译就能用,对吧?但是我现在是要改源码对吧?那我这个在哪改呢?我我我在这儿改吗。我在这我CD到那个目录里边找那个Java文件,然后VM去改吗?这个是不是显示不太合适啊为吧啊那这时候咱们怎么去操作呢?诶实际上这里边比较方便的方式是怎么做啊,诶你安装一个就是这种带桌面操作环境的,诶一个Linux虚拟机对吧,你像我这是不是就带有桌面环境啊对吧,然后呢,你直接在这个虚拟机当中,你去安装一个什么就完事了。
15:00
安装idea啊对不对,OK idea是不是用Java语言编写的,它是跨平台的对吧?Li呃,有安装包,那Windows有Mac也有对吧?那完之后呢,你在里边装一个idea对吧?然后呢,你在idea当中,你打开这个源码对吧?然后在idea里边去进行编译对不对,那完了之后呢,如果诶编译通过了,那就直接成功,不成功呢,他是不是就会报错对吧?报错之后直接在idea里边去改是就完事了,对,改了再编译对吧?报错再再再再去进行这个呃修改等等等你不断的往复,那就完事了对吧?诶那这样一来的话呢,那咱们这个改源码基本上就能完成了,哎,这是一个小技巧啊,就是你可以装一个这种带桌面环境的一个虚拟机啊去进行操作就完事了啊是这样的啊,就是编缘源码基本上哎都是这么去操作的吧,啊相对来说呢,是呃,难倒是不是特别难,就是可能有点麻烦对吧,就是比较考验大家的这个耐心,因为你也不知道我这个兼容性问题到底有几处不兼容对吧,你可能得一处一处的去排查,这个相对比较麻烦,就是啊好了,那就说这么多啊。
我来说两句