Hadoop2相比較於Hadoop1.x來講,HDFS的架構與MapReduce的都有較大的變化,且速度上和可用性上都有了很大的提升,Hadoop2中有兩個重要的變動:node
l HDFS的NameNodes能夠以集羣的方式佈署,加強了NameNodes的水平擴展能力和可用性;nginx
l MapReduce將JobTracker中的資源管理及任務生命週期管理(包括定時觸發及監控),拆分紅兩個獨立的組件,並改名爲YARN(Yet Another Resource Negotiator)。網絡
1.1.1、Hadoop的1.X架構的介紹架構
而在1.x中的NameNodes只可能有一個,雖然能夠經過SecondaryNameNode與NameNode進行數據同步備份,可是總會存在必定的時延,若是NameNode掛掉,可是若是有部份數據尚未同步到SecondaryNameNode上,仍是可能會存在着數據丟失的問題。框架
架構以下:工具
包含兩層:oop
Namespace學習
l 包含目錄、文件以及塊的信息雲計算
l 支持對Namespace相關文件系統的操做,如增長、刪除、修改以及文件和目錄的展現spa
Block Storage Service包含兩部份
l 塊管理(在Namenode中實現的)
提供數據節點羣集成員的登記,並按期經過心跳進行檢查。
提供塊報告以及塊的存儲位置的維護
提供對塊的操做,如對塊進行增刪改的操做及獲取塊的存儲地址
對塊的複本的的複製以及存儲位置的管理
l 存儲 - 提供Datanode進行數據的本地存儲,並提供讀寫的操做
1.1.1、Hadoop的2.X架構的介紹
在2.X中,HDFS的變化,主要體如今加強了NameNode的水平擴展及可用性,能夠同時部署多個NameNode,這些NameNodes之間是相互獨立,也就是說他們不須要相互協調,DataNode同時在全部NameNodes註冊,作爲他們共有的存儲節點,並向定時向全部的這些NameNodes發送心跳塊使用狀況的報告,並處理全部NameNodes向其發送的指令。
架構以下:
存儲塊池(Block Pool)
一個存儲塊池是由一組存儲塊組成,它屬於一個單獨的Namespace(Namenode),集羣中全部存儲塊池的存儲塊都是存放在Datanodes中的。每一個存儲塊池與其它的存儲塊池都是獨立管理的,於是其在爲新的塊生成Block IDs時,就不須要與其它Namespace(Namenode)中的存儲塊池進行協做,即便一個Namespace(Namenode)掛掉了,也不會使得Datanodes中的塊被訪問不到,由於其它Namespace(Namenode)中的存儲塊池也存放了Datanodes中全部存儲塊的信息。
一個命名空間(Namespace)和它的塊池一塊兒被稱爲命名空間向量。它是一個自包含的管理單元。當一個Namenode/namespace被刪除,存儲於Datanodes中的相應的存儲塊池也會被刪除掉,在集羣的更新過程當中,每一個命名空間向量都是以一個總體進行升級的。
集羣ID(ClusterID)
集羣ID的加入,是用於確認集羣中全部的節點,也能夠在格式化其它Namenodes時指定集羣ID,並使其加入到某個集羣中。
MapReduce在Hadoop2中稱爲MR2或YARN,將JobTracker中的資源管理及任務生命週期管理(包括定時觸發及監控),拆分紅兩個獨立的服務,用於管理所有資源的ResourceManager以及管理每一個應用的ApplicationMaster,ResourceManager用於管理嚮應用程序分配計算資源,每一個ApplicationMaster用於管理應用程序、調度以及協調。一個應用程序能夠是經典的MapReduce架構中的一個單獨的任務,也能夠是這些任務的一個DAG(有向無環圖)任務。ResourceManager及每臺機上的NodeManager服務,用於管理那臺機的用戶進程,造成計算架構。每一個應用程序的ApplicationMaster其實是一個框架具體庫,並負責從ResourceManager中協調資源及與NodeManager(s)協做執行並監控任務。
架構圖:
其中ResourceManager包含兩個主要的組件:定時調用器(Scheduler)以及應用管理器(ApplicationManager)。
定時調用器(Scheduler):
定時調度器負責嚮應用程序分配置資源,它不作監控以及應用程序的狀 態跟蹤,而且它不保證會重啓因爲應用程序自己或硬件出錯而執行失敗 的應用程序。
應用管理器(ApplicationManager):
應用程序管理器負責接收新任務,協調並提供在ApplicationMaster容 器失敗時的重啓功能。
節點管理器(NodeManager):
NodeManager是ResourceManager在每臺機器的上代理,負責容器的管 理,並監控他們的資源使用狀況(cpu,內存,磁盤及網絡等),以及向 ResourceManager/Scheduler提供這些資源使用報告。
應用總管(ApplicationMaster):
每一個應用程序的ApplicationMaster負責從Scheduler申請資源,以及 跟蹤這些資源的使用狀況以及任務進度的監控。
在1.x中,Hadoop的配置文件是放在$HADOOP_HOME/conf目錄下的,關鍵的配置文件在src目錄都有對應的存放着默認值的文件,以下:
配置文件 |
默認值配置文件 |
$HADOOP_HOME/conf/core-site.xml |
$HADOOP_HOME/src/core/core-default.xml |
$HADOOP_HOME/conf/hdfs-site.xml |
$HADOOP_HOME/src/hdfs/hdfs-default.xml |
$HADOOP_HOME/conf/mapred-site.xml |
$HADOOP_HOME/src/mapred/mapred-default.xml |
咱們在$HADOOP_HOME/conf下面配置的core-site.xml等的值,就是對默認值的一個覆蓋,若是沒有在conf下面的配置文件中設置,那麼就使用src下面對應文件中的默認值,這個在使用過程當中很是方便,也很是有助於咱們理解。
Hadoop能夠說是雲計算的代名詞,其也有不少衍生的產品,很多衍生的配置方式都聽從Hadoop的這種配置方式,如HBase的配置文件也是$HBase/conf目錄,核心配置的名稱就是hbase-site.xml,若是學習了Hadoop再去學習HBase,從配置的理解上來講,就會有一種親切的感受。
但是在2.x中,Hadoop的架構發生了變化,而配置文件的路徑也發生了變化,放到了$HADOOP_HOME/etc/hadoop目錄,這樣修改的目的,應該是讓其更接近於Linux的目錄結構吧,讓Linux用戶理解起來更容易。Hadoop 2.x中配置文件的幾個主要的變化:
l 去除了原來1.x中包括的$HADOOP_HOME/src目錄,該目錄包括關鍵配置文件的默認值;
l 默認不存在mapred-site.xml文件,須要將當前mapred-site.xml.template文件copy一份並重命名爲mapred-site.xml,而且只是一個具備configuration節點的空文件;
l 默認不存在mapred-queues.xml文件,須要將當前mapred-queues.xml.template文件copy一份並重命名爲mapred-queues.xml;
l 刪除了master文件,如今master的配置在hdfs-site.xml經過屬性dfs.namenode.secondary.http-address來設置,以下:
<property> <name>dfs.namenode.secondary.http-address</name> <value>nginx1:9001</value> </property> |
l 增長了yarn-env.sh,用於設置ResourceManager須要的環境變量,主要須要修改JAVA_HOME;
l 增長yarn-site.xml配置文件,用於設置ResourceManager;
在1.x中,全部的命令文件,都是放在bin目錄下,沒有區分客戶端和服務端命令,而且最終命令的執行都會調用hadoop去執行;而在2.x中將服務端使用的命令單獨放到了sbin目錄,其中有幾個主要的變化:
l 將./bin/hadoop的功能分離。在2.x中./bin/hadoop命令只保留了這些功能:客戶端對文件系統的操做、執行Jar文件、遠程拷貝、建立一個Hadoop壓縮、爲每一個守護進程設置優先級及執行類文件,另外增長了一個檢查本地hadoop及壓縮庫是否可用的功能,詳情能夠經過命令「hadoop -help」查看。
而在1.x中,./bin/hadoop命令還包括:NameNode的管理、DataNode的管理、 TaskTracker及JobTracker的管理、服務端對文件系統的管理、文件系統的檢查、獲取隊列 信息等,詳情能夠經過命令「hadoop -help」查看。
l 增長./bin/hdfs命令。./bin/hadoop命令的功能被剝離了,並非表明這些命令不須要了,而是將這些命令提到另一個名爲hdfs的命令中,經過hdfs命令能夠對NameNode格式化及啓動操做、啓動datanode、啓動集羣平衡工具、從配置庫中獲取配置信息、獲取用戶所在組、執行DFS的管理客戶端等,詳細能夠經過「hdfs -help」查看。
l 增長./bin/yarn命令。原來1.x中對JobTracker及TaskTracker的管理,放到了新增的yarn命令中,該命令能夠啓動及管理ResourceManager、在每臺slave上面都啓一個NodeManager、執行一個JAR或CLASS文件、打印須要的classpath、打印應用程序報告或者殺死應用程序等、打印節點報告等,詳情能夠經過命令「yarn -help」查看。
l 增長./bin/mapred命令。該命令能夠用於執行一個基於管道的任務、計算MapReduce任務、獲取隊列的信息、獨立啓動任務歷史服務、遠程目錄的遞歸拷貝、建立hadooop壓縮包,詳情能夠經過「./mapred -help」。