在hadoop1.x時代,hadoop中的mapreduce同時處理業務邏輯運算和資源的排程,耦合性較大。
在hadoop2.x時代,增加了yarn。yarn只負責資源的排程,mapreduce只負責運算
yarn是乙個資源排程平台,負責為運算程式提供伺服器運算資源,相當於乙個分布式的作業系統平台,而mapreduce等運算程式則相當於執行於作業系統之上的應用程式。
yarn
主要由resourcemanager
、nodemanager、和
container
等元件構成。
1. 資源:在 yarn 的環境下,資源特指計算資源,包括 cpu 和記憶體。計算機的每個程序都會占用一定的 cpu 和記憶體,任務需要先向 rm 申請到資源後才能獲准在 nm 上啟動自己的程序。
2. 佇列:yarn 將整個集群的資源劃分為佇列,每個使用者的任務必須提交到指定佇列。同時限制每個佇列的大小,防止某個使用者的任務占用整個集群,影響了其他使用者的使用。
3. vcore & mem:邏輯 cpu 和邏輯記憶體,每個 nm 會向 rm 匯報自己有多少 vcore 和記憶體可用,具體數值由集群管理員配置。比如一台48核,128g記憶體的機器,可以配置40vcore,120g記憶體,意為可以對外提供這麼多資源。具體數值可能根據實際情況有所調整。每個 nm 的邏輯資源加起來,就是整個集群的總資源量。
4. minresources & maxresources:為了使每個佇列都能得到一定的資源,同時又不浪費集群的空閒資源,佇列的資源設定都是「
彈性」的。每個佇列都有 min 和 max 兩個資源值,min 表示只要需求能達到,集群一定會提供這麼多資源;如果資源需求超過了 min 值而同時集群仍有空閒資源,則仍然可以滿足;但又限制了資源不能無限申請以免影響其他任務,資源的分配不會超過 max 值。
1. 使用者使用客戶端向 rm 提交乙個任務job,同時指定提交到哪個佇列和需要多少資源。使用者可以通過每個計算引擎的對應引數設定,如果沒有特別指定,則使用預設設定。
3. am 向 rm 註冊後根據自己任務的需要,向 rm 申請 container,包括數量、所需資源量、所在位置等因素。
4. 如果佇列有足夠資源,rm 會將 container 分配給有足夠剩餘資源的 nm,由 am 通知 nm 啟動 container。
5. container 啟動後執行具體的任務,處理分給自己的資料。nm 除了負責啟動 container,還負責監控它的資源使用狀況以及是否失敗退出等工作,如果 container 實際使用的記憶體超過申請時指定的記憶體,會將其殺死,保證其他 container 能正常執行。
6. 各個 container 向 am 匯報自己的進度,都完成後,am 向 rm 登出任務並退出,rm 通知 nm 殺死對應的 container,任務結束。
container設定多少資源合適?
如果 container 記憶體設定得過低,而實際使用的記憶體較多,則可能會被 yarn 在執行過程中殺死,無法正常執行。而如果 container 內部執行緒併發數較多而 vcore 設定的較少,則可能會被分配到乙個 load 已經比較高的機器上,導致執行緩慢。所以需要預估單個 container 處理的資料量對應的記憶體,同時 vcore 數設定的不應該比併發執行緒數低。
出身高貴,野心勃勃的的包管理器 yarn
yarn 官網 yarn 是由facebook google exponent 和 tilde 聯合推出了乙個新的 js 包管理工具,它仍然使用 npm 的registry,不過提供了全新 cli 來對包進行管理 過去,yarn 的出現極大的搶奪了 npm 的市場,甚至有人戲言,npm 只剩下乙個 ...
出身最奇特的程式設計師
誰能想到,上面這個濃眉大眼的人,曾經也是個程式設計師 不說歌手,nba前超巨龍王波什,也對程式設計有著濃厚的興趣 影帝湯姆漢克斯,開發打字應用程式hanx writer,曾衝蘋果商店平板電腦應用程式榜首 看來跨界到程式設計師圈是一種流行啊,上面僅僅是幾個例子,現實中還有很多,出身 非常奇特 的程式設...
php函式的巢狀之謎
一定要小心變數作用域 functioninsert dynamic 現在還不能呼叫bar 函式,因為它還不存在 insert dynamic 現在可以呼叫bar 函式了,因為insert dynamic 函式 的執行使得bar 函式變為已定義的函式 bar 全域性和區域性要搞清。擴充套件 函式巢狀,...