《Flink 源碼解析》—— 源碼編譯運行


更新一篇知識星球里面的源碼分析文章,去年寫的,周末自己錄了個視頻,大家看下效果好嗎?如果好的話,后面補錄發在知識星球里面的其他源碼解析文章。

前言

之前自己本地 clone 了 Flink 的源碼,編譯過,然后 share 到了 GitHub 上去了,自己也寫了一些源碼的中文注釋,並且 push 到了 GitHub 上去了。這幾天阿里開源了宣傳已久的 Blink,結果我那個分支不能夠繼續 pull 下新的代碼,再加上自己對 Flink 研究了也有點時間了,所以打算將這兩個東西對比着來看,這樣可能會學到不少更多東西,因為 Blink 是另外一個分支,所以自己干脆再重新 fork 了一份,拉到本地來看源碼。

fork

執行下面命令:

git clone git@github.com:apache/flink.git

拉取的時候找個網絡好點的地方,這樣速度可能會更快點。

編譯

因為自己想看下 Blink 分支的代碼,所以需要切換到 blink 分支來,

git checkout blink

這樣你就到了 blink 分支了,接下來我們將 blink 源碼編譯一下,執行如下命令:

mvn clean install -Dmaven.test.skip=true -Dhadoop.version=2.7.6 -Dmaven.javadoc.skip=true -Dcheckstyle.skip=true

maven 編譯的時候跳過測試代碼、javadoc 和代碼風格檢查,這樣可以減少不少時間。

注意:你的 maven 的 settings.xml 文件的 mirror 添加下面這個:(這樣下載依賴才能飛起來)

<mirror>
  <id>nexus-aliyun</id>
  <mirrorOf>*,!jeecg,!jeecg-snapshots,!mapr-releases</mirrorOf>
  <name>Nexus aliyun</name>
  <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

<mirror>
  <id>mapr-public</id>
  <mirrorOf>mapr-releases</mirrorOf>
  <name>mapr-releases</name>
  <url>https://maven.aliyun.com/repository/mapr-public</url>
</mirror>

執行完這個命令后,然后呢,你可以掏出手機,打開微信,搜索下微信號:zhisheng_tian , 然后點擊一波添加好友,歡迎來探討技術。

等了一波時間之后,你可能會遇到這個問題(看到不少童鞋都遇到這個問題,之前編譯 Flink 的時候也遇到過):

[ERROR] Failed to execute goal on project flink-mapr-fs: Could not resolve dependencies for project com.alibaba.blink:flink-mapr-fs:jar:1.5.1: Failure to find com.mapr.hadoop:maprfs:jar:5.2.1-mapr in http://maven.aliyun.com/nexus/content/groups/public was cached in the local repository, resolution will not be reattempted until the update interval of nexus-aliyun has elapsed or updates are forced -> [Help 1]

如果你試了兩遍都沒編譯通過,那么我這里就教大家一種方法(執行完編譯命令后啥也沒動就 OK 的請跳過,誰叫你運氣這么好呢):

在 flink-filesystems 中把 flink-mapr-fs module 給注釋掉。

上圖這是我給大家的忠告,特別管用。

再次執行命令編譯起來就沒有錯誤了,如果你還有其他的錯誤,我猜估計還是網絡的問題,導致一些國外的 maven 依賴下載不下來或者不完整,導致的錯誤,暴力的方法就是和我一樣,把這些下載不下來的依賴 module 注釋掉,或者你可以像已經編譯好的童鞋要下 maven 的 .m2 文件里面已經下載好了的依賴,然后復制粘貼到你的本地路徑去,注意路徑包名不要弄錯了,這樣一般可以解決所有的問題了,如果還有問題,我也無能為力了。

編譯成功就長下圖這樣:

運行

然后我們的目錄是長這樣的:

標記的那個就是我們的可執行文件,就跟我們在 Flink 官網下載的一樣,我們可以將它運行起來看下效果。

我把它移到了 /usr/local/blink-1.5.1 下了,個人習慣,喜歡把一些安裝的軟件安裝在 /usr/local/ 目錄下面。

目錄結構和我以前的安裝介紹文章類似,就是多了 batch_conf 目錄,和 conf 目錄是一樣的東西,不知道為啥要弄兩個配置文件目錄,問過負責的人,沒理我,哈哈哈。

那么我們接下來就是運行下 Blink,進入到 bin 目錄,執行可執行文件:

./start-cluster.sh

windows 可以點擊 start-cluster.bat 啟動,這點對 windows 用戶比較友好。

執行完后命令后,在瀏覽器里訪問地址,http://localhost:8081/ , 出現下圖這樣就代表 Blink 成功啟動了:

上圖是開源版本的白色主題,騷氣的黑色主題通過在 Flink 群里得知如何改之后,編譯運行后的效果如下:

一次好奇的執行了多次上面啟動命令,發現也能夠正常的運行。

然后啟動的日志是這樣的:

說明已經啟動了 9 個 Task Manager,然后看到我們頁面的監控信息如下:

可以看到監控信息里面已經有 40 個可用的 slot,這是因為 Blink 默認的是一個 Task Manager 4 個 slot,我們總共啟動了 10 個 Task Manager,所以才會有 40 個可用的 slot,注意:Flink 默認的配置是 1 個 Task Manager 只含有 1 個 slot,不過這個是可以自己分配的。

注意:開啟了多個 Task Manager 后,要關閉的話,得執行同樣次數的關閉命令:

./stop-cluster.sh

中文源碼分析

https://github.com/zhisheng17/flink

配套視頻解析

視頻錄制過程難免說錯,還請大家可以指教

相關

更多源碼解析的文章和 Flink 資料請加知識星球!

本文地址是:http://www.54tianzhisheng.cn/2019/01/30/Flink-code-compile/,未經允許,禁止轉載!

總結

本篇文章是《從1到100深入學習Flink》的第一篇,zhisheng 我帶帶大家一起如何 clone 項目源碼,進行源碼編譯,然后運行編譯后的可執行文件 blink。下篇文章會分析項目源碼的結構組成。

相關文章

1、《從0到1學習Flink》—— Apache Flink 介紹

2、《從0到1學習Flink》—— Mac 上搭建 Flink 1.6.0 環境並構建運行簡單程序入門

3、《從0到1學習Flink》—— Flink 配置文件詳解

4、《從0到1學習Flink》—— Data Source 介紹

5、《從0到1學習Flink》—— 如何自定義 Data Source ?

6、《從0到1學習Flink》—— Data Sink 介紹

7、《從0到1學習Flink》—— 如何自定義 Data Sink ?

8、《從0到1學習Flink》—— Flink Data transformation(轉換)

9、《從0到1學習Flink》—— 介紹Flink中的Stream Windows

10、《從0到1學習Flink》—— Flink 中的幾種 Time 詳解

11、《從0到1學習Flink》—— Flink 寫入數據到 ElasticSearch

12、《從0到1學習Flink》—— Flink 項目如何運行?

13、《從0到1學習Flink》—— Flink 寫入數據到 Kafka

14、《從0到1學習Flink》—— Flink JobManager 高可用性配置

15、《從0到1學習Flink》—— Flink parallelism 和 Slot 介紹

16、《從0到1學習Flink》—— Flink 讀取 Kafka 數據批量寫入到 MySQL

17、《從0到1學習Flink》—— Flink 讀取 Kafka 數據寫入到 RabbitMQ

18、《從0到1學習Flink》—— 你上傳的 jar 包藏到哪里去了?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM