1.概述
目前從Hadoop官網的Wiki來看,穩定版本已經發行到Hadoop2.9.0,最新版本為Hadoop3.1.0,查閱JIRA,社區已經着手迭代Hadoop3.2.0。那么,今天筆者就帶着大家來剖析一下Hadoop3,看看它給我們帶來了哪些新特性。
2. 內容
從功能上來說,Hadoop3比Hadoop2有些功能得到了增強,具體增加了哪些,后面再講。首先,我們來看看Hadoop3主要帶來了哪些變化:
- JDK:在Hadoop2時,可以使用JDK7,但是在Hadoop3中,最低版本要求是JDK8,所以低於JDK8的版本需要對JDK進行升級,方可安裝使用Hadoop3
- EC技術:Erasure Encoding 簡稱EC,是Hadoop3給HDFS拓展的一種新特性,用來解決存儲空間文件。EC技術既可以防止數據丟失,又能解決HDFS存儲空間翻倍的問題
- YARN:提供YARN的時間軸服務V.2,以便用戶和開發人員可以對其進行測試,並提供反饋意見,使其成為YARN Timeline Service v.1的替代品。
- 優化Hadoop Shell腳本
- 重構Hadoop Client Jar包
- 支持隨機Container
- MapReduce任務級本地優化
- 支持多個NameNode
- 部分默認服務端口被改變
- 支持文件系統連接器
- DataNode內部添加了負載均衡
- 重構后台程序和任務對管理
下面,筆者就為大家來一一剖析這些新特性的具體內容,其內容包含JDK版本、EC技術、YARN的時間軸服務這三類特性,其他特性筆者在后面的博客再為大家慢慢剖析。
2.1 JDK
在Hadoop 3中,所有的Hadoop JAR包編譯的環境都是基於Java8來完成的,所有如果仍然使用的是Java 7或者更低的版本,你可能需要升級到Java 8才能正常的運行Hadoop3。如下圖所示:
2.2 EC技術
首先,我們先來了解一下什么是Erasure Encoding。如下圖所示:
一般來說,在存儲系統中,EC技術主要用於廉價磁盤冗余陣列,即RAID。如上圖,RAID通過Stripping實現EC技術,其中邏輯順序數據(比如:文件)被划分成更小的單元(比如:位、字節或者是塊),並將連續單元存儲在不同的磁盤上。
然后,對原始數據單元的每個Stripe,計算並存儲一定數量的奇偶校驗單位。這個過程稱之為編碼,通過基於有效數據單元和奇偶校驗單元的解碼計算,可以恢復任意Stripe單元的錯誤。當我們想到了擦除編碼的時候,我們可以先來了解一下在Hadoop2中復制的早期場景。如下圖所示:
HDFS默認情況下,它的備份系數是3,一個原始數據塊和其他2個副本。其中2個副本所需要的存儲開銷各站100%,這樣使得200%的存儲開銷,會消耗其他資源,比如網絡帶寬。然而,在正常操作中很少訪問具有低IO活動的冷數據集的副本,但是仍然消耗與原始數據集相同的資源量。
對於EC技術,即擦除編碼存儲數據和提供容錯空間較小的開銷相比,HDFS復制,EC技術可以代替復制,這將提供相同的容錯機制,同時還減少了存儲開銷。如下圖所示:
EC和HDFS的整合可以保持與提供存儲效率相同的容錯。例如,一個副本系數為3,要復制文件的6個塊,需要消耗6*3=18個塊的磁盤空間。但是,使用EC技術(6個數據塊,3個奇偶校驗塊)來部署,它只需要消耗磁盤空間的9個塊(6個數據塊+3個奇偶校驗塊)。這些與原先的存儲空間相比較,節省了50%的存儲開銷。
由於擦除編碼需要在執行遠程讀取時,對數據重建帶來額外的開銷,因此他通常用於存儲不太頻繁訪問的數據。在部署EC之前,用戶應該考慮EC的所有開銷,比如存儲、網絡、CPU等。
2.3 YARN的時間線V.2服務
Hadoop引入YARN Timeline Service v.2是為了解決兩個主要問題:
- 提高時間線服務的可伸縮性和可靠性;
- 通過引入流和聚合來增強可用性
下面首先,我們來剖析一下它伸縮性。
2.3.1 伸縮性
YARN V1僅限於讀寫單個實例,不能很好的擴展到小集群之外。YARN V2使用了更具有伸縮性的分布式體系架構和可擴展的后端存儲,它將數據的寫入與數據的讀取進行了分離。並使用分布式收集器,本質上是每個YARN應用的收集器。讀則是獨立的實例,專門通過REST API服務來查詢
2.3.2 可用性
對於可用性的改進,在很多情況下,用戶對流或者YARN應用的邏輯組的信息比較感興趣。啟動一組或者一系列的YARN應用程序來完成邏輯應用是很常見的。如下圖所示:
2.3.3 架構體系
YARN時間線服務V2采用了一組收集器寫數據到后端進行存儲。收集器被分配並與它們專用的應用程序主機進行協作,如下圖所示,屬於該應用程序的所有數據都被發送到應用程序時間軸的收集器中,但是資源管理器時間軸收集器除外。
對於給定的應用程序,應用程序可以將數據寫入同一時間軸收集器中。此外,為應用程序運行容器的其他節點的節點管理器,還會向運行應用程序主節點的時間軸收集器寫入數據。資源管理器還維護自己的時間手機線收集器,它只發布YARN的通用生命周期事件,以保持其寫入量合理。時間的讀取器是單獨的守護進程從收集器中分離出來的,它旨在服務於REST API查詢操作。
3.總結
本篇博客先給大家剖析前面幾個特性,其內容由JDK的版本升級、EC技術的作用及優勢、YARN的時間軸V2版本的主要作用。Hadoop3后面的幾個特性,在下一篇博客為大家再剖析。
4.結束語
這篇博客就和大家分享到這里,如果大家在研究學習的過程當中有什么問題,可以加群進行討論或發送郵件給我,我會盡我所能為您解答,與君共勉!