從分散式說管理(上)
1. 模式類比
Hadoop管理的是一堆機器,公司里管理的是一群人。Hadoop的核心思想就是分而治之,一個大的任務被分配給整個集群,由master角色拆解成小任務分配給slave角色,通過分工完成細分任務,最終再將結果彙報給master進行結果的統一匯總。
這個過程中,有:
任務拆解:由master進行任務拆分,分配到下面具體的slave;
資源調度:master會監控每個slave的狀態,把任務交給合適的slave;
心跳機制:slave定期上傳心跳,彙報最新節點狀態;
冗餘機制:當某個slave無法完成某個task時,master會在其他slave重新調度這個task,從而保證整個job的正常運行。
換成人,簡直一模一樣:
任務拆解:由manager分解任務,分給一線執行人員;
資源調度:manager得了解每個部門成員的狀態,把任務交給合適的人;
心跳機制:員工要每周/每月提交周報/月報,告訴manager自己的當前情況;
冗餘機制:保證員工有技能重疊(大公司愛造螺絲釘的原因),防止單個員工出現情況而影響整個項目的進度。
2. 架構升級
Hadoop1.x的時代,存在Jobtracker這個角色,它既要管理Tasktracker(slave角色),又要監控作業狀態,壓力過重容易形成單點瓶頸。同時,需要HA,不能Jobtracker掛掉就影響整個集群。
到了Hadoop2.x時代,YARN的出現把角色進行了拆分,分解出ResourceManager、ApplicationMaster、NodeManager三種角色。ResourceManager只管集群資源的分配、任務的接受,具體任務的拆解、執行、監控則轉交給ApplicationMaster,NodeManager則承擔執行者的角色。
這個架構和1.x版本的區別,就是對管理角色的拆解。原來的管理者既要管資源又要管任務壓力太重,現在則只管資源,只要有足夠的資源,就把作業交給ApplicationMaster去處理;ApplicationMaster則統籌任務的執行,保證任務拆解、順利執行、出錯重試等,需要資源時向ResourceManager申請即可。至此資源管理和作業執行完成拆解。
換到管理人上:一個部門或一個公司一開始人少,管理者既要管理人員,又要監控多個項目進度,壓力過大。後面慢慢就開始了分化,manager負責協調人力,而項目的細節則交給具體的team leader或者項目經理。manager作為管理者依然統籌部門事項,負責對外介面。執行的權力被下放到中層,中層必須對項目深思熟慮,將心思花在如何更好地完成項目上,把事情做細緻。同時,從容錯角度,manager還得配副手,緊急時刻副手能夠快速接過管理職能,防止部門宕機。
從整體上看,管理分散式系統跟管理人非常類似,全局框架差的不多。
可是,人跟機器最大的區別在於人是不同的、異構的,每個人都有自己的背景、立場、處境、想法,正是這一點不同,導致了管理人跟管理機器的截然不同。如果把人當做機器管理,一視同仁,會出非常多的問題,而這正是技術管理者最難想明白最難做好的點。
關於對管理人的思考,請看下篇。
推薦閱讀:
※從頭學習大數據培訓課程 hadoop 分散式計算框架(十)mapreducer 編程,任務工作鏈、生產項目打包方式
※Spark排序的原理?
※做大數據相關專業,如Hadoop、Hive、Impala等研究與優化的人就業情況如何呢?
※從頭學習大數據培訓課程 Hadoop 系列教程(七)yarn 原理以及日常使用
※數據之路(Hadoop)我該如何打好基礎?