隨著企業(yè)數(shù)據(jù)化和Hadoop的應(yīng)用越加廣泛,hadoop1.x的框架設(shè)計(jì)越來越無法滿足人們對需求,Apache一直在對Hadoop1.x進(jìn)行修改,最后推出了新一代的Hadoop2.x。從業(yè)界使用分布式系統(tǒng)的變化趨勢和 hadoop 框架的長遠(yuǎn)發(fā)展來看,MapReduce 的 JobTracker/TaskTracker 機(jī)制需要大規(guī)模的調(diào)整來修復(fù)它在可擴(kuò)展性,內(nèi)存消耗,線程模型,可靠性和性能上的缺陷。為從根本上解決舊 MapReduce 框架的性能瓶頸,促進(jìn) Hadoop 框架的更長遠(yuǎn)發(fā)展,從 0.23.0 版本開始,Hadoop 的 MapReduce 框架完全重構(gòu),發(fā)生了根本的變化。新的 Hadoop MapReduce 框架命名為 MapReduceV2 或者叫 Yarn。
創(chuàng)新互聯(lián)是專業(yè)的臺江網(wǎng)站建設(shè)公司,臺江接單;提供網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行臺江網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!一 hadoop1.0版本與2.0版本的差異
1.1 HDFS之間的差異
在Hadoop1.x中,HDFS的采用Masters/Slaves的方式設(shè)計(jì)集群,通過NameNode和DataNode的方式管理集群。在整個Hadoop1.x HDFS中分為Namespace和BlockStorageServer兩個部分。其中Namespace完全分布在NameNode節(jié)點(diǎn)中,Namespace其中包括了所有文件的元數(shù)據(jù)、p_w_picpaths鏡像和edits文件等。而BlockStorageServer分布則是分布在NameNode節(jié)點(diǎn)和Datanode節(jié)點(diǎn)上的,在NamNodee節(jié)點(diǎn)中存放了所有的Block與DataNode節(jié)點(diǎn)之間的對應(yīng)關(guān)系。而在Block的內(nèi)容數(shù)據(jù)則是在DataNode節(jié)點(diǎn)中分布式存放著。如圖1,Hadoop1.x版本HDFS示意圖所示。
圖1 Hadoop1.x版本HDFS示意圖
弊端:
1)因?yàn)镹ameNode節(jié)點(diǎn)是整個集群的中心,一旦NameNode發(fā)生宕機(jī),將會導(dǎo)致整個集群的癱瘓,直到NameNode被重啟以后問題才被解決。
2)NameNode節(jié)點(diǎn)的個數(shù)只有一個,單機(jī)的性能是有限的,并且NameNode中存放著有關(guān)DataNode節(jié)點(diǎn)的信息,因此在理論上無法實(shí)現(xiàn)橫向無限性增加DataNode節(jié)點(diǎn),這也就是為什么有NameNode最多支持4000個節(jié)點(diǎn)的由來。
Hadoop2.x實(shí)現(xiàn)聯(lián)邦HDFS,即多個NameNode節(jié)點(diǎn)并存,并且每一個NameNode節(jié)點(diǎn)管理一個Namespace,如圖2,Hadoop2.x的HDFS示意圖所示。
圖2 Hadoop2.x的HDFS示意圖
Block Pool:block池,一個NameNode管理的所有的block節(jié)點(diǎn),一個NameNode節(jié)點(diǎn)和去的Pool為一個管理單元,來管理自己的Block。
在聯(lián)邦HDFS中,每個Namespace都有自己的Block管理,但這些Block全部存放在整個DataNode集群中,如上圖所示,Namespace之間是相互隔離的,即使一個NameNode節(jié)點(diǎn)宕機(jī),也不會影響到其他NameSpace,同時也不會影響到其管理的Datanodes中的Block。
優(yōu)勢:
(1)可以做到自由的橫向無限制擴(kuò)充DataNode節(jié)點(diǎn)。
(2)可以實(shí)現(xiàn)多個NameNode并發(fā)執(zhí)行任務(wù),提高HDFS系統(tǒng)的吞吐量
(3)安全性得到很大的提示,單個NameNode節(jié)點(diǎn)的崩潰不會導(dǎo)致整個系統(tǒng)的癱瘓。
Hadoop1.x運(yùn)行MapReduce任務(wù)的流程為:
(1)Job Client提交任務(wù)給JobTracker(NameNode節(jié)點(diǎn)中),JobTracker向各個節(jié)點(diǎn)發(fā)出詢問請求,查看每個DataNode節(jié)點(diǎn)中執(zhí)行的Task(任務(wù))的個數(shù)
(2)JobTrack收集DataNodes的信息,并對Job進(jìn)行資源分配。
(3)將MapReduce任務(wù)所需的資源、信息等全部復(fù)制到Datanodes節(jié)點(diǎn)中。
(4)DataNode節(jié)點(diǎn)接受任務(wù)后,將本地的Block讀取,并形成相應(yīng)的Map和Reduce任務(wù),這些任務(wù)的管理全部由DataNodes節(jié)點(diǎn)中的TaskTracker進(jìn)行監(jiān)督。如圖3,MapReduce示意圖所示。
圖3 MapReduce示意圖
從圖中可知,JobTacker是整個Hadoop1.x MapReduce框架的中心,其承擔(dān)的任務(wù)有:接受任務(wù)、計(jì)算資源、分配資源、與DataNode進(jìn)行交流等功能。Hadoop1.x 框架在發(fā)布時收到很大的歡迎,但是隨著需求越來越大,Hadoop1.x 的MapReduce(MapReduce v1)已經(jīng)不能夠勝任現(xiàn)在的需求,主要表現(xiàn)在以下幾個問題:
(1)JobTracker是整個MapReduce v1的核心,存在單點(diǎn)故障。
(2)JobTracker管理整個MapReduce作業(yè)的任務(wù),造成資源消耗,當(dāng)map/reduce task過多的時候,JobTracker將會耗費(fèi)大量內(nèi)存,同時也增加Job Tracker fail的風(fēng)險(xiǎn)。
(3)JobTracker對DataNode進(jìn)行資源詢問,使用的Task的個數(shù),為考慮內(nèi)存和CPU的使用率等,如果將兩個大內(nèi)存的Map/reduce Task放在一個節(jié)點(diǎn)上執(zhí)行,可能會出現(xiàn)內(nèi)存溢出。
(4)代碼層中的類有些超過3000行,導(dǎo)致整個類的任務(wù)不夠明確,并且進(jìn)行修改是任務(wù)量也巨大,因此增加了維護(hù)、開發(fā)人員進(jìn)行修改的難度。
1.2.2 Hadoop2.x
為了應(yīng)對越來越大的需求,已經(jīng)MapReduce v1的弊端,Apache對MapReduce v2進(jìn)行了重新設(shè)計(jì),出現(xiàn)了MapReduce v2,也就是YARN框架。下面介紹一下YARN框架。如圖4,YARN示意圖所示。
圖4 YARN示意圖
名詞解釋:
ResourceManager:以下簡稱RM。YARN的中控模塊,負(fù)責(zé)統(tǒng)一規(guī)劃資源的使用。
NodeManager:以下簡稱NM。YARN的資源結(jié)點(diǎn)模塊,負(fù)責(zé)啟動管理container。
ApplicationMaster:以下簡稱AM。YARN中每個應(yīng)用都會啟動一個AM,負(fù)責(zé)向RM申請資源,請求NM啟動container,并告訴container做什么事情。
Container:資源容器。YARN中所有的應(yīng)用都是在container之上運(yùn)行的。AM也是在container上運(yùn)行的,不過AM的container是RM申請的。
(1)ResourceManager:在MapReduce v1中,JobTracker的任務(wù)有兩個:資源管理和任務(wù)調(diào)度。而在YARN框架中,將JobTracker的兩個核心任務(wù)進(jìn)行分離,其中的資源管理形成新的ResourceManager。ResourceManager負(fù)責(zé)管理每個NodeManager節(jié)點(diǎn)所提供的資源狀態(tài)(內(nèi)存、CPU、磁盤和帶寬等傳統(tǒng)信息)。在MapReduce任務(wù)的時候,RM會精確計(jì)算每個整個集群的資源情況,已分配給該任務(wù)合適的資源。
(2)Container:對一個節(jié)點(diǎn)的內(nèi)存、CPU等資源的描述的整體描述。
(3)ApplicationMaster:每一個MapReduce任務(wù)都對應(yīng)著一個AM,AM負(fù)責(zé)向ResourceManager索要執(zhí)行任務(wù)所需要的資源容器,根據(jù)進(jìn)程的狀態(tài)、管理進(jìn)行和處理進(jìn)程失敗的原因。
(4)NodeManager:是一個機(jī)器框架的代理,是任務(wù)執(zhí)行的容器,其管理著節(jié)點(diǎn)的諸多信息:例如內(nèi)存、CPU、硬盤、網(wǎng)絡(luò)等資源。
YARN相對于MapReduce v1的優(yōu)勢:
(1)JobTracker所承擔(dān)的龐大負(fù)擔(dān)被分割,分成了resourceManager和nodemanager。資源管理和任務(wù)調(diào)度分配在不同的節(jié)點(diǎn),并且實(shí)現(xiàn)程序的分布化、最優(yōu)化。
(2)ResourceManager資源分配不再憑借slot的個數(shù),而是根據(jù)節(jié)點(diǎn)的內(nèi)存是分配任務(wù),使得負(fù)載均衡更在完善。
(3)ResourceManager節(jié)點(diǎn)上有一個ApplicationMasters進(jìn)程,負(fù)責(zé)管理每個ApplicationMatser進(jìn)程的狀態(tài),從而實(shí)現(xiàn)監(jiān)督任務(wù)。
1.3 其它差異
MapReduce變成了和HBase和Hive等一樣的YARN上面的一個應(yīng)用;Hadoop1.x的默認(rèn)塊大小為64M,Hadoop2.x的默認(rèn)塊大小為128M;在2.x中除了datanode要向namenode報(bào)告status,nodemanager也要向ResourceManager報(bào)告status。
二、 Hadoop1.x升級Hadoop2.x實(shí)現(xiàn)
版本情況:老版本Hadoop1.0.3;新版本Hadoop2.6.4。
HOST信息:
升級所需下載安裝包:
hadoop-2.6.4.tar.gz http://apache.opencas.org/hadoop/common/hadoop-2.6.4/hadoop-2.6.4.tar.gz
jdk-8u77-linux-x64.tar.gz:官網(wǎng)下載
包的放置路徑:/usr/local/src/
創(chuàng)建新的HDFS系統(tǒng)目錄和測試文件:
[root@namenode ~]# hadoop fs -mkdir /test
[root@namenode ~]# hadoop fs -put /home/hadoop/hadoop/conf/* /test/
解壓jdk安裝包(每個節(jié)點(diǎn)都要操作):
[root@namenode ~]# cd /usr/local/src
[root@namenode ~]#tar zxvf jdk-8u77-linux-x64.tar.gz
備份舊的jdk(每個節(jié)點(diǎn)都要操作):
[root@namenode ~]#mv /usr/local/jdk1.6 /usr/local/jdk1.6.bak
替換新的jdk版本(每個節(jié)點(diǎn)都要操作):
[root@namenode ~]#mv jdk1.8.0_77 /usr/local/jdk/
修改jdk環(huán)境(每個節(jié)點(diǎn)都要操作):
[root@namenode ~]#vim /etc/profile
更改JAVA_HOME
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
[root@namenode ~]#source /etc/profile
驗(yàn)證jdk是否成功:
[root@namenode ~]#java –version
2.2 namenode節(jié)點(diǎn)操作
解壓hadoop2.6的包:
[root@namenode ~]#tar zxvf hadoop-2.6.4.tar.gz
備份hadoop1.0(每個節(jié)點(diǎn)都操作):
[root@namenode ~]#mkdir /home/hadoop/backup
[root@namenode~]#mv /home/hadoop/hadoop /home/hadoop/backup/
備份好集群namenode的元數(shù)據(jù)(${HADOOP_HOME}/conf/hdfs-site.xml中的dfs.name.dir所配置的文件夾):
[root@namenode ~]#cp –r /data/work/hdfs/name /data/backup/hdfsname.20160418.bak
安裝hadoop2.6:
[root@namenode ~]#mv /usr/local/src/hadoop-2.6.4 /home/hadoop/hadoop
[root@namenode ~]#chown -R hadoop.hadoop /home/hadoop/hadoop
切換到hadoop用戶:
[root@namenode ~]#su – hadoop
修改用戶環(huán)境(每個節(jié)點(diǎn)都操作):
[hadoop@namenode ~]$vim /home/hadoop/.bash_profile
修改:
export HADOOP_HOME=/home/hadoop/hadoop
export PATH=$PATH:$HADOOP_HOME:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_HOME_WARN_SUPPRESS=1
export PATH
[hadoop@namenode ~]$source /home/hadoop/.bash_profile
p8
[hadoop@namenode ~]$cd /home/hadoop/hadoop/etc/hadoop/
[hadoop@hadoop/ ~]$vim hadoop-env.sh
修改export JAVA_HOME=/usr/local/jdk
增加export HADOOP_PREFIX=/home/hadoop/hadoop
export HADOOP_HEAPSIZE=15000
[hadoop@hadoop/ ~]$vim yarn-env.sh
修改export JAVA_HOME=/usr/local/jdk
[hadoop@hadoop/ ~]$vim mapred-env.sh
修改export JAVA_HOME=/usr/local/jdk
[hadoop@hadoop/ ~]$vim hdfs-site.xml
hdfs的文件,還有map的輸出都用到了這個緩沖區(qū)容量,對于現(xiàn)在的硬件很保守,可以設(shè)置為128k
(131072),甚至是1M(太大了map和reduce任務(wù)可能會內(nèi)存溢出)
[hadoop@hadoop/ ~]$vim mapred-site.xml
[hadoop@hadoop/ ~]$vim yarn-site.xml
[hadoop@hadoop/ ~]$vim core-site.xml
新建文件目錄(所有節(jié)點(diǎn)操作)
$mkdir /home/hadoop/tmp
$mkdir /data/work/hdfs/namesecondary/
$chown -R hadoop.hadoop /home/hadoop/tmp/
$ chown -R hadoop.hadoop /data/work/hdfs/namesecondary/
啟動hdfs
[hadoop@namenode ~]$tart-dfs.sh
[hadoop@namenode ~]$hadoop-daemon.sh start namenode -upgrade
重新啟動所有守護(hù)線程
[hadoop@namenode ~]$stop-dfs.sh
[hadoop@namenode ~]$start-all.sh
查看元數(shù)據(jù)是否成功保留
[hadoop@namenode ~]$hadoop fs -ls /
成功之后停掉所有守護(hù)進(jìn)程
[hadoop@namenode ~]$stop-all.sh
修改/home/hadoop/hadoop/etc/hadoop/slaves
[hadoop@namenode ~]$vim slaves
修改:
node1
node2
將hadoop文件拷貝給其它節(jié)點(diǎn)
[hadoop@namenode ~]$scp -r /home/hadoop/hadoop node2:/home/hadoop/hadoop/
[hadoop@namenode ~]$scp -r /home/hadoop/hadoop node1:/home/hadoop/hadoop/
Node1,2節(jié)點(diǎn)修改hadoop的目錄權(quán)限
$chown -R hadoop.hadoop /home/hadoop/hadoop
namenode啟動守護(hù)線程
[hadoop@namenode ~]$start-all.sh
namenode和datanode的dfs.namenode.name.dir目錄下(本次實(shí)驗(yàn)中為/data/work/hdfs/name)會多出一個文件夾previous/或者通過jps查看信息
文件夾previous/,這是升級之前數(shù)據(jù)的備份,如果回滾也是需要有這個文件夾。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。