從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 包藏到哪裏去了?

相關文章
相關標籤/搜索