每乙個flink應用程式都對應乙個jobmanager,jobmanager是乙個控制程式執行的主程序,我們提交的job就是提交給jobmanager;
1.接受需要執行的flink應用程式,這個程式包括作業圖(jobmanager)、邏輯資料流圖(logic data-flow)、和打包的類、庫以及其他依賴資源的jar包;
2.jobmanager會將jobgraph轉化成乙個物理的可執行的資料流圖(executiongraph),這裡面就包含了可以執行的任務;
3.jobmanager在生成物理執行圖之後會向resourcemanager申請對應的資源(slot),一旦獲取到資源,就會將執行圖中的任務派發到不同的taskmanager上去執行,flink會通過心跳獲取任務執行資訊,同時負責集群之間的協調通訊,比如說checkpoint協調。
task也是乙個單獨的jvm程序,slot的數量決定了taskmanager同時能執行的task的數量
1.首先taskmanager會向資源管理器註冊自己的slot;收到資源管理器的指令後,就會提供1個或者多個插槽供job使用;
2.taskmanager還要向jobmanager通過心跳傳輸任務資訊,同時還會與其他的taskmanager之間互相互動資料。
yarn\k8s\standalone等
1.客戶端上傳jar包和配置
2.客戶端向resourcemanager提交job
5.資源申請之後,會在不同的nodemanager上分配container並啟動taskmanager,分配slot與記憶體
6.taskmanager啟動並向jobmanager註冊並通過心跳報告資訊
7.此時job提交完成.
flink中是允許子任務共享slot的,在slot中其實只是記憶體的隔離,cpu是不進行隔離的;
具體排程可以看flinkjob的執行圖
streamgraph -[通過chain將任務進行合併,在client就生成了]>- jobgraph -[根據並行度劃分子任務形成]-> executiongraph ->物理執行圖
運算元有以下型別
one-to-one(map、filter、flatmap)
redistributing(keyby、groupby、rebalance、broadcast)類似於shuffle
形成jobgraph時的優化技術,將不同的運算元任務連線成乙個operatorchain,這個優化有個前提條件:
只有並行度相同、one-to-one操作的運算元才能合併成乙個chain,關於chain的運算元也有相關的操作
disablechaining():禁止當前運算元與前後運算元形成chain
startnewchain():這個運算元與後續運算元形成chain,與前面的運算元進行隔離劃分
研磨Flink之執行時元件
一 作業管理器 jobmanager 1 控制乙個應用程式執行的主程序,每個應用程式都會被乙個不同的jobmanager所控制。2 jobmanager會先接收到應用程式,應用程式包括 作業圖 jobgraph 邏輯資料流圖和打包的所有類庫和其他資源的jar包。3 jobmanager會把jobgr...
執行時異常
常見的幾種如下 nullpointerexception 空指標引用異常 classcastexception 型別強制轉換異常。illegalargumentexception 傳遞非法引數異常。arithmeticexception 算術運算異常 arraystoreexception 向陣列中...
java執行時異常和非執行時異常的區別
建議使用執行時異常和編譯時異常叫法,便於區分和理解 非執行時異常是什麼異常?很懵逼 編譯時異常 程式沒有通過編譯器的編譯,必須處理掉這個異常程式才能正常執行,比如檔案路徑找不到異常,類找不到異常,io異常,必須用try catch或是throwable處理掉才能編譯通過 可以理解為一種特殊的語法錯誤...