溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Hadoop1.x版本升級Hadoop2.x

發(fā)布時間:2020-07-27 15:13:08 來源:網(wǎng)絡(luò) 閱讀:842 作者:YU文武貝 欄目:大數(shù)據(jù)

引言

隨著企業(yè)數(shù)據(jù)化和Hadoop的應(yīng)用越加廣泛,hadoop1.x的框架設(shè)計越來越無法滿足人們對需求,Apache一直在對Hadoop1.x進行修改,最后出了新一代的Hadoop2.x。從業(yè)界使用分布式系統(tǒng)的變化趨勢和 hadoop 框架的長遠發(fā)展來看,MapReduce 的 JobTracker/TaskTracker 機制需要大規(guī)模的調(diào)整來修復它在可擴展性,內(nèi)存消耗,線程模型,可靠性和性能上的缺陷。為從根本上解決舊 MapReduce 框架的性能瓶頸,促進 Hadoop 框架的更長遠發(fā)展,從 0.23.0 版本開始,Hadoop 的 MapReduce 框架完全重構(gòu),發(fā)生了根本的變化。新的 Hadoop MapReduce 框架命名為 MapReduceV2 或者叫 Yarn。

 

一 hadoop1.0版本與2.0版本的差異

1.1 HDFS之間的差異

1.1.1  Hadoop1.x

在Hadoop1.x中,HDFS的采用Masters/Slaves的方式設(shè)計集群,通過NameNode和DataNode的方式管理集群。在整個Hadoop1.x HDFS中分為Namespace和BlockStorageServer兩個部分。其中Namespace完全分布在NameNode節(jié)點中,Namespace其中包括了所有文件的元數(shù)據(jù)、p_w_picpaths鏡像和edits文件等。而BlockStorageServer分布則是分布在NameNode節(jié)點和Datanode節(jié)點上的,在NamNodee節(jié)點中存放了所有的Block與DataNode節(jié)點之間的對應(yīng)關(guān)系。而在Block的內(nèi)容數(shù)據(jù)則是在DataNode節(jié)點中分布式存放著。如圖1,Hadoop1.x版本HDFS示意圖所示。

Hadoop1.x版本升級Hadoop2.x 

圖1  Hadoop1.x版本HDFS示意圖

弊端:

1)因為NameNode節(jié)點是整個集群的中心,一旦NameNode發(fā)生宕機,將會導致整個集群的癱瘓,直到NameNode被重啟以后問題才被解決。

2)NameNode節(jié)點的個數(shù)只有一個,單機的性能是有限的,并且NameNode中存放著有關(guān)DataNode節(jié)點的信息,因此在理論上無法實現(xiàn)橫向無限性增加DataNode節(jié)點,這也就是為什么有NameNode最多支持4000個節(jié)點的由來。

1.1.2  Hadoop 2.x

Hadoop2.x實現(xiàn)聯(lián)邦HDFS,即多個NameNode節(jié)點并存,并且每一個NameNode節(jié)點管理一個Namespace,如圖2,Hadoop2.x的HDFS示意圖所示。

Hadoop1.x版本升級Hadoop2.x 

圖2 Hadoop2.x的HDFS示意圖

Block Pool:block池,一個NameNode管理的所有的block節(jié)點,一個NameNode節(jié)點和去的Pool為一個管理單元,來管理自己的Block。

在聯(lián)邦HDFS中,每個Namespace都有自己的Block管理,但這些Block全部存放在整個DataNode集群中,如上圖所示,Namespace之間是相互隔離的,即使一個NameNode節(jié)點宕機,也不會影響到其他NameSpace,同也不會影響到其管理的Datanodes中的Block。

優(yōu)勢:

(1)可以做到自由的橫向無限制擴充DataNode節(jié)點。

(2)可以實現(xiàn)多個NameNode并發(fā)執(zhí)行任務(wù),提高HDFS系統(tǒng)的吞吐量

(3)安全性得到很大的提示,單個NameNode節(jié)點的崩潰不會導致整個系統(tǒng)的癱瘓。

1.2  MapReduce之間的區(qū)別

1.2.1  Hadoop1.x

Hadoop1.x運行MapReduce任務(wù)的流程為:

(1)Job Client提交任務(wù)給JobTracker(NameNode節(jié)點中),JobTracker向各個節(jié)點發(fā)出詢問請求,查看每個DataNode節(jié)點中執(zhí)行的Task(任務(wù))的個數(shù)

(2)JobTrack收集DataNodes的信息,并Job進行資源分配。

(3)將MapReduce任務(wù)所需的資源、信息等全部復制到Datanodes節(jié)點中。

(4)DataNode節(jié)點接受任務(wù)后,將本地的Block讀取,并形成相應(yīng)的Map和Reduce任務(wù),這些任務(wù)的管理全部由DataNodes節(jié)點中的TaskTracker進行監(jiān)督。如圖3,MapReduce示意圖所示。

Hadoop1.x版本升級Hadoop2.x 

圖3  MapReduce示意圖

從圖中可知,JobTacker是整個Hadoop1.x MapReduce框架的中心,其承擔的任務(wù)有:接受任務(wù)、計算資源、分配資源、與DataNode進行交流等功能。Hadoop1.x 框架在發(fā)布時收到很大的歡迎,但是隨著需求越來越大,Hadoop1.x 的MapReduce(MapReduce v1)已經(jīng)不能夠勝任現(xiàn)在的需求,主要表現(xiàn)在以下幾個問題:

(1)JobTracker是整個MapReduce v1的核心,存在單點故障

(2)JobTracker管理整個MapReduce作業(yè)的任務(wù),造成資源消耗,當map/reduce task過多的時候,JobTracker將會耗費大量內(nèi)存,同時也增加Job Tracker fail的風險。

(3)JobTracker對DataNode進行資源詢,使用的Task的個數(shù),為考慮內(nèi)存和CPU的使用率等,如果將兩個大內(nèi)存的Map/reduce Task放在一個節(jié)點上執(zhí)行,可能會出現(xiàn)內(nèi)存溢出。

(4)代碼層中的類有些超過3000行,導致整個類的任務(wù)不夠明確,并且進行修改是任務(wù)量也巨大,因此增加了維護、開發(fā)人員進行修改的難度。

1.2.2  Hadoop2.x

為了應(yīng)對越來越大的需求,已經(jīng)MapReduce v1的弊端,Apache對MapReduce v2進行了重新設(shè)計,出現(xiàn)了MapReduce v2,也就是YARN框架。下面介紹一下YARN框架。如圖4,YARN示意圖所示。

Hadoop1.x版本升級Hadoop2.x

 

Hadoop1.x版本升級Hadoop2.x

圖4  YARN示意圖

名詞解釋:

ResourceManager:以下簡稱RM。YARN的中控模塊,負責統(tǒng)一規(guī)劃資源的使用。

NodeManager:以下簡稱NM。YARN的資源結(jié)點模塊,負責啟動管理container。

ApplicationMaster:以下簡稱AM。YARN中每個應(yīng)用都會啟動一個AM,負責向RM申請資源,請求NM啟動container,并告訴container做什么事情。

Container:資源容器。YARN中所有的應(yīng)用都是在container之上運行的。AM也是在container上運行的,不過AM的container是RM申請的。

(1)ResourceManager:在MapReduce v1中,JobTracker的任務(wù)有兩個:資源管理和任務(wù)調(diào)度。而在YARN框架中,將JobTracker的兩個核心任務(wù)進行分離,其中的資源管理形成新的ResourceManager。ResourceManager負責管理每個NodeManager節(jié)點所提供的資源狀態(tài)(內(nèi)存、CPU、磁盤和帶寬等傳統(tǒng)信息)。在MapReduce任務(wù)的時候,RM會精確計算每個整個集群的資源情況,已分配給該任務(wù)合適的資源。

(2)Container:對一個節(jié)點的內(nèi)存、CPU等資源的描述的整體描述。

(3)ApplicationMaster:每一個MapReduce任務(wù)都對應(yīng)著一個AM,AM負責向ResourceManager索要執(zhí)行任務(wù)所需要的資源容器,根據(jù)進程的狀態(tài)、管理進行和處理進程失敗的原因。

(4)NodeManager:是一個機器框架的代理,是任務(wù)執(zhí)行的容器,其管理節(jié)點的諸多信息:例如內(nèi)存、CPU、硬盤、網(wǎng)絡(luò)等資源。

YARN相對于MapReduce v1的優(yōu)勢:

(1)JobTracker所承擔的龐大負擔被分割,分成了resourceManager和nodemanager。資源管理和任務(wù)調(diào)度分配在不同的節(jié)點,并且實現(xiàn)程序的分布化、最優(yōu)化。

(2)ResourceManager資源分配不再憑借slot的個數(shù),而是根據(jù)節(jié)點的內(nèi)存是分配任務(wù),使得負載均衡更在完善。

(3)ResourceManager節(jié)點上有一個ApplicationMasters進程,負責管理每個ApplicationMatser進程的狀態(tài),從而實現(xiàn)監(jiān)督任務(wù)。

1.3  其它差異

MapReduce變成了和HBase和Hive等一樣的YARN上面的一個應(yīng)用;Hadoop1.x的默認塊大小為64M,Hadoop2.x的默認塊大小為128M在2.x中除了datanode要向namenode報告status,nodemanager也要向ResourceManager報告status。

二、 Hadoop1.x升級Hadoop2.x實現(xiàn)

版本情況:老版本Hadoop1.0.3;新版本Hadoop2.6.4。

HOST信息:

Hadoop1.x版本升級Hadoop2.x

升級所需下載安裝包:

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/

Hadoop1.x版本升級Hadoop2.x

解壓jdk安裝包(每個節(jié)點都要操作):

[root@namenode ~]# cd /usr/local/src

[root@namenode ~]#tar zxvf jdk-8u77-linux-x64.tar.gz


備份舊的jdk(每個節(jié)點都要操作):

[root@namenode ~]#mv  /usr/local/jdk1.6  /usr/local/jdk1.6.bak

替換新的jdk版本(每個節(jié)點都要操作):

[root@namenode ~]#mv  jdk1.8.0_77 /usr/local/jdk/

修改jdk環(huán)境(每個節(jié)點都要操作):

[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

驗證jdk是否成功:

[root@namenode ~]#java –version


2.2  namenode節(jié)點操作

解壓hadoop2.6的包:

[root@namenode ~]#tar zxvf hadoop-2.6.4.tar.gz

備份hadoop1.0(每個節(jié)點都操作):

[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é)點都操作):

[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

2.3  修改配置文件

[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

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

  <property>

        <name>dfs.namenode.http-address</name>

        <value>namenode:50070</value>

        <description> NameNode 通過當前參數(shù) 獲得 fsp_w_picpath edits </description>

  </property>

  <property>

        <name>dfs.namenode.secondary.http-address</name>

        <value>node2:50090</value>

        <description> SecondNameNode 通過當前參數(shù) 獲得最新的 fsp_w_picpath </description>

    </property>

 

    <property>

        <name>dfs.replication</name>

        <value>2</value>

        <description> 設(shè)定 HDFS 存儲文件的副本個數(shù),默認為3 </description>

    </property>

   <property>

        <name>dfs.namenode.checkpoint.dir</name>

        <value>file:///home/hadoop/hadoop2.2/hdfs/namesecondary</value>

        <description> 設(shè)置 secondary 存放 臨時鏡像 的本地文件系統(tǒng)路徑,如果這是一個用逗號分隔的文件列表,則鏡像將會冗余復制到所有目錄,只對 secondary 有效 </description>

    </property>

 

    <property>

        <name>dfs.webhdfs.enabled</name>

        <value>true</value>

    </property>

    <property>

        <name>dfs.namenode.name.dir</name>

        <value>file:///data/work/hdfs/name/</value>

        <description> namenode 用來持續(xù)存放命名空間和交換日志的本地文件系統(tǒng)路徑 </description>

    </property>

 

    <property>

        <name>dfs.datanode.data.dir</name>

        <value>file:///data/work/hdfs</value>

        <description> DataNode 在本地存放塊文件的目錄列表,用逗號分隔 </description>

    </property>

    <property>

        <name>dfs.stream-buffer-size</name>

        <value>131072</value>

        <description> 默認是4KB,作為hadoop緩沖區(qū),用于hadoophdfs的文件和寫

hdfs的文件,還有map的輸出都用到了這個緩沖區(qū)容量,對于現(xiàn)在的硬件很保守,可以設(shè)置為128k

(131072),甚至是1M(太大了mapreduce任務(wù)可能會內(nèi)存溢出) </description>

    </property>

    <property>

        <name>dfs.namenode.checkpoint.period</name>

        <value>3600</value>

        <description> 兩次 checkpoints 之間的間隔,單位為秒,只對 secondary 有效 </description>

    </property>

</configuration>


[hadoop@hadoop/ ~]$vim mapred-site.xml

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

<property>

 <name>mapreduce.framework.name</name>

 <value>yarn</value>

</property>

</configuration>


[hadoop@hadoop/ ~]$vim yarn-site.xml

<?xml version="1.0"?>

<configuration>

<property>

  <name>yarn.nodemanager.aux-services</name>

  <value>mapreduce_shuffle</value>

</property>

</configuration>


[hadoop@hadoop/ ~]$vim core-site.xml

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

<property>

   <name>fs.defaultFS</name>

   <value>hdfs://namenode:9000/</value>

   <description> 設(shè)定 namenode 的 主機名 及 端口 </description>

</property>

 

<property>

   <name>hadoop.tmp.dir</name>

   <value>/home/hadoop/tmp</value>

   <description> 存放臨時文件的目錄 </description>

</property>

</configuration>

新建文件目錄(所有節(jié)點操作)

$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

重新啟動所有守護線程

[hadoop@namenode ~]$stop-dfs.sh

[hadoop@namenode ~]$start-all.sh

查看元數(shù)據(jù)是否成功保留

[hadoop@namenode ~]$hadoop fs -ls /

Hadoop1.x版本升級Hadoop2.x


成功之后停掉所有守護進程

[hadoop@namenode ~]$stop-all.sh


修改/home/hadoop/hadoop/etc/hadoop/slaves

[hadoop@namenode ~]$vim slaves

修改:

node1

node2


hadoop文件拷貝給其它節(jié)點

[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é)點修改hadoop的目錄權(quán)限

$chown -R hadoop.hadoop /home/hadoop/hadoop


namenode啟動守護線程

[hadoop@namenode ~]$start-all.sh


namenode和datanode的dfs.namenode.name.dir目錄下(本次實驗中為/data/work/hdfs/name)會多出一個文件夾previous/或者通過jps查看信息

文件夾previous/,這是升級之前數(shù)據(jù)的備份,如果回滾也是需要有這個文件夾。

    

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI