Apache hadoop 項目組最新消息,hadoop3.x以后將會調(diào)整方案架構(gòu),將Mapreduce 基于內(nèi)存+io+磁盤,共同處理數(shù)據(jù)。
其實最大改變的是hdfs,hdfs 通過最近black塊計算,根據(jù)最近計算原則,本地black塊,加入到內(nèi)存,先計算,通過IO,共享內(nèi)存計算區(qū)域,最后快速形成計算結(jié)果。
1. Hadoop 3.0簡介Hadoop 2.0是基于JDK 1.7開發(fā)的,而JDK 1.7在2015年4月已停止更新,這直接迫使Hadoop社區(qū)基于JDK 1.8重新發(fā)布一個新的Hadoop版本,而這正是hadoop 3.0。
Hadoop 3.0的alpha版預(yù)計今年夏天發(fā)布,GA版本11月或12月發(fā)布。
Hadoop 3.0中引入了一些重要的功能和優(yōu)化,包括HDFS 可擦除編碼、多Namenode支持、MR Native Task優(yōu)化、YARN基于cgroup的內(nèi)存和磁盤IO隔離、YARN container resizing等。
2. Hadoop 3.0新特性Hadoop 3.0在功能和性能方面,對hadoop內(nèi)核進(jìn)行了多項重大改進(jìn),主要包括:
2.1 Hadoop Common
(1)精簡Hadoop內(nèi)核,包括剔除過期的API和實現(xiàn),將默認(rèn)組件實現(xiàn)替換成最高效的實現(xiàn)(比如將FileOutputCommitter缺省實現(xiàn)換為v2版本,廢除hftp轉(zhuǎn)由webhdfs替代,移除Hadoop子實現(xiàn)序列化庫org.apache.hadoop.Records
(2)Classpath isolation以防止不同版本jar包沖突,比如google Guava在混合使用Hadoop、HBase和Spark時,很容易產(chǎn)生沖突。(https://issues.apache.org/jira/browse/HADOOP-11656)
(3)Shell腳本重構(gòu)。 Hadoop 3.0對Hadoop的管理腳本進(jìn)行了重構(gòu),修復(fù)了大量bug,增加了新特性,支持動態(tài)命令等。https://issues.apache.org/jira/browse/HADOOP-9902
2.2 Hadoop HDFS(1)HDFS支持?jǐn)?shù)據(jù)的擦除編碼,這使得HDFS在不降低可靠性的前提下,節(jié)省一半存儲空間。(https://issues.apache.org/jira/browse/HDFS-7285)
(2)多NameNode支持,即支持一個集群中,一個active、多個standby namenode部署方式。注:多ResourceManager特性在hadoop 2.0中已經(jīng)支持。(https://issues.apache.org/jira/browse/HDFS-6440)
2.3 Hadoop MapReduce(1)Tasknative優(yōu)化。為MapReduce增加了C/C++的map output collector實現(xiàn)(包括Spill,Sort和IFile等),通過作業(yè)級別參數(shù)調(diào)整就可切換到該實現(xiàn)上。對于shuffle密集型應(yīng)用,其性能可提高約30%。(https://issues.apache.org/jira/browse/MAPREDUCE-2841)
(2)MapReduce內(nèi)存參數(shù)自動推斷。在Hadoop 2.0中,為MapReduce作業(yè)設(shè)置內(nèi)存參數(shù)非常繁瑣,涉及到兩個參數(shù):mapreduce.{map,reduce}.memory.mb和mapreduce.{map,reduce}.java.opts,一旦設(shè)置不合理,則會使得內(nèi)存資源浪費嚴(yán)重,比如將前者設(shè)置為4096MB,但后者卻是“-Xmx2g”,則剩余2g實際上無法讓java heap使用到。(https://issues.apache.org/jira/browse/MAPREDUCE-5785)
2.4 Hadoop YARN(1)基于cgroup的內(nèi)存隔離和IO Disk隔離(https://issues.apache.org/jira/browse/YARN-2619)
(2)用curator實現(xiàn)RM leader選舉(https://issues.apache.org/jira/browse/YARN-4438)
(3)containerresizing(https://issues.apache.org/jira/browse/YARN-1197)
(4)Timelineserver next generation (https://issues.apache.org/jira/browse/YARN-2928)
以下是hadoop-3.0的最新參數(shù)
hadoop-3.0HADOOPMove to JDK8+Classpath isolation on by default HADOOP-11656
Shell script rewrite HADOOP-9902
Move default ports out of ephemeral range HDFS-9427
HDFSRemoval of hftp in favor of webhdfs HDFS-5570
Support for more than two standby NameNodes HDFS-6440
Support for Erasure Codes in HDFS HDFS-7285
YARNMAPREDUCEDerive heap size or mapreduce.*.memory.mb automatically MAPREDUCE-5785
在HDFS-7285中,實現(xiàn)了Erasure Coding這個新功能.鑒于此功能還遠(yuǎn)沒有到發(fā)布的階段,可能后面此塊相關(guān)的代碼還會進(jìn)行進(jìn)一步的改造,因此只是做一個所謂的預(yù)分析,幫助大家提前了解Hadoop社區(qū)目前是如何實現(xiàn)這一功能的.本人之前也沒有接觸過Erasure Coding技術(shù),中間過程也確實有些偶然,相信本文可以帶給大家收獲.
Erasure coding糾刪碼技術(shù)簡稱EC,是一種數(shù)據(jù)保護(hù)技術(shù).最早用于通信行業(yè)中數(shù)據(jù)傳輸中的數(shù)據(jù)恢復(fù),是一種編碼容錯技術(shù).他通過在原始數(shù)據(jù)中加入新的校驗數(shù)據(jù),使得各個部分的數(shù)據(jù)產(chǎn)生關(guān)聯(lián)性.在一定范圍的數(shù)據(jù)出錯情況下,通過糾刪碼技術(shù)都可以進(jìn)行恢復(fù).下面結(jié)合圖片進(jìn)行簡單的演示,首先有原始數(shù)據(jù)n個,然后加入m個校驗數(shù)據(jù)塊.如下圖所示:
Parity部分就是校驗數(shù)據(jù)塊,我們把一行數(shù)據(jù)塊組成為Stripe條帶,每行條帶由n個數(shù)據(jù)塊和m個校驗塊組成.原始數(shù)據(jù)塊和校驗數(shù)據(jù)塊都可以通過現(xiàn)有的數(shù)據(jù)塊進(jìn)行恢復(fù),原則如下:
如果校驗數(shù)據(jù)塊發(fā)生錯誤,通過對原始數(shù)據(jù)塊進(jìn)行編碼重新生成如果原始數(shù)據(jù)塊發(fā)生錯誤, 通過校驗數(shù)據(jù)塊的解碼可以重新生成。
而且m和n的值并不是固定不變的,可以進(jìn)行相應(yīng)調(diào)整。可能有人會好奇,這其中到底是什么原理呢? 其實道理很簡單,你把上面這圖看成矩陣,由于矩陣的運算具有可逆性,所以就能使數(shù)據(jù)進(jìn)行恢復(fù),給出一張標(biāo)準(zhǔn)的矩陣相乘圖,大家可以將二者關(guān)聯(lián)。
3. Hadoop3.0 總結(jié)
Hadoop 3.0的alpha版預(yù)計今年夏天發(fā)布,GA版本11月或12月發(fā)布。
Hadoop 3.0中引入了一些重要的功能和優(yōu)化,包括HDFS 可擦除編碼、多Namenode支持、MR Native Task優(yōu)化、YARN基于cgroup的內(nèi)存和磁盤IO隔離、YARN container resizing等。