问题描述
flink在yarn上跑的时候,经常会遇到是否打 fat jar的问题,也就是打全包问题,很多时候由于生产环境和开发环境不一样,肯定得到线上去测试,这时如果你打fat jar的话,就会很痛苦,因为它至少都有一两百M,而且由于内外网的网速限制问题,上传会很慢,基本上你上传一次要几分钟,我这里两百多兆上传一次要3分钟的样子,每次一点小小的错误,得上传好几遍,一个小时也就测试一两回就没了,真的哭死
这个时候就会想到要只上传源码包,那就是几十K,再慢的网速都是秒上传,接下来我就说下上传源码包的方式
跑源码包的方式
- 把本地的pom文件放到flink-home目录的,lib目录里,跑一遍mvn package,把包拉下来
- 通过上传只有依赖包的方式
首先说下第一种方式是有风险的,因为lib目录是针对全局的,如果你几个项目的包会有冲突就会有问题,这块我就踩过坑。所有还是比较推荐第二种方式,但是第二种方式在运行的时候也是坑很多,下面具体说说
通过依赖包的方式
通过依赖包的方式,跑任务的时候也有几种方式
- 通过-C指定特定依赖包的路径
- 通过-yt指定
- 把依赖包放到lib目录下
这几种方法,第一种和第二种,我弄了好久都没有成功,不是这不行就是那不行,不知道具体是什么原因,感觉还是跟flink加载jar的顺序有关系,最后还是选择把依赖包放在lib目录下的方式成功了
这里有个小意外,我一开始是通过pom文件的方式拉jar到lib跑的,但是后面就会出现jar冲突,最后我用打依赖包的方式放在lib下,就不会有冲突,也就是说我把jar散着一个个的放在lib里就会有jar冲突,但是我打成一个总的依赖包就不会,这个很奇怪,不知道什么原因???,有大佬可以发表下看法,万分感谢