Flink专题

Flink Job上传的jar包保存在哪里

2019-05-24  本文已影响0人  尼小摩

通过 flink UI dashboard提交的 jar 存储在哪个目录下? 一直都有疑惑,之前没做深入的了解,这个问题不解决感觉心里总在惦记着。今天就跟我一起来探寻一下其中的套路吧。

Google大法好

找到了一条关于 Flink Upload Issue, 内容如下:

这不正是想要的么,赶紧看下这哥们儿submit的代码:

打开Flink1.8源码,搜索“jobmanager.web.upload.dir”

点击搜索结果,进入到具体实现类中,

代码中提示 jobmanager.web.upload.dir 配置已经过期了,被 WebOptions 类中的 UPLOAD_DIR 配置所替代。 继续跟进 WebOptions 类:

注意看注释,大体意思:该配置参数定义了上传 Job jar 包的目录。如果没有配置,则使用JOB_MANAGER_WEB_TMPDIR_KEY指定的目录。

继续从源码中搜索JOB_MANAGER_WEB_TMPDIR_KEY

进去源码中看看

我晕,又过期啦,emmmmm.... 。继续跟进 WebOptions

从代码中可以看到,如果配置了web.tmpdir则会替代掉默认配置java.io.tmpdir

服务器配置信息

web.tmpdir 的是由 java.io.tmpdir + “flink-web-” + UUID 组成的!

默认情况下,Job重启后就会删除掉之前上传的jar包。生产环境玩肯定是不行的,所以我们还是要指定一个目录来存储所有的上传 jar 包,并且不能够被删除,要配置固定的目录(Flink 重启也不删除的话)需要配置如下:

web.upload.dir: /usr/local/flink-1.8/jars

这样的话,就可以保证你的 jar 不再会被删除了!

//从配置文件中找 UPLOAD_DIR
final Path uploadDir = Paths.get(
   config.getString(WebOptions.UPLOAD_DIR, config.getString(WebOptions.TMP_DIR)),
   "flink-web-upload");

return new RestServerEndpointConfiguration(
   restAddress,restBindAddress,port,sslEngineFactory,
   uploadDir,maxContentLength,responseHeaders);

他就是从配置文件中找 UPLOAD_DIR,如果为 null 就找 TMP_DIR 目录来当作 jar 上传的路径。

总结

知其然,知其所以然。

参考资料:

https://issues.apache.org/jira/browse/FLINK-4308
https://github.com/apache/flink/pull/2335

上一篇下一篇

猜你喜欢

热点阅读