日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hadoop1.x版本升级Hadoop2.x

發布時間:2023/12/19 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hadoop1.x版本升级Hadoop2.x 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引言

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

?

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

1.1 HDFS之間的差異

1.1.1 ?Hadoop1.x

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

?

圖1 ?Hadoop1.x版本HDFS示意圖

弊端:

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

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

1.1.2 ?Hadoop 2.x

Hadoop2.x實現聯邦HDFS,即多個NameNode節點并存,并且每一個NameNode節點管理一個Namespace,如圖2,Hadoop2.x的HDFS示意圖所示。

?

圖2 Hadoop2.x的HDFS示意圖

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

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

優勢:

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

(2)可以實現多個NameNode并發執行任務,提高HDFS系統的吞吐量

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

1.2 ?MapReduce之間的區別

1.2.1 ?Hadoop1.x

Hadoop1.x運行MapReduce任務的流程為:

(1)Job Client提交任務給JobTracker(NameNode節點中),JobTracker向各個節點發出詢問請求,查看每個DataNode節點中執行的Task(任務)的個數

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

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

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

?

圖3 ?MapReduce示意圖

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

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

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

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

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

1.2.2 ?Hadoop2.x

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

?

圖4 ?YARN示意圖

名詞解釋:

ResourceManager:以下簡稱RM。YARN的中控模塊,負責統一規劃資源的使用。

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

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

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

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

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

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

(4)NodeManager:是一個機器框架的代理,是任務執行的容器,其管理節點的諸多信息:例如內存、CPU、硬盤、網絡等資源。

YARN相對于MapReduce v1的優勢:

(1)JobTracker所承擔的龐大負擔被分割,分成了resourceManager和nodemanager。資源管理和任務調度分配在不同的節點,并且實現程序的分布化、最優化

(2)ResourceManager資源分配不再憑借slot的個數,而是根據節點的內存是分配任務,使得負載均衡更在完善

(3)ResourceManager節點上有一個ApplicationMasters進程,負責管理每個ApplicationMatser進程的狀態,從而實現監督任務。

1.3 ?其它差異

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

二、 Hadoop1.x升級Hadoop2.x實現

版本情況:老版本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:官網下載

包的放置路徑:/usr/local/src/

創建新的HDFS系統目錄和測試文件:

[root@namenode ~]#?hadoop fs -mkdir /test

[root@namenode ~]#?hadoop fs -put /home/hadoop/hadoop/conf/* ?/test/

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

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

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


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

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

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

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

修改jdk環境(每個節點都要操作):

[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節點操作

解壓hadoop2.6的包:

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

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

[root@namenode ~]#mkdir /home/hadoop/backup

[root@namenode~]#mv?/home/hadoop/hadoop?/home/hadoop/backup/

備份好集群namenode的元數據(${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

????

修改用戶環境(每個節點都操作):

[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?通過當前參數 獲得?fsimage?和?edits </description>

??</property>

??<property>

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

????????<value>node2:50090</value>

????????<description> SecondNameNode?通過當前參數 獲得最新的?fsimage </description>

????</property>

?

????<property>

????????<name>dfs.replication</name>

????????<value>2</value>

????????<description>?設定?HDFS?存儲文件的副本個數,默認為3 </description>

????</property>

???<property>

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

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

????????<description>?設置?secondary?存放 臨時鏡像 的本地文件系統路徑,如果這是一個用逗號分隔的文件列表,則鏡像將會冗余復制到所有目錄,只對?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?用來持續存放命名空間和交換日志的本地文件系統路徑?</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緩沖區,用于hadoophdfs的文件和寫

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

(131072),甚至是1M(太大了mapreduce任務可能會內存溢出) </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>?設定?namenode?的 主機名 及 端口?</description>

</property>

?

<property>

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

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

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

</property>

</configuration>

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

$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

查看元數據是否成功保留

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


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

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


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

[hadoop@namenode ~]$vim slaves

修改:

node1

node2


hadoop文件拷貝給其它節點

[hadoop@namenode ~]$scp -r /home/hadoop/hadoop node2:/home/hadoop/hadoop/

[hadoop@namenode ~]$scp -r /home/hadoop/hadoop node1:/home/hadoop/hadoop/


Node1,2節點修改hadoop的目錄權限

$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/,這是升級之前數據的備份,如果回滾也是需要有這個文件夾。




? ? ? 本文轉自YU文武貝 51CTO博客,原文鏈接:http://blog.51cto.com/linuxerxy/1766131,如需轉載請自行聯系原作者






總結

以上是生活随笔為你收集整理的Hadoop1.x版本升级Hadoop2.x的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。