Flink 常用物理分區算子(Physical Partitioning)

Flink 物理分區算子(Physical Partitioning)

在Flink中,常見的物理分區策略有:隨機分配(Random)、輪詢分配(Round-Robin)、重縮放(Rescale)和廣播(Broadcast)。
接下來,我們通過源碼和Demo分別了解每種物理分區算子的作用和區別。

(1) 隨機分區(shuffle)
最簡單的重分區方式就是直接“洗牌”。通過調用 DataStream 的.shuffle()方法,將數據隨機地分配到下游算子的并行任務中去。
隨機分區服從均勻分布(uniform distribution),所以可以把流中的數據隨機打亂,均勻地傳遞到下游任務分區。因為是完全隨機的,所以對于同樣的輸入數據, 每次執行得到的結果也不會相同。

在這里插入圖片描述

在這里插入圖片描述
經過隨機分區之后,得到的依然是一個 DataStream。
我們可以做個簡單測試:將數據讀入之后直接打印到控制臺,將輸出的并行度設置為 2,
中間經歷一次 shuffle。執行多次,觀察結果是否相同。

package com.flink.DataStream.PhysicalPartitioning;import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;/*** flink 常用物理分區算子-shuffle:隨機分區-洗牌*/
public class flinkShuffle {public static void main(String[] args) throws Exception {StreamExecutionEnvironment streamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment();streamExecutionEnvironment.setParallelism(2);DataStreamSource<String> socketDataStreamSource = streamExecutionEnvironment.socketTextStream("localhost", 8888);// TODO 隨機分區socketDataStreamSource.shuffle().print();// TODO 輪詢分區//socketDataStreamSource.rebalance().print();// TODO 重縮放分區//socketDataStreamSource.rescale().print();// TODO 廣播//socketDataStreamSource.broadcast().print();// TODO 全局分區//socketDataStreamSource.global().print();streamExecutionEnvironment.execute();}
}

查看執行結果

  2> 12> 21> 31> 11> 22> 3

在上述實驗中,我們設置全局env的并行度為2,嘗試執行2次job,發現2次執行的結果不一致,因為shuffle的完全隨機性,將輸入流分配到不同的分區中,且每次分配可能不一樣。

(2) 輪詢分區(Round-Robin)
輪詢,簡單來說就是“發牌”,按照先后順序將數據做依次分發。通過調用 DataStream的.rebalance()方法,就可以實現輪詢重分區。
rebalance 使用的是 Round-Robin 負載均衡算法,可以將輸入流數據平均分配到下游的并行任務中去。

stream.reblance()
設置全局env的并行度為2,嘗試執行3次job,發現3次執行的結果一致
1> 1
2> 21> 1
2> 21> 1
2> 21> 1
2> 2

(3) 重縮放分區(rescale)
重縮放分區和輪詢分區非常相似。當調用 rescale()方法時,其實底層也是使用 Round-Robin 算法進行輪詢,但是只會將數據輪詢發送到下游并行任務的一部分中。
rescale 的做法是分成小團體,發牌人只給自己團體內的所有人輪流發牌。

stream.rescale()
設置全局env的并行度為2,嘗試執行3次job,發現3次執行的結果一致
1> 1
2> 21> 1
2> 21> 1
2> 21> 1
2> 2

(4) 廣播(broadcast)
這種方式其實不應該叫做“重分區”,因為經過廣播之后,數據會在不同的分區都保留一份,可能進行重復處理。
可以通過調用 DataStream 的 broadcast()方法,將輸入數據復制并發送到下游算子的所有并行任務中去。

stream.broadcast()
將輸入數據復制并發送到下游算子的所有并行任務中去
2> 1
1> 12> 2
1> 2

(5) 全局分區(global)
全局分區也是一種特殊的分區方式。這種做法非常極端,通過調用.global()方法,會將所有的輸入流數據都發送到下游算子的第一個并行子任務中去。
這就相當于強行讓下游任務并行度變成了1,所以使用這個操作需要非常謹慎,可能對程序造成很大的壓力。

stream.global()
將所有的輸入流數據都發送到下游算子的第一個并行子任務中去
強行讓下游任務并行度變成了1,即使你并行度設置為了2
1> 1
1> 21> 1
1> 21> 1
1> 2

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/167831.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/167831.shtml
英文地址,請注明出處:http://en.pswp.cn/news/167831.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

win10安裝pytorch(py39)

cuda≤11.6&#xff0c;觀察控制面板 觀察torch對應cuda版本 https://download.pytorch.org/whl/torch/ 安裝cuda11.6.0 CUDA Toolkit Archive | NVIDIA Developer cmd輸入nvcc -V 編輯國內鏡像源 .condarc anaconda prompt輸入 查看環境 conda env list 安裝py3.9…

uniapp視頻倍速播放插件,uniapp視頻試看插件——sunny-video使用文檔

sunny-video視頻倍速播放器 組件名&#xff1a;sunny-video 效果圖 img1img2img3img4 平臺差異說明 目前已應用到APP&#xff08;安卓、iOS&#xff09;、微信&#xff08;小程序、H5&#xff09;其它平臺未測試 安裝方式 本組件符合easycom規范&#xff0c;HBuilderX 2.5…

emoji

圖標的網址&#xff1a; webfx emojipedia 1.可以直接復制粘貼 2.按照其格式文本表示&#xff08;Shortcodes&#xff09; &#x1f680; &#x1f604; &#x1f92b; ?? &#x1f480; 還有關于通過鏈接引用shield.io中的圖標&#xff0c;沒有深究&#xff0c;不…

第六十三周周報

學習目標&#xff1a; 項目 實驗和論文 學習時間&#xff1a; 2023.11.18-2023.11.24 學習產出&#xff1a; 論文 對論文進行了潤色和修改 實驗 1、上周DiffusionRelative的結果無法再次復現&#xff0c;新跑的FID與以前實驗跑的結果相差不大&#xff0c;上周的結果應…

點大商城V2.5.3分包小程序端+小程序上傳提示限制分包制作教程

這幾天很多播播資源會員反饋點大商城V2.5.3小程序端上傳時提示大小超限&#xff0c;官方默認單個包都不能超過2M&#xff0c;總分包不能超20M。如下圖提示超了93KB&#xff0c;如果出現超的不多情況下可采用手動刪除一些images目錄下不使用的圖片&#xff0c;只要刪除超過100KB…

鴻蒙4.0開發筆記之DevEco Studio如何使用低代碼開發模板進行開發的詳細流程(六)

鴻蒙低代碼開發 一、什么是低代碼二、如何進行鴻蒙低代碼開發1、 創建低代碼開發工程&#xff08;方式壹&#xff09;2、已有工程則創建Visual文件&#xff08;方拾貳&#xff09; 三、低代碼開發界面介紹四、低代碼實現頁面跳轉五、低代碼開發建議 一、什么是低代碼 所謂低代碼…

Qt+xml解析

文章目錄 一、xml文件介紹1.1 XML 文件結構和基本概念1.2 XML 文件示例二、Qt讀取xml文件2.1 Qt讀取xml 步驟2.2 基本操作和函數 QXmlStreamReader2.3 錯誤處理errorString和hasError2.4 Qt讀取xml實例三、實際項目一、xml文件介紹 1.1 XML 文件結構和基本概念 XML(可擴展標…

三、ts高級筆記,

文章目錄 18、d.ts聲明文件19、Mixin混入20、Decorator裝飾器的使用21、-高級proxy攔截_Reflect元儲存22、-高級寫法Partial-Pick23、Readonly只讀_Record套對象24、高階寫法Infer占位符25、Inter實現提取類型和倒敘遞歸26、object、Object、{}的區別27、localStorage封裝28、協…

基于 STM32F7 和神經網絡的實時人臉特征提取與匹配算法實現

本文討論了如何使用 STM32F7 和神經網絡模型來實現實時人臉特征提取與匹配算法。首先介紹了 STM32F7 的硬件和軟件特點&#xff0c;然后討論了人臉特征提取和匹配算法的基本原理。接下來&#xff0c;我們將重點討論如何在 STM32F7 上實現基于神經網絡的人臉特征提取與匹配算法&…

微機原理_3

一、單項選擇題(本大題共15小題,每小題3分,共45分。在每小題給出的四個備選項中,選出一個正確的答案,請將選定的答案填涂在答題紙的相應位置上。) 在 8086 微機系統中&#xff0c;完成對指令譯碼操作功能的部件是&#xff08;)。 A. EU B. BIU C. SRAM D. DRAM 使計算機執行某…

【機器學習】聚類(一):原型聚類:K-means聚類

文章目錄 一、實驗介紹1. 算法流程2. 算法解釋3. 算法特點4. 應用場景5. 注意事項 二、實驗環境1. 配置虛擬環境2. 庫版本介紹 三、實驗內容0. 導入必要的庫1. Kmeans類a. 構造函數b. 閔可夫斯基距離c. 初始化簇心d. K-means聚類e. 聚類結果可視化 2. 輔助函數3. 主函數a. 命令…

ElasticSearch之虛擬內存

查看當前Linux系統中vm.max_map_count變量的值&#xff0c;命令如下&#xff1a; sysctl vm.max_map_count執行結果的樣例&#xff0c;如下&#xff1a; vm.max_map_count 65530修改參數vm.max_map_count的值&#xff0c;命令如下&#xff1a; sysctl -w vm.max_map_count2…

數組題目: 665. 非遞減數列、453. 最小移動次數使數組元素相等、283. 移動零、189. 旋轉數組、396. 旋轉函數

665. 非遞減數列 題解&#xff1a; 題目要求一個非遞減數列&#xff0c;我們可以考慮需要更改的情況&#xff1a; nums {4, 2, 5} 對于這個nums&#xff0c;由于2的出現導致非遞減&#xff0c;更改的情況就是要么4調到<2&#xff0c;要么2調到4,5. nums {1, 4, 2, 5} …

人工智能-注意力機制之注意力匯聚:Nadaraya-Watson 核回歸

查詢&#xff08;自主提示&#xff09;和鍵&#xff08;非自主提示&#xff09;之間的交互形成了注意力匯聚&#xff1b; 注意力匯聚有選擇地聚合了值&#xff08;感官輸入&#xff09;以生成最終的輸出。 本節將介紹注意力匯聚的更多細節&#xff0c; 以便從宏觀上了解注意力機…

Lubuntu 23.10用戶可使用LXQt 1.4桌面

導讀在眾多 Lubuntu 用戶的要求下&#xff0c;Lubuntu 開發人員決定將 LXQt 1.4 桌面環境向后移植到最新的 Lubuntu 23.10 &#xff08;Mantic Minotaur&#xff09; 版本。 是的&#xff0c;您沒看錯&#xff0c;您現在可以使用官方的 Lubuntu Backports PPA&#xff08;個人軟…

黑馬點評筆記 分布式鎖

文章目錄 分布式鎖基本原理和實現方式對比Redis分布式鎖的實現核心思路實現分布式鎖版本一Redis分布式鎖誤刪情況說明解決Redis分布式鎖誤刪問題分布式鎖的原子性問題分布式鎖-Redission分布式鎖-redission可重入鎖原理分布式鎖-redission鎖重試和WatchDog機制分布式鎖-redissi…

01、Tensorflow實現二元手寫數字識別

01、Tensorflow實現二元手寫數字識別&#xff08;二分類問題&#xff09; 開始學習機器學習啦&#xff0c;已經把吳恩達的課全部刷完了&#xff0c;現在開始熟悉一下復現代碼。對這個手寫數字實部比較感興趣&#xff0c;作為入門的素材非常合適。 基于Tensorflow 2.10.0 1、…

pandas獲取年月第一天、最后一天,加一秒、加一天、午夜時間

Timestamp對象 # ts = pandas.Timestamp(year=2023, month=10, day=15, # hour=15, minute=5, second=50, tz="Asia/Shanghai") ts = pandas.Timestamp("2023-10-15 15:05:50", tz="Asia/Shanghai") # 2023-10-15 15:05…

數據丟失預防措施包括什么

數據丟失預防措施是保護企業或個人重要數據的重要手段。以下是一些有效的預防措施&#xff1a; 可以通過域之盾軟件來實現數據防丟失&#xff0c;具體的功能包括&#xff1a; https://www.yuzhidun.cn/https://www.yuzhidun.cn/ 1、備份數據 定期備份所有重要數據&#xff0…

unittest指南——不拼花哨,只拼實用

&#x1f4e2;專注于分享軟件測試干貨內容&#xff0c;歡迎點贊 &#x1f44d; 收藏 ?留言 &#x1f4dd; 如有錯誤敬請指正&#xff01;&#x1f4e2;交流討論&#xff1a;歡迎加入我們一起學習&#xff01;&#x1f4e2;資源分享&#xff1a;耗時200小時精選的「軟件測試」資…