hadoop 3.0新特性簡單介紹

    過去十年,Apache Hadoop從無到有,從理論概念演變到如今支撐起若干的生產集羣。接下來的十年,Hadoop將繼續壯大,並發展支撐新一輪的更大規模、高效和穩定的集羣。

    本文將向大家全面介紹即將到來的Apache Hadoop 3.0新版本——從版本發佈狀態、背後的故事,到如HDFS erasure coding、YARN federation、NN k-safety等全新的功能。

Hadoop 3.X簡介

    本次發行的Hadoop版本:hadoop-3.1.0,這是Apache Hadoop 3.1版本的第一個版本,它包含768個錯誤修復,自3.0.0以來最新的改進和增強版本。

    由於Hadoop 2.0是基於JDK 1.7開發的,而JDK 1.7在2015年4月已停止更新,這直接迫使Hadoop社區基於JDK 1.8重新發佈一個新的Hadoop版本,即hadoop 3.0。Hadoop 3.0中引入了一些重要的功能和優化,包括HDFS 可擦除編碼多Namenode支持MR Native Task優化YARN基於cgroup的內存和磁盤IO隔離YARN container resizing等。

    Apache hadoop 項目組最新消息,hadoop3.x以後將會調整方案架構,將Mapreduce 基於內存+io+磁盤,共同處理數據

改變最大的是hdfs,hdfs 通過最近block塊計算,根據最近計算原則,本地block塊,加入到內存,先計算,通過IO,共享內存計算區域,最後快速形成計算結果,比Spark快10倍。

 

Hadoop 3.0新特性

Hadoop 3.0在功能和性能方面,對hadoop內核進行了多項重大改進,主要包括:

通用性

1.精簡Hadoop內核,包括剔除過期的API和實現,將默認組件實現替換成最高效的實現(比如將FileOutputCommitter缺省實現換爲v2版本,廢除hftp轉由webhdfs替代,移除Hadoop子實現序列化庫org.apache.hadoop.Records。

2.Classpath isolation:以防止不同版本jar包衝突,比如google Guava在混合使用Hadoop、HBase和Spark時,很容易產生衝突。

3.Shell腳本重構: Hadoop 3.0對Hadoop的管理腳本進行了重構,修復了大量bug,增加了新特性,支持動態命令等。

Hadoop HDFS

Hadoop3.x中Hdfs在可靠性和支持能力上作出很大改觀:

1.HDFS支持數據的擦除編碼,這使得HDFS在不降低可靠性的前提下,節省一半存儲空間。

2.多NameNode支持,即支持一個集羣中,一個active、多個standby namenode部署方式。注:多ResourceManager特性在hadoop 2.0中已經支持。

Hadoop MapReduce

Hadoop3.X中的MapReduce較之前的版本作出以下更改:

1.Tasknative優化:爲MapReduce增加了C/C++的map output collector實現(包括Spill,Sort和IFile等),通過作業級別參數調整就可切換到該實現上。對於shuffle密集型應用,其性能可提高約30%。

2.MapReduce內存參數自動推斷。在Hadoop 2.0中,爲MapReduce作業設置內存參數非常繁瑣,涉及到兩個參數:mapreduce.{map,reduce}.memory.mb和mapreduce.{map,reduce}.java.opts,一旦設置不合理,則會使得內存資源浪費嚴重,比如將前者設置爲4096MB,但後者卻是“-Xmx2g”,則剩餘2g實際上無法讓java heap使用到。

Yarn

Yarn Timeline Service V2提供一個通用的應用程序共享信息和共享存儲模塊。可以將metrics等信息保存。

可以實現分佈式writer實例和一個可伸縮的存儲模塊。同時,v2版本在穩定性和性能上面也做出了提升,原先版本不適用於大集羣,v2版本使用hbase取代了原先的leveldb作爲後臺的存儲工具。

HDFS糾刪碼

在Hadoop3.X中,HDFS實現了Erasure Coding這個新功能。Erasure coding糾刪碼技術簡稱EC,是一種數據保護技術.最早用於通信行業中數據傳輸中的數據恢復,是一種編碼容錯技術。

它通過在原始數據中加入新的校驗數據,使得各個部分的數據產生關聯性。在一定範圍的數據出錯情況下,通過糾刪碼技術都可以進行恢復。

hadoop-3.0之前,HDFS存儲方式爲每一份數據存儲3份,這也使得存儲利用率僅爲1/3,hadoop-3.0引入糾刪碼技術(EC技術),實現1份數據+0.5份冗餘校驗數據存儲方式。

與副本相比糾刪碼是一種更節省空間的數據持久化存儲方法。標準編碼(比如Reed-Solomon(10,4))會有1.4 倍的空間開銷;然而HDFS副本則會有3倍的空間開銷。

因爲糾刪碼額外開銷主要是在重建和執行遠程讀,它傳統用於存儲冷數據,即不經常訪問的數據。當部署這個新特性時用戶應該考慮糾刪碼的網絡和CPU 開銷。 

MapReduce優化 

Hadoop3.x中的MapReduce添加了Map輸出collector的本地實現,對於shuffle密集型的作業來說,這將會有30%以上的性能提升。

支持多個NameNodes 

     最初的HDFS NameNode high-availability實現僅僅提供了一個active NameNode和一個Standby NameNode;並且通過將編輯日誌複製到三個JournalNodes上,這種架構能夠容忍系統中的任何一個節點的失敗。

    然而,一些部署需要更高的容錯度。我們可以通過這個新特性來實現,其允許用戶運行多個Standby NameNode。比如通過配置三個NameNode和五個JournalNodes,這個系統可以容忍2個節點的故障,而不是僅僅一個節點。

默認端口更改

    在hadoop3.x之前,多個Hadoop服務的默認端口都屬於Linux的臨時端口範圍(32768-61000)。這就意味着用戶的服務在啓動的時候可能因爲和其他應用程序產生端口衝突而無法啓動。

    現在這些可能會產生衝突的端口已經不再屬於臨時端口的範圍,這些端口的改變會影響NameNode, Secondary NameNode, DataNode以及KMS。與此同時,官方文檔也進行了相應的改變,具體可以參見 HDFS-9427以及HADOOP-12811。 

Namenode ports: 50470 --> 9871, 50070--> 9870, 8020 --> 9820

Secondary NN ports: 50091 --> 9869,50090 --> 9868

Datanode ports: 50020 --> 9867, 50010--> 9866, 50475 --> 9865, 50075 --> 9864

Kms server ports: 16000 --> 9600 (原先的16000與HMaster端口衝突)

數據節點均衡器 

    一個DataNode可以管理多個磁盤,正常寫入操作,各磁盤會被均勻填滿。然而,當添加或替換磁盤時可能導致此DataNode內部的磁盤存儲的數據嚴重內斜。

    這種情況現有的HDFS balancer是無法處理的。這種情況是由新intra-DataNode平衡功能來處理,通過hdfs diskbalancer CLI來調用,更多請參考HDFS Commands Guide。

新的守護進程&堆內存管理 

Hadoop守護進程和MapReduce任務的堆內存管理髮生了一系列變化。 

HADOOP-10950:介紹了配置守護集成heap大小的新方法。主機內存大小可以自動調整,HADOOP_HEAPSIZE 已棄用。

MAPREDUCE-5785:map和reduce task堆大小的配置方法,所需的堆大小不再需要通過任務配置和Java選項實現,已經指定的現有配置不受此更改影響。 

基於HDFS路由器的聯合

HDFS Router-Based Federation 添加了一個 RPC路由層,提供了多個 HDFS 命名空間的聯合視圖。與現有 ViewFs 和 HDFS Federation 功能類似,不同之處在於掛載表(mount table)由服務器端(server-side)的路由層維護,而不是客戶端。這簡化了現有 HDFS客戶端 對 federated cluster 的訪問。 

YARN 資源類型

    YARN 資源模型(YARN resource model)已被推廣爲支持用戶自定義的可數資源類型(support user-defined countable resource types),不僅僅支持 CPU 和內存。

    比如集羣管理員可以定義諸如 GPUs、軟件許可證(software licenses)或本地附加存儲器(locally-attached storage)之類的資源。YARN 任務可以根據這些資源的可用性進行調度。

隊列配置 

OrgQueue 擴展了 capacity scheduler ,通過 REST API 提供了以編程的方式來改變隊列的配置,This enables automation of queue configuration management by administrators in the queue’s administer_queue ACL。

Shell腳本重寫 

1.增加了參數衝突檢測,避免重複定義和冗餘參數

2.CLASSPATH, JAVA_LIBRARY_PATH, and LD_LIBRARY_PATH等參數的去重,縮短環境變量

3.shell腳本重構,將更多的代碼加入function中,提供重載,刪除重複代碼,便於測試

4.腳本清理和簡化

5.儘可能與當前系統保持兼容

6.提供一份Hadoop環境變量列表

磁盤平衡器

    Hadoop3.x支持單個Datanode上,不同硬盤間的數據balancer。老版本的hadoop只支持在Datanode之間進行balancer,每個節點內部不同硬盤之間若發生了數據不平衡,則沒有一個好的辦法進行處理

    現在可以通過hdfs diskbalancer命令,進行節點內部硬盤間的數據平衡。該功能默認是關閉的,需要手動設置參數dfs.disk.balancer.enabledtrue來開啓。

  

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章