flink大資料專案實戰:
預設情況下,flink 允許subtasks共享slot,條件是它們都來自同乙個job的不同task的subtask。結果可能乙個slot持有該job的整個pipeline。
允許slot共享有以下兩點好處:
1.flink集群需要的任務槽與作業中使用的最高並行度正好相同(前提,保持預設slotsharinggroup)。也就是說我們不需要再去計算乙個程式總共會起多少個task了。
2.更容易獲得更充分的資源利用。如果沒有slot共享,那麼非密集型操作source/flatmap就會占用同密集型操作 keyaggregation/sink 一樣多的資源。如果有slot共享,將task的2個並行度增加到6個,能充分利用slot資源,同時保證每個taskmanager能平均分配到重的subtasks。
2.2共享slot例項
將 wordcount 的並行度從之前的2個增加到6個(source並行度仍為1),並開啟slot共享(所有operator都在default共享組),將得到如上圖所示的slot分布圖。
首先,我們不用去計算這個job會其多少個task,總之該任務最終會占用6個slots(最高並行度為6)。其次,我們可以看到密集型操作 keyaggregation/sink 被平均地分配到各個 taskmanager。
2.3 slotsharinggroup(soft)
slotsharinggroup是flink中用來實現slot共享的類,它盡可能地讓subtasks共享乙個slot。
保證同乙個group的並行度相同的sub-tasks 共享同乙個slots。運算元的預設group為default(即預設乙個job下的subtask都可以共享乙個slot)
為了防止不合理的共享,使用者也能通過api來強制指定operator的共享組,比如:somestream.filter(...).slotsharinggroup("group1");就強制指定了filter的slot共享組為group1。怎麼確定乙個未做slotsharinggroup設定運算元的slotsharinggroup什麼呢(根據上游運算元的group 和自身是否設定group共同確定)。適當設定可以減少每個slot執行的執行緒數,從而整體上減少機器的負載。
2.4 colocationgroup(強制)
colocationgroup可以保證所有的並行度相同的sub-tasks執行在同乙個slot,主要用於迭代流(訓練機器學習模型)。
如上圖所示,有兩個taskmanager,每個taskmanager有3個槽位。假設source操作並行度為3,map操作的並行度為4,sink的並行度為4,所需的task slots數與job中task的最高並行度一致,最高並行度為4,那麼使用的slot也為4。
3.2如何計算slot
如何計算乙個應用需要多少slot?
如果不設定slotsharinggroup,那麼需要的slot數為應用的最大並行度數。如果設定了slotsharinggroup,那麼需要的slot數為所有slotsharinggroup中的最大並行度之和。比如已經強制指定了map的slot共享組為test,那麼map和map下游的組為test,map的上游source的組為預設的default,此時default組中最大並行度為10,test組中最大並行度為20,那麼需要的slot=10+20=30。
隨手筆記之VC 七
tcp udp ip 協議 應用層 處理網路應用 表示層 資料表示 會話層 主機間的通訊 傳輸層 端到端的鏈結 tcp udp 網路層 定址和最短路勁 ip 資料鏈路層 介質訪問 物理層 二進位制傳輸 telnet 遠端登入協議。ftp 檔案傳輸協議 http 超文字傳輸協議 dns 網域名稱服務 ...
oracle隨手筆記
1.儲存過程中is和as沒區別檢視 用is 游標 用as 不能反過來,其他情況沒區別 2.trim是用來去除字串開頭和結尾的函式 用法 select trim leading trailing both 你要刪的東西 from 被刪的字串 test trim from dual both後面沒有引數...
C 隨手筆記
成員變數在使用初始化列表初始化時,與建構函式中初始化成員列表的順序無關,只與定義成員變數的順序有關。因為成員變數的初始化次序是根據變數在記憶體中次序有關,而記憶體中的排列順序早在編譯期就根據變數的定義次序決定了。這點在effectivec 中有詳細介紹。如果不使用初始化列表初始化,在建構函式內初始化...