Hadoop 具備資料儲存與運算, 這兩大基本系統架構, 除了前一章介紹的 HDFS 分散式檔案系統外, 另一個就是分散式運算系統. 第二代 Hadoop 基本預設為 YARN, 在目前 Hadoop 的架構上只要是使用 "MapReduce" 的運算模式, 就是由 YARN 來負責各項運算資源的分配與執行 (YARN 不僅用在 MapReduce 運算中), 然而 YARN 並不是單一的執行程序, 而是一套運算資源 (CPU, Memory) 管理, 分配與運算的系統, 由許多不同的 "角色", 以最佳的方式來完成整個資源的分配與運算的動作.
YARN 運作原理
相對於 Hadoop 的 HDFS 分散式檔案系統, YARN 的運作就顯得複雜得多, 而複雜的原因在於 YARN 將整個運作 (運算) 的過程細分成許多步驟, 每個步驟都由不同的 "角色" 來分擔不同的任務, 事實上每個角色都是 YARN 的基本運算單元, 利用角色分工的方式, 就可以有效率的進行資訊傳遞與資料運算的工作. 那麼 YARN 到底存在那些角色? 這些角色的功用分別為何? 角色彼此之間又是如何傳遞資訊與任務指派?
其實整個 YARN 的運作是由四大角色所組成, 分別為 "ResourceManager", "Application Master" (App Mstr), "NodeManager" 與 "Container". 每個角色說穿了其實都是一個完整的 Java 程式, 且在 YARN 運作的過程中, 都具有其獨特的功能, 各司其職已完成指派工作.
在上述角色中實際負責執行運算功能的角色為 Container, 其在執行運算過程時, 其本身存在一個標準與規範. 所有要在 Container 內執行的程式都要依循 Container 的標準與規範. 而此標準與規範則取決於這個 Container 所擁有的運算資源, 如 CPU 的效能與記憶體的多寡, 而每個 Container 可以依照不同的指派來執行不同的運算需求. YARN 的完整運作流程如下圖:
YARN 的運作流程
依照上圖的流程, 整個 YARN 執行過程步驟大致如下:
步驟一:
步驟二:
步驟三:
步驟四:
步驟五:
步驟六:
步驟七:
步驟八:
以上就是整個 YARN 大致的執行過程, 各個角色透過溝通與協調分工, 就能夠善用所有可運用的運算資源, 以最快的速度與能力來完成 Client 端的任務需求. 話雖如此這些角色分別都是存在那些機器上面呢? dn01/dn02 運算主機除了作為 DataNode 之外, 還存在三種身分, 分別是 "NodeManager", "MRAppMaster" (MapReduce 的 Application Master) 以及 "YarnChild" (執行 MapReduce 程式的 Container), 在 dn01 或 dn02 運算主機輸入以下指令就可以看到所有的角色:
在實際任務執行上, 則會依據任務的指派有角色改變的情況發生.
MapReduce 的軟體架構
前面提到 YARN 是用來進行運算資源的分配與管理, 而從 Hadoop 2.x 版本開始, YARN 已經可以支援不同的運算模式的資料處理, 像是 Streaming (串流), Graph (關聯資料) 以及 Hadoop 1.x 版本預設的運算模式 "MapReduce".
MapReduce 的運算模式其實分為兩個部分: 一部分為 "Map"; 另一部分為 "Reduce". 兩者都是可以獨立運作的程式, 換句話說兩者都是可以獨立運作的 "Container". 不過 Map 與 Reduce 必須互相搭配才能完成整個 MapReduce 的運算, 其結果才會完整. 一個完整的 MapReduce 運算可以再細分為許多不同的處理程序:
上面流程可以分為六個處理步驟:
步驟一: "Input"
步驟二: "Splitting"
步驟三: "Mapping"
步驟四: "Shuffing"
步驟五: "Reducing"
步驟六: "Final Result"
Timeline Server
除了前面所述的四大角色外, 在所有 YARN 角色當中, 其實還有一個角色 "Timeline Server". 不過這一個角色相對特別, 因為它實際並不擔負任何與資源分配或是運算執行相關的工作. 這個角色是用來取代 Hadoop 1.x 版本中的 JobHistory Server, 並記錄 MapReduce 的 Log 資訊, 但是 Timeline Server 目前不僅記錄 MapReduce 的 Log, 另外也記錄像是 Streaming (串流), Graph (關聯資料) 的 Log 資訊. 因此 Hadoop 發展出一個通用的 Log Server 就是 "Timeline Server".
沒有留言:
張貼留言