从0到1学习Flink》—— 你上传的 jar 包藏到哪里去了?

前言

写这篇文章其实也是知识星球里面的一个小伙伴问了这样一个问题:java

经过 flink UI 仪表盘提交的 jar 是存储在哪一个目录下?

这个问题其实我本身也有问过,可是本身由于本身的问题没有啥压力也就没深刻去思考,如今但是知识星球的付费小伙伴问的,因此天然要逼着本身去深刻而后才能给出正确的答案。git

跟着我一块儿来看看个人探寻步骤吧!小小的 jar 居然还敢和我捉迷藏?github

查看配置文件

首先想到的是这个确定能够在配置文件中有设置的地方的:web

谷歌大法好

虽然有个是 upload 的,可是并非咱们想要的目录!因而,只好动用个人“谷歌大法好”。微信

找到了一条,点进去看 Issue 以下:学习

发现这 tm 不就是想要的吗?都支持配置文件来填写上传的 jar 后存储的目录了!赶忙点进去看一波源码:spa

源码确认

这个 jobmanager.web.upload.dir 是否是?我去看下 1.8 的源码确认一下:rest

发现这个 jobmanager.web.upload.dir 还过时了,用 WebOptions 类中的 UPLOAD_DIR 替代了!code

继续跟进去看看这个 UPLOAD_DIR 是啥玩意?orm

看这注释的意思是说,若是这个配置 web.upload.dir 没有配置具体的路径的话就会使用 JOB_MANAGER_WEB_TMPDIR_KEY 目录,那么咱们来看看是否配置了这个目录呢?

确实没有配置这个 jar 文件上传的目录,那么咱们来看看这个临时目录 JOB_MANAGER_WEB_TMPDIR_KEY 是在哪里的?

又是一个过时的目录,mmp,继续跟下去看下这个目录 TMP_DIR

咱们查看下配置文件是否有配置这个 web.tmpdir 的值,又是没有:

so,它确定使用的是 System.getProperty("java.io.tmpdir") 这个目录了,

我查看了下我本地电脑起的 job 它的配置中有这个配置以下:

java.io.tmpdir    /var/folders/mb/3vpbvkkx13l2jmpt2kmmt0fr0000gn/T/

再观察了下 job,发现 jobManager 这里有个 web.tmpdir 的配置:

web.tmpdir    /var/folders/mb/3vpbvkkx13l2jmpt2kmmt0fr0000gn/T/flink-web-ea909e9e-4bac-452d-8450-b4ff082298c7

发现这个 web.tmpdir 的就是由 java.io.tmpdir + “flink-web-” + UUID 组成的!

水落石出

进入这个目录发现咱们上传的 jar 终于被找到了:

配置上传 jar 目录确认

上面咱们虽然已经知道咱们上传的 jar 是存储在这个临时目录里,那么咱们如今要验证一下,咱们在配置文件中配置一下上传 jar 的固定位置,咱们先在目录下建立一个 jars 目录,而后在配置文件中加入这个配置:

web.tmpdir: /usr/local/blink-1.5.1/jars

更改以后再看 web.tmpdir 是这样的:

从 Flink UI 上上传了三个 jar,查看 /usr/local/blink-1.5.1/jars/flink-web-7a98165b-1d56-44be-be8c-d0cd9166b179 目录下就出现了咱们的 jar 了。

咱们重启 Flink,发现这三个 jar 又没有了,这也能解释以前我本身也遇到过的问题了,Flink 重启后以前全部上传的 jar 都被删除了!做为生产环境,这样玩,确定不行的,因此咱们仍是得固定一个目录来存储全部的上传 jar 包,而且不可以被删除,要配置固定的目录(Flink 重启也不删除的话)须要配置以下:

web.upload.dir: /usr/local/blink-1.5.1/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 上传的路径!

总结

本文从知识星球一个朋友的问题,从现象到本质再到解决方案的讲解了下如何找到 Flink UI 上上传的 jar 包藏身之处,并提出了如何解决 Flink 上传的 jar 包被删除的问题。

本篇文章链接是:http://www.54tianzhisheng.cn/2019/03/13/flink-job-jars/

关注我

微信公众号:zhisheng

另外我本身整理了些 Flink 的学习资料,目前已经所有放到微信公众号了。你能够加个人微信:zhisheng_tian,而后回复关键字:Flink 便可无条件获取到。

更多私密资料请加入知识星球!

Github 代码仓库

https://github.com/zhisheng17/flink-learning/

之后这个项目的全部代码都将放在这个仓库里,包含了本身学习 flink 的一些 demo 和博客。

相关文章

一、《从0到1学习Flink》—— Apache Flink 介绍

二、《从0到1学习Flink》—— Mac 上搭建 Flink 1.6.0 环境并构建运行简单程序入门

三、《从0到1学习Flink》—— Flink 配置文件详解

四、《从0到1学习Flink》—— Data Source 介绍

五、《从0到1学习Flink》—— 如何自定义 Data Source ?

六、《从0到1学习Flink》—— Data Sink 介绍

七、《从0到1学习Flink》—— 如何自定义 Data Sink ?

八、《从0到1学习Flink》—— Flink Data transformation(转换)

九、《从0到1学习Flink》—— 介绍Flink中的Stream Windows

十、《从0到1学习Flink》—— Flink 中的几种 Time 详解

十一、《从0到1学习Flink》—— Flink 写入数据到 ElasticSearch

十二、《从0到1学习Flink》—— Flink 项目如何运行?

1三、《从0到1学习Flink》—— Flink 写入数据到 Kafka

1四、《从0到1学习Flink》—— Flink JobManager 高可用性配置

1五、《从0到1学习Flink》—— Flink parallelism 和 Slot 介绍

1六、《从0到1学习Flink》—— Flink 读取 Kafka 数据批量写入到 MySQL

1七、《从0到1学习Flink》—— Flink 读取 Kafka 数据写入到 RabbitMQ

1八、《从0到1学习Flink》—— 你上传的 jar 包藏到哪里去了?

相关文章
相关标签/搜索