1. 程式人生 > >Hadoop 3.x 新特性剖析系列2

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

共勉 manage 正常 shuff 協議 其他 停止 沖突 自動調整

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應用程序的類路徑上。如果這些傳遞依賴項的版本與應用程序使用的版本發送沖突,這可能會產生問題。

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

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失敗。

然而,業務關鍵部署需要更高程度的容錯性。因此,在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.結束語

這篇博客就和大家分享到這裏,如果大家在研究學習的過程當中有什麽問題,可以加群進行討論或發送郵件給我,我會盡我所能為您解答,與君共勉!

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