官术网_书友最值得收藏!

2.3 Hadoop體系結(jié)構(gòu)

Hadoop體系結(jié)構(gòu)包括許多內(nèi)容,最底層的是HDFS,它存儲(chǔ)Hadoop集群中所有存儲(chǔ)節(jié)點(diǎn)上的文件。HDFS的上一層是MapReduce引擎,由JobTrackers和TaskTrackers組成。除此之外,Hadoop體系結(jié)構(gòu)還包括數(shù)據(jù)倉庫Hive、數(shù)據(jù)流處理Pig、數(shù)據(jù)挖掘庫Mahout和實(shí)時(shí)分布式數(shù)據(jù)庫Hbase等,但最根本的、最重要的還是HDFS和MapReduce。Hadoop體系結(jié)構(gòu)如圖2-1所示。

圖2-1 Hadoop體系結(jié)構(gòu)

2.3.1 HDFS體系結(jié)構(gòu)

HDFS對外部客戶機(jī)而言,就像一個(gè)傳統(tǒng)的分級文件系統(tǒng),可以創(chuàng)建、刪除、移動(dòng)或重命名文件等。但是HDFS的架構(gòu)是基于一組特定的節(jié)點(diǎn)構(gòu)建的,這是由它自身的特點(diǎn)決定的。HDFS是一個(gè)主/從(Mater/Slave)體系結(jié)構(gòu),其中有兩類節(jié)點(diǎn),一類是元數(shù)據(jù)節(jié)點(diǎn)NameNode,另一類是數(shù)據(jù)節(jié)點(diǎn)DataNode。兩類節(jié)點(diǎn)分別承擔(dān)Master和Worker具體任務(wù)的執(zhí)行節(jié)點(diǎn)。體系中只有一個(gè)NameNode,它在HDFS內(nèi)部提供元數(shù)據(jù)服務(wù);體系中有多個(gè)DataNode,它為HDFS提供存儲(chǔ)塊。由于分布式存儲(chǔ)的性質(zhì),客戶端聯(lián)系NameNode以獲取文件的元數(shù)據(jù),而真正的文件I/O操作是直接和DataNode進(jìn)行交互的。但由于NameNode只有一個(gè),如果NameNode出現(xiàn)問題,則Hadoop無法正常使用,這是HDFS的一個(gè)缺點(diǎn)。

(1)NameNode(名稱節(jié)點(diǎn))——管理文件系統(tǒng)的命名空間

NameNode是一個(gè)通常在HDFS實(shí)例中的單獨(dú)機(jī)器上運(yùn)行的軟件,它負(fù)責(zé)管理文件系統(tǒng)名稱空間和控制外部客戶機(jī)的訪問。NameNode決定是否將文件映射到DataNode的復(fù)制塊上。有三個(gè)常見復(fù)制塊,其中第一個(gè)和第二個(gè)復(fù)制塊存儲(chǔ)在同一機(jī)架的不同節(jié)點(diǎn)上,最后一個(gè)復(fù)制塊存儲(chǔ)在不同機(jī)架的某個(gè)節(jié)點(diǎn)上。

要注意經(jīng)過NameNode的不是實(shí)際具體的I/O事務(wù),而是表示DataNode和塊的文件映射的元數(shù)據(jù)。當(dāng)外部客戶機(jī)發(fā)送請求要求創(chuàng)建文件時(shí),NameNode會(huì)以塊標(biāo)識(shí)和該塊的第一個(gè)副本的DataNode IP地址作為響應(yīng)。此NameNode還會(huì)通知其他將要接收該塊副本的DataNode。

(2)DataNode(數(shù)據(jù)節(jié)點(diǎn))——文件系統(tǒng)中真正存儲(chǔ)數(shù)據(jù)的地方

DataNode也是一個(gè)通常在HDFS實(shí)例中的單獨(dú)機(jī)器上運(yùn)行的軟件。DataNode通常以機(jī)架的形式組織,機(jī)架通過一個(gè)交換機(jī)將所有系統(tǒng)連接起來。Hadoop的一個(gè)假設(shè)是:機(jī)架內(nèi)部節(jié)點(diǎn)之間的傳輸速度快于機(jī)架間節(jié)點(diǎn)的傳輸速度。

DataNode響應(yīng)來自HDFS客戶機(jī)的讀寫請求。它們還響應(yīng)來自NameNode的創(chuàng)建、刪除和復(fù)制塊的命令。DataNode每3s向NameNode發(fā)送一個(gè)心跳(從節(jié)點(diǎn)的通信時(shí)間間隔)。每10次心跳后,向NameNode發(fā)送一條信息,每條消息都包含一個(gè)塊報(bào)告,NameNode可以根據(jù)這個(gè)報(bào)告驗(yàn)證塊映射和其他文件系統(tǒng)元數(shù)據(jù),確保每個(gè)數(shù)據(jù)塊有足夠的副本。如果DataNode不能發(fā)送心跳消息,NameNode將采取修復(fù)措施,重新復(fù)制在該節(jié)點(diǎn)上丟失的塊。過程如圖2-2~圖2-4所示。

圖2-2 HDFS結(jié)構(gòu)

圖2-3 HDFS寫入數(shù)據(jù)的流程

圖2-4 HDFS讀取數(shù)據(jù)的流程

存儲(chǔ)在HDFS中的文件被分成塊,然后將這些塊復(fù)制到多個(gè)計(jì)算機(jī)中。這與傳統(tǒng)的RAID架構(gòu)大不相同。塊的大小(通常為64MB)和復(fù)制的塊數(shù)量在創(chuàng)建文件時(shí)由客戶機(jī)決定。NameNode可以控制所有文件操作。HDFS內(nèi)部的所有通信都基于標(biāo)準(zhǔn)的TCP/IP。

2.3.2 MapReduce體系結(jié)構(gòu)

MapReduce主要包含4個(gè)組成部分,分別為Client、Job Tracker、Task Tracker和Task,下面詳細(xì)介紹這4個(gè)組成部分。

(1)Client

每一個(gè)Job都會(huì)在用戶端通過Client類將用戶編寫的MapReduce程序以及配置參數(shù)Configuration打包成JAR文件存儲(chǔ)在HDFS,并把路徑提交到Job Tracker的Master服務(wù),然后由Master創(chuàng)建每一個(gè)Task(即MapTask和Reduce Task)將它們分發(fā)到各個(gè)Task Tracker服務(wù)中去執(zhí)行。用戶可通過Client提供一些接口查看作業(yè)的運(yùn)行狀態(tài)。

(2)Job Tracker

Job Tracke負(fù)責(zé)資源監(jiān)控和作業(yè)調(diào)度。Job Tracker監(jiān)控所有Task Tracker與Job的健康狀況,一旦發(fā)現(xiàn)失敗,就將相應(yīng)的任務(wù)轉(zhuǎn)移到其他節(jié)點(diǎn);同時(shí),Job Tracker會(huì)跟蹤任務(wù)的執(zhí)行進(jìn)度、資源使用量等信息,并將這些信息告訴任務(wù)調(diào)度器(Task Scheduler),而調(diào)度器會(huì)在資源出現(xiàn)空閑時(shí),選擇合適的任務(wù)使用這些資源。在Hadoop中,任務(wù)調(diào)度器是一個(gè)可插拔的模塊,用戶可以根據(jù)自己的需要設(shè)計(jì)相應(yīng)的調(diào)度器。

(3)Tas Tracker

Task Tracker會(huì)周期性地通過Heartbeat將本節(jié)點(diǎn)上資源的使用情況和任務(wù)的運(yùn)行進(jìn)度匯報(bào)給Job Tracker,同時(shí)接收J(rèn)ob Tracker發(fā)送過來的命令并執(zhí)行相應(yīng)的操作(如啟動(dòng)新任務(wù)、殺死任務(wù)等)。Task Tracker使用“slot”等量劃分本節(jié)點(diǎn)上的資源量。slot代表計(jì)算資源(CPU、內(nèi)存等)。一個(gè)Task獲取到一個(gè)slot后才有機(jī)會(huì)運(yùn)行,而Hadoop調(diào)度器的作用就是將各個(gè)Task Tracker上的空閑slot分配給Task使用。slot分為Map slot和Reduce slot兩種,分別供Map Task和Reduce Task使用。Task Tracker通過slot數(shù)目限定Task的并發(fā)度。

(4)Task

Task分為Map Task和Reduce Task兩種,均由Task Tracker啟動(dòng)。HDFS以固定大小的block為基本單位存儲(chǔ)數(shù)據(jù),而對于MapReduce而言,其處理單位是split。split是一個(gè)邏輯概念,它只包含一些元數(shù)據(jù)信息,比如數(shù)據(jù)起始位置、數(shù)據(jù)長度、數(shù)據(jù)所在節(jié)點(diǎn)等。它的劃分方法完全由用戶自己決定。需要注意的是,split的多少?zèng)Q定了Map Task的數(shù)目,因?yàn)槊總€(gè)split只會(huì)交給一個(gè)Map Task處理。Map Task執(zhí)行過程如圖2-5所示。

圖2-5 Map Task執(zhí)行過程

由圖2-5可知,Map Task先將對應(yīng)的split迭代解析成一個(gè)個(gè)key/value對,依次調(diào)用用戶自定義的map()函數(shù)進(jìn)行處理,最終將臨時(shí)結(jié)果存放到本地磁盤上,其中臨時(shí)數(shù)據(jù)被分成若干個(gè)partition,每個(gè)partition被一個(gè)Reduce Task處理。Reduce Task執(zhí)行過程如圖2-6所示。

圖2-6 Reduce Task執(zhí)行過程

上述過程分為三個(gè)階段。Shuffle階段:從遠(yuǎn)程節(jié)點(diǎn)上讀取Map Task中間結(jié)果。Sort階段:按照key對key/value對進(jìn)行排序。Reduce階段:依次讀取< key,value list>,調(diào)用用戶自定義的reduce()函數(shù)處理,并將最終結(jié)果存到HDFS上。

主站蜘蛛池模板: 松阳县| 道真| 铜鼓县| 永安市| 垦利县| 泰顺县| 兴海县| 云安县| 余江县| 读书| 开封市| 甘洛县| 上犹县| 佛山市| 永顺县| 贵定县| 祁连县| 凉山| 金平| 南部县| 阿克苏市| 诸城市| 施甸县| 岑溪市| 太仓市| 沙河市| 灵石县| 会宁县| 中卫市| 扶风县| 长沙市| 广饶县| 洪雅县| 崇明县| 曲水县| 建湖县| 错那县| 葫芦岛市| 石渠县| 阿合奇县| 勃利县|