从Flink client提交源码看第三方jar包的动态加载的解决方案是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。查看flink脚本找到执行run命令的入口类,如下:入口类为:org.apache.flink.client.cli.CliFrontend。 最终会调用 parseParameters(String[] args) 方法来执行命令解析,run 命令会调用 run(params) 方法,如下:run 方法代码如下run方法根据用户传入的参数如 main函数,jar包等信息创建出 PackagedProgram 对象,这个对象封装了用户提交的信息。从 getPackagedProgram()方法里可以看出。查看PackagedProgram构造方法,里面会创建几个关键成员变量:classpaths:用户-C 参数传入的信息jarFile : 用户的主函数的jarextractedTempLibraries :提取出上面主jar包里 lib/ 文件夹下的所有jar包信息,供后面classloader使用userCodeClassLoader : 用户code的classloader,这个classloader会把classpaths,jarFile,extractedTempLibraries 都加入到classpath里。该userCodeClassLoader默认采用child_first优先策略mainClass :用户main函数方法 该构造方法如下:PackagedProgram 里 getJobJarAndDependencies 方法,该方 香港云主机法收集了job所有依赖的jar包,这些jar包后续会提交到集群并加入到classpath路径中。PackagedProgram对象构造完成之后,便是创建最终的Configuration对象了,如下方法这个方法会设置两个参数:pipeline.classpaths: 值为getJobJarAndDependencies()和classpaths里的urlpipeline.jars: 值为getJobJarAndDependencies()返回的jar和lib文件夹下的依赖,后续提交集群的时候会根据这个把jar一起提交到集群准备好 PackagedProgram和Configuration后,就开始执行用户程序了,详细代码如下:最后总结一下整个流程:执行flink run 命名传入相关参数创建PackagedProgram对象,准备相关jar,用户类加载器,Configuration对象通过反射调用用户Main方法构建Pipeline StreamGraph,提交job到集群通过分析流程我们可以发现可以有两种方式来实现动态jar的添加动态的 把三方jar 放入 主函数jar包的lib目录下(可以通过jar uf 命名搞定) 因为在PackagedProgram构造方法里会通过extractContainedLibraries()方法获取jar lib目录里的所有jar,并且这些jar会一并上传到集群在用户任务main函数里,通过反射动态设置 Configuration 对象的 pipeline.classpaths , pipeline.jars 这两个属性 。并且还需要把第三方jar加载到Thread.contextClassLoader里。(可参见:https://zhuanlan.zhihu.com/p/278482766)本人在项目中直接采用的是第一种方案,不会添加更多代码。看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注开发云行业资讯频道,感谢您对开发云的支持。
这篇文章主要介绍“c语言多级指针的概念是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“c语言多级指针的概念是什么”文章能帮助大家解决问题。多级指针如果指针变量p指向变量q,而变量q不是指针变量,则称变量p是一级指针…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。