背景
开发的flink程序,要使用yarn-cluster的方式进行部署。
程序中依赖了很多第三方jar包,不想用shade那种打包方式打成一个大jar包,然后提交。
想将应用程序jar包和依赖jar包分开,依赖的jar包在提交时一起提交上去(像spark on yarn直接指定“–jars”这样),但是找了好久发现flink官方没有提供这样的方式。
直接将依赖的jar包放在flink的lib目录下,可以实现,但是感觉这样会污染flink的lib包。
于是找到了如下方法,可以实现类似的功能。在此记录分享一下。
大概实现就是修改flink提交的脚本,开放了用户添加自己的jar依赖能力,然后在提交时指定依赖的jar包目录。
过程
-
下载flink源码包
下载自己flink对应的版本的源码包。以下是源码包地址:
https://mirrors.tuna.tsinghua.edu.cn/apache/flink/
https://archive.apache.org/dist/flink/
-
修改flink-yarn模块下的YarnClusterDescriptor 类的addLibFoldersToShipFiles 方法,在方法首部添加如下代码:
USER_LIB_DIR就是我们之后要用到的环境参数
String userLibDir = System.getenv().get("USER_LIB_DIR"); if (userLibDir != null) { File directoryFile = new File(userLibDir);