更新一篇知識星球里面的源碼分析文章,去年寫的,周末自己錄了個視頻,大家看下效果好嗎?如果好的話,后面補錄發在知識星球里面的其他源碼解析文章。
前言
之前自己本地 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