Hadoop 3.x 新特性剖析系列2

1.概述

接着上一篇博客的內容,繼續介紹Hadoop3的其餘新特性。其內容包含:優化Hadoop Shell腳本、重構Hadoop Client Jar包、支持等待Container、MapReduce任務級別本地優化、支持多個NameNode、部分默認服務端口被改變、支持文件系統鏈接器、DataNode內部添加負載均衡、重構後臺程序和任務堆管理。負載均衡

2.內容

2.2.1 優化Hadoop Shell腳本

Hadoop Shell腳本已經被重寫,用來修復已知的BUG,解決兼容性問題和一些現有安裝的更改。它還包含了一些新的特性,內容以下所示:分佈式

  • 全部Hadoop Shell腳本子系統如今都會執行hadoop-env.sh這個腳本,它容許全部環節變量位於一個位置;
  • 守護進程已經過*-daemon.sh選項從*-daemon.sh移動到了bin命令中,在Hadoop3中,咱們能夠簡單的使用守護進程來啓動、中止對應的Hadoop系統進程;
  • 觸發SSH鏈接操做如今能夠在安裝時使用PDSH;
  • ${HADOOP_CONF_DIR}如今能夠任意配置到任何地方;
  • 腳本如今測試並報告守護進程啓動時日誌和進程ID的各類狀態;

2.2.2 重構Hadoop Client Jar包

Hadoop2 中可用的Hadoop客戶端將Hadoop的傳遞依賴性拉到Hadoop應用程序的類路徑上。若是這些傳遞依賴項的版本與應用程序使用的版本發送衝突,這可能會產生問題。oop

所以,在Hadoop3中有新的Hadoop客戶端API和Hadoop客戶端運行時工件,它們將Hadoop的依賴性遮蔽到單個JAR中,Hadoop客戶端API是編譯範圍,Hadoop客戶端運行時是運行時範圍,它包含從Hadoop客戶端從新定位的第三方依賴關係。所以,你能夠將依賴項綁定到JAR中,並測試整個JAR以解決版本衝突。這樣避免了將Hadoop的依賴性泄露到應用程序的類路徑上。例如,HBase能夠用來與Hadoop集羣進行數據交互,而不須要看到任何實現依賴。post

2.2.3  支持等待容器和分佈式調度

在Hadoop3 中引入了一種新型執行類型,即等待容器,即便在調度時集羣沒有可用的資源,它也能夠在NodeManager中被調度執行。在這種狀況下,這些容器將在NM中排隊等待資源啓動,等待榮容器比默認容器優先級低,所以,若是須要,能夠搶佔默認容器的空間,這樣能夠提供機器的利用率。以下圖所示:性能

默認容器對於現有的YARN容器,它們由容量調度分配,一旦被調度到節點,就保證有可用的資源使它們執行當即開始。此外,只要沒有故障發生,這些容器就能夠容許完畢。學習

等待容器默認由中心RM分配,但還增長了支持以容許等待容器被分佈式調度,該調度羣被實現於AM和RM協議的攔截器。測試

 2.2.4 MapReduce任務級別本地化優化

在Hadoop3中,本地的Java實現已加入MapReduce地圖輸出器,對於Shuffle密集的做業,這樣能夠提升30%或者更高的性能。優化

它們添加了映射輸出收集器的本機實現,讓MapTask基於JNI來本機優化。基本思想是添加一個NativeMapOutputCollector收集器來處理映射器發出的鍵值對,所以Sort、Spill、文件序列化均可以在本機代碼中完成。阿里雲

2.2.5 支持多個NameNode節點

在Hadoop2中,HDFS NameNode高可用體系結構有一個Active和Standby NameNode,經過JournalNodes,該體系結構可以容忍任何一個NameNode失敗。3d

然而,業務關鍵部署須要更高程度的容錯性。所以,在Hadoop3中容許用戶運行多個備用的NameNode。例如,經過配置三個NameNode(1個Active NameNode和2個Standby NameNode)和5個JournalNodes節點,集羣能夠容忍2個NameNode節點故障。以下圖所示:

2.2.6 默認的服務端口被修改

早些時候,多個Hadoop服務的默認端口位於Linux端口範圍之內。除非客戶端程序明確的請求特定的端口號,不然使用的端口號是臨時的,所以,在啓動時,服務有時會由於與其餘另外一個應用程序衝突而沒法綁定到端口。

所以,具備臨時範圍衝突端口已經被移除該範圍,影響多個服務的端口號,即NameNode、Secondary NameNode、DataNode等以下所示:

Daemon App Hadoop2 Port Hadoop3 Port
NameNode Port Hadoop HDFS NameNode 8020 9820
  Hadoop HDFS NameNode HTTP UI 50070 9870
  Hadoop HDFS NameNode HTTPS UI 50470 9871
Secondary NameNode Port Secondary NameNode HTTP 50091 9869
  Secondary NameNode HTTP UI 50090 9868
DataNode Port Hadoop HDFS DataNode IPC 50020 9867
  Hadoop HDFS DataNode 50010 9866
  Hadoop HDFS DataNode HTTP UI 50075 9864
  Hadoop HDFS DataNode HTTPS UI 50475 9865

2.2.6 支持文件系統鏈接器

Hadoop如今支持與微軟 Azure數據和阿里雲對象存儲系統的集成。它能夠做爲一種替代Hadoop兼容的文件系統,首先添加微軟Azure數據,而後添加阿里雲對象存儲系統。

2.2.7 DataNode內部負載均衡

單個數據節點配置多個數據磁盤,在正常寫入操做期間,數據被均勻的劃分,所以,磁盤被均勻填充。可是,在維護磁盤時,添加或者替換磁盤會致使DataNode節點存儲出現偏移,這種狀況在早期的HDFS文件系統中,是沒有被處理的。如圖下圖所示,維護前和維護後不均衡的狀況:

 

如今Hadoop3經過新的內部DataNode平衡功能來處理這種狀況,這是經過hdfs diskbalancer CLI來進行調用的。執行以後,DataNode會進行均衡處理,以下圖所示:

 

2.2.8 重構後臺程序和任務堆管理

Hadoop守護進程和MapReduce任務的堆管理已經發生了一系列的變化。

  • 配置守護進程堆大小的新方法:值得注意的是,如今能夠根據主機的內存大小進行自動調整,而且已經禁止HADOOP_HEAPSIZE變量。在HADOOP\_HEAPSIZE\_MAX 和 HADOOP\_HEAPSIZE\_MIN位置上,分別設置XMX和XMS。全部全局和守護進程特定堆大小變量如今都支持單元。若是變量僅爲一個數,它的大小爲MB。
  • Map和Reduce的堆大小的配置被簡化了,因此再也不須要任務配置做爲一個Java選項指定。已經指定的兩個現有配置不受此更改的影響。

3.總結

Hadoop3的這些新特性仍是很吸引人的,目前官方推出的穩定版本是2.9.0,發行版是3.1.0,感興趣的同窗能夠下載Hadoop3去體驗調研學習一下這些新特性。

4.結束語

這篇博客就和你們分享到這裏,若是你們在研究學習的過程中有什麼問題,能夠加羣進行討論或發送郵件給我,我會盡我所能爲您解答,與君共勉!

相關文章
相關標籤/搜索