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

来源:https://www.cnblogs.com/zhisheng/archive/2019/08/10/11332546.html
-Advertisement-
Play Games

更新一篇知識星球裡面的源碼分析文章,去年寫的,周末自己錄了個視頻,大家看下效果好嗎?如果好的話,後面補錄發在知識星球裡面的其他源碼解析文章。 前言 之前自己本地 clone 了 Flink 的源碼,編譯過,然後 share 到了 GitHub 上去了,自己也寫了一些源碼的中文註釋,並且 push 到 ...


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

前言

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

fork

執行下麵命令:

git clone [email protected]: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、Flink 從0到1學習 —— Apache Flink 介紹

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

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

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

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

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

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

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

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

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

11、Flink 從0到1學習 —— Flink 讀取 Kafka 數據寫入到 ElasticSearch

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

13、Flink 從0到1學習 —— Flink 讀取 Kafka 數據寫入到 Kafka

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

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

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

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

18、Flink 從0到1學習 —— Flink 讀取 Kafka 數據寫入到 HBase

19、Flink 從0到1學習 —— Flink 讀取 Kafka 數據寫入到 HDFS

20、Flink 從0到1學習 —— Flink 讀取 Kafka 數據寫入到 Redis

21、Flink 從0到1學習 —— Flink 讀取 Kafka 數據寫入到 Cassandra

22、Flink 從0到1學習 —— Flink 讀取 Kafka 數據寫入到 Flume

23、Flink 從0到1學習 —— Flink 讀取 Kafka 數據寫入到 InfluxDB

24、Flink 從0到1學習 —— Flink 讀取 Kafka 數據寫入到 RocketMQ

25、Flink 從0到1學習 —— 你上傳的 jar 包藏到哪裡去了

26、Flink 從0到1學習 —— 你的 Flink job 日誌跑到哪裡去了

27、阿裡巴巴開源的 Blink 實時計算框架真香

28、Flink 從0到1學習 —— Flink 中如何管理配置?

29、Flink 從0到1學習—— Flink 不可以連續 Split(分流)?

30、Flink 從0到1學習—— 分享四本 Flink 國外的書和二十多篇 Paper 論文

31、Flink 架構、原理與部署測試

32、為什麼說流處理即未來?

33、OPPO 數據中台之基石:基於 Flink SQL 構建實時數據倉庫

34、流計算框架 Flink 與 Storm 的性能對比

35、Flink狀態管理和容錯機制介紹

36、Apache Flink 結合 Kafka 構建端到端的 Exactly-Once 處理

37、360深度實踐:Flink與Storm協議級對比

38、如何基於Flink+TensorFlow打造實時智能異常檢測平臺?只看這一篇就夠了

39、Apache Flink 1.9 重大特性提前解讀

40、Flink 全網最全資源(視頻、博客、PPT、入門、實戰、源碼解析、問答等持續更新)

41、Flink 靈魂兩百問,這誰頂得住?

源碼解析

1、Flink 源碼解析 —— 源碼編譯運行

2、Flink 源碼解析 —— 項目結構一覽

3、Flink 源碼解析—— local 模式啟動流程

4、Flink 源碼解析 —— standalone session 模式啟動流程

5、Flink 源碼解析 —— Standalone Session Cluster 啟動流程深度分析之 Job Manager 啟動

6、Flink 源碼解析 —— Standalone Session Cluster 啟動流程深度分析之 Task Manager 啟動

7、Flink 源碼解析 —— 分析 Batch WordCount 程式的執行過程

8、Flink 源碼解析 —— 分析 Streaming WordCount 程式的執行過程

9、Flink 源碼解析 —— 如何獲取 JobGraph?

10、Flink 源碼解析 —— 如何獲取 StreamGraph?

11、Flink 源碼解析 —— Flink JobManager 有什麼作用?

12、Flink 源碼解析 —— Flink TaskManager 有什麼作用?

13、Flink 源碼解析 —— JobManager 處理 SubmitJob 的過程

14、Flink 源碼解析 —— TaskManager 處理 SubmitJob 的過程

15、Flink 源碼解析 —— 深度解析 Flink Checkpoint 機制

16、Flink 源碼解析 —— 深度解析 Flink 序列化機制

17、Flink 源碼解析 —— 深度解析 Flink 是如何管理好記憶體的?

18、Flink Metrics 源碼解析 —— Flink-metrics-core

19、Flink Metrics 源碼解析 —— Flink-metrics-datadog

20、Flink Metrics 源碼解析 —— Flink-metrics-dropwizard

21、Flink Metrics 源碼解析 —— Flink-metrics-graphite

22、Flink Metrics 源碼解析 —— Flink-metrics-influxdb

23、Flink Metrics 源碼解析 —— Flink-metrics-jmx

24、Flink Metrics 源碼解析 —— Flink-metrics-slf4j

25、Flink Metrics 源碼解析 —— Flink-metrics-statsd

26、Flink Metrics 源碼解析 —— Flink-metrics-prometheus

26、Flink Annotations 源碼解析

27、Flink 源碼解析 —— 如何獲取 ExecutionGraph ?

28、大數據重磅炸彈——實時計算框架 Flink

29、Flink Checkpoint-輕量級分散式快照

30、Flink Clients 源碼解析原文出處:zhisheng的博客,歡迎關註我的公眾號:zhisheng


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 類和對象 java 是面向對象的語言 即 萬物皆對象c語言是面向過程語言 一、怎麼去描述一個對象? (1)..靜態的(短時間內不會改變的東西) 例如:外觀,顏色,品牌 (2).動態的(動作) 可以乾什麼:播放音樂,電影 二、java中,描述一個對象從兩方面出發 (1).靜態(屬性)姓名 年齡 籍貫 ...
  • 首先我們先來看看Map集合獲取元素的三種常見方法(1)entrySet(),(2)keySet(),(3)values() 1. entrySet():(1)先返回map集合的所有"映射"的Set集合,這裡規範每個"映射"的類型為Map.Entry<K, V> (2)再通過迭代取出所有的“映射”,再 ...
  • 答案:階梯數為119。 note:該題的答案,只有119,即程式中的 i 的限定值放大至無限大,最終只有當 i = 16,即 x = 7*(16+1) = 119時,才是正確答案。有興趣的同學可以自己親測一下。 ...
  • 點乘和矩陣乘的區別: 1)點乘(即“ \ ”) 各個矩陣對應元素做乘法 若 w 為 m\ 1 的矩陣,x 為 m\ n 的矩陣,那麼通過點乘結果就會得到一個 m\ n 的矩陣。 若 w 為 m\ n 的矩陣,x 為 m\ n 的矩陣,那麼通過點乘結果就會得到一個 m\ n 的矩陣。 w的列數 只能為 ...
  • 題目鏈接 FZU - 2295 Human life 題目分析 題意:你在玩一個游戲,在其中你可以通過學習一些技能,但是學習某些技能之前,可能還要學習一些其他的技能,並且學習任何技能都有一定的花費; 而我們可以通過掌握某些工作以獲取報酬,為了掌握這一工作,我們必須學會特定的技能。 不過有些工作彼此之 ...
  • 時隔一年多,在掌握了Spring、SpringBoot、SpringCloud之後 我再次回頭,重新學習Spring框架 Bean的生命周期學習: 在傳統的XML配置中,可以這樣自定義初始化和銷毀方法: 註解方式的簡單使用: 註意:要有close方法,否則不會列印Car銷毀方法 列印如下: 這裡預設 ...
  • 快速排序:在一組數據中,可以將左邊的數字當作樞軸(右邊也可以),接下來要做的就是,先從右邊找到比樞軸小的數, 再從左邊找到比樞軸大的數,接著將這兩個數進行交換,重覆上述步驟找出所有符合條件的數進行交換, 最後將樞軸放到比樞軸大的數與比樞軸小的數之間。之所以要從右邊開始找,並且找到比樞軸小的數是因為交 ...
  • 原題 | Generating a PEG Parser 作者 | Guido van Rossum(Python之父) 譯者 | 豌豆花下貓(“Python貓”公眾號作者) 聲明 | 本翻譯是出於交流學習的目的,基於 "CC BY NC SA 4.0" 授權協議。為便於閱讀,內容略有改動。 首發地 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...