分佈式概念:分佈式計算(MapReduce、Stream、Actor、流水線)

Map Reduce 模式(Hadoop海量數據的處理)

核心思想:將一個複雜的、難以直接解決的大問題,分割成一些規模較小的、可以比較簡單的或直接求解的子問題,這些子問題之間相互獨立且與原問題形式相同,遞歸地求解這些子問題,然後將子問題的解合併得到原問題的解。

MapReduce 分爲 Map 和 Reduce 兩個核心階段,其中 Map 對應“分”,即把複雜的任務分解爲若干個“簡單的任務”執行;Reduce 對應着“合”,即對 Map 階段的結果進行彙總。

MapReduce 主要包括以下三種組件:

Master,也就是 MRAppMaster,該模塊像一個大總管一樣,獨掌大權,負責分配任務,協調任務的運行,併爲 Mapper 分配 map() 函數操作、爲 Reducer 分配 reduce() 函數操作。

Mapper worker,負責 Map 函數功能,即負責執行子任務。

Reducer worker,負責 Reduce 函數功能,即負責彙總各個子任務的結果。

整個 MapReduce 的工作流程主要可以概括爲 5 個階段,即:Input(輸入)、Splitting(拆分)、Mapping(映射)、Reducing(化簡)以及 Final Result(輸出)。 

 

Stream模式(Stom實時處理)

如流水般持續湧現,且需要實時處理的數據,我們稱之爲流數據

流數據的特徵主要包括以下 4 點:

數據如流水般持續、快速地到達;海

量數據規模,數據量可達到 TB 級甚至 PB 級;

對實時性要求高,隨着時間流逝,數據的價值會大幅降低;

數據順序無法保證,也就是說系統無法控制將要處理的數據元素的順序。

 

流計算一般用於處理數據密集型應用。比如,淘寶等大型網站中,每天都會產生大量的流數據,這些數據包括用戶的搜索內容、用戶的瀏覽記錄等。實時採集用戶數據,並通過流計算進行實時數據分析,可以瞭解每個時刻數據流的變化情況,甚至可以分析用戶的實時瀏覽軌跡,從而進行個性化內容實時推薦,提高用戶體驗。

工作原理

流計算強調的是實時性,數據一旦產生就會被立即處理,當一條數據被處理完成後,會序列化存儲到緩存中,然後立刻通過網絡傳輸到下一個節點,由下一個節點繼續處理。

使用流計算進行數據處理,一般包括 3 個步驟

第一步,提交流式計算作業。

第二步,加載流式數據進行流計算。

第三步,持續輸出計算結果。

 

流計算和批量計算的區別:

批量計算可以不具有實時性,如mapreduce.

Actor 模式

一種分佈式並行計算模型。這種模型有自己的一套規則,規定了 Actor 的內部計算邏輯,以及多個 Actor 之間的通信規則。在 Actor 模型裏,每個 Actor 相當於系統中的一個組件,都是基本的計算單元。
Actor 模型的計算方式與傳統面向對象編程模型(Object-Oriented Programming,OOP)類似,一個對象接收到一個方法的調用請求(類似於一個消息),從而去執行該方法。
Actor 模式採用了異步模式,並且每個 Actor 封裝了自己的數據、方法等,解決了 OOP 存在的死鎖、競爭等問題。

Actor 模型的三要素是狀態、行爲和消息,有一個很流行的等式:Actor 模型 =(狀態 + 行爲)+ 消息。

狀態(State)。Actor 組件本身的信息,相當於 OOP 對象中的屬性。Actor 的狀態會受 Actor 自身行爲的影響,且只能被自己修改。

行爲(Behavior)。Actor 的計算處理操作,相當於 OOP 對象中的成員函數。Actor 之間不能直接調用其他 Actor 的計算邏輯。Actor 只有收到消息纔會觸發自身的計算行爲。

消息(Mail)。Actor 的消息以郵件形式在多個 Actor 之間通信傳遞,每個 Actor 會有一個自己的郵箱(MailBox),用於接收來自其他 Actor 的消息,因此 Actor 模型中的消息也稱爲郵件。一般情況下,對於郵箱裏面的消息,Actor 是按照消息達到的先後順序(FIFO)進行讀取和處理的。 

Actor 工作原理

3 個 Actor 之間基於消息和消息隊列的工作流程進行說明。這 3 個 Actor 的工作流程。

消息交互過程:

1.Actor1 和 Actor3 先後向 Actor2 發送消息,消息被依次放入 Actor2 的 MailBox 隊列的隊尾 ;

2.Actor2 從 MailBox 隊列的隊首依次取出消息執行相應的操作,由於 Actor1 先把消息發送給 Actor2,因此 Actor2 先處理 Actor1 的消息;

3.Actor2 處理完 Actor1 的消息後,更新內部狀態,並且向其他 Actor 發送消息,然後處理 Actor3 發送的消息。 

Actor 之間的消息傳遞過程(略)

優點:非阻塞性,無需使用鎖,併發度高。

缺點:不適用於對消息處理順序有嚴格要求的系統,工程中不易實現 Actor 模型。

流水線模式(TenserFlow)


數據並行計算的一種形式,就是將一個任務拆分爲多個步驟(子任務),然後多個這樣的任務通過對步驟(子任務)的重疊執行,以實現數據並行處理的場景

計算機中的流水線(Pipeline)技術是一種將每條指令拆分爲多個步驟,多條指令的不同步驟重疊操作,從而實現幾條指令並行處理的技術。現代 CPU 指令採用了流水線設計,將一條 CPU 指令分爲取指(IF)、譯碼(ID)、執行(EX)、訪存(MEM)、回寫(WB)五級流水線來執行。

在分佈式領域中,流水線計算模式也類似,它是將一個大任務拆分爲多個步驟執行,不同的步驟可以採用不同的進程執行。這,使得不同任務可以並行執行,從而提高了系統效率。

流水線計算模式的原理
TensorFlow 運用了流水線模式對輸入數據進行預處理,其數據輸入流水線主要包含 3 個步驟
提取(Extract)。通過多種途徑讀取數據,比如內存、本地的 HDD 或 SSD、遠程的 HDFS、GCS 等。數據的種類也有很多,比如圖像數據、文本數據、視頻數據等。
轉換(Transform)。使用 CPU 處理器對輸入的數據進行解析以及預處理操作,包括混合重排(shuffling)、批處理(batching), 以及一些特定的轉換。比如圖像解壓縮和擴充、文本矢量化、視頻時序採樣等。
加載(Load)。將轉換後的數據加載到執行機器學習模型的加速器設備上,比如 GPU 或 TPU。

因此 TensorFlow 的數據輸入流水線也稱爲 ETL 流水線

不使用流水線技術和使用流水線技術時,CPU、GPU/TPU 的訓練過程對比:

使用流水線技術的訓練過程:

將訓練步驟的數據預處理和數據訓練過程重疊到一起。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章