對於節點數超過 4000 的大型集羣,前一節描述的 MapReduce 系統開始面臨着擴展的瓶頸。 2010 年 Yahoo 的團隊開始設計下一代的 MapReduce。 (Yet Another Resource Negotiator、YARN Application Resource Nefotiator)。node
YARN 將 JobTracker 的只能劃分爲多個獨立的實體,從而改善了 MR1 面臨的擴展瓶頸問題。 JobTracker 負責做業調度和任務進度監視,追蹤任務、重啓失敗或過慢的任務和進行任務登記,例如維護計數器總數。
YARN 將這兩種角色劃分爲兩個
獨立的守護進程
:
資源管理器:
管理集羣上
資源使用
應用管理器:
管理集羣上運行任
務生命週期的應用管理器
應用管理器 與 資源管理器 協商集羣的計算資源
容器 (每一個容器都有
特定的內存上限),在這些容器上運行特定的應用程序的進程。容器由集羣節點上運行的加點監視器
(nodeManage)監視。
事實上,MapReduce 只是 YARN 應用的一種形式、YARN 應用能夠在一個集羣上共存。 例如一個 MR 應用能夠同時做爲 MPI 應用運行。大大提升了可管理性和集羣利用率。
MPI 通訊協議。的目標是高性能,大規模性,和可移植性。
YARN 上的 MR 比經典的 MR 包括更多的實體:
提交 MapReduce 的客戶端。
YARN 的資源管理器
YARN 的節點管理器
MapReduce 應用程序 master 負責協調運行 MapReduce 做業的任務。 它和 MapReduce 任務在容器中運行, 這些容器由資源管理器分配並由節點管理器進行管理。
YARN 運行 MapReduce 的過程
加入了 master、優化了失敗標記、
MR2 狀態更新傳播
早期 Hadoop 使用先進先出調度算法運行做業
不久後增長了優先級、 跟 dota 同樣 VERY_HIGH、HIGH、NORMAL、LOW、VERY_LOW。 做業調度選擇優先級時,選擇最高的做業。 FIFO 調度算法中,優先級並不支持搶佔,因此高優先級做業仍然受阻於以前已經開始的做業、長時間運行的地優先級做業。
1 公平調度器
目標是讓每一個用戶公平共享集羣能力。 做業都放在做業池中,並不會由於某個做業數較多的用戶獲得更多的集羣資源。 能夠用 map 和 reduce 的任務槽數來定製做業池的最小容量,也能夠設置每一個池的權重。
公平調度器支持搶佔機制,若是一個池在特定的一段時間未能公平共享資源,就會終止運行池中得到更多資源的任務,吧空出來的槽位讓給運行資源不足的做業池。
2 容量調度器
針對多用戶調度,容量調度器可讓用戶模擬出一個使用 FIFO 調度策略獨立的 MapReduce 集羣。 (更細粒度控制)
Map 處理
在將 壓縮 map 輸出
寫到磁盤的過程當中對他進行壓縮每每是個好主意。
默認不壓縮。
Reduce 處理
使用了壓縮的map輸出 都必須在內存中被解壓縮。 複製完全部的map 任務後。 這個階段將合併 map 輸出(排序 map 已經作完 )
輸入分片與 HDFS 塊之間的關係
一個文件被分紅5行,行的邊界與 HDFS 塊邊界沒有對齊。 分片邊界與邏輯邊界(行邊界)的邊界對齊,因此第一個分片包含前 5行,及時第五行垮了第一塊 和第二塊。第二個分片 從第六行開始。
MultipleOutputs 的 write 方法能夠指定基本路徑相對於輸出路徑進行解釋,由於他能夠包含文件路徑
分隔符(/),因此能夠
建立任意深度的路徑。
延遲輸出
FileOutputFormat 的子類會產生輸出文件,及時文件是空的。 所以 LazyOutputFormat 出現了。他能夠保證指定分區第一條記錄輸出時才真正建立文件。 要使用它, 用 JobConf 和 相關的輸出格式做爲參數來調用
set OutputFormatClass() 方法便可。
MR 高級特性
Hadoop 爲每一個做業維護若干內置計數器。
邊數據分佈
「邊數據」(side data) 是做業所需的額外的只讀數據,以輔助處理主數據集。在於如何使全部 map or reduce 任務都能方便高效的使用邊數據。
1 在做業配置中 (JobConf ) 序列化邊數據。 耗費內存 浪費時間
2 分佈式緩存,