姓名:穆培婷
學(xué)號(hào):17101223414
專業(yè):軟件工程
本文轉(zhuǎn)載自:http://www.cnblogs.com/yinghun/p/6228648.html
【嵌牛導(dǎo)讀】:Hadoop是一個(gè)開發(fā)和運(yùn)行處理大規(guī)模數(shù)據(jù)的軟件平臺(tái),是Appach的一個(gè)用Java語(yǔ)言實(shí)現(xiàn)開源軟件框架,實(shí)現(xiàn)在大量計(jì)算機(jī)組成的集群中對(duì)海量數(shù)據(jù)進(jìn)行分布式計(jì)算.
【嵌牛鼻子】:Hadoop? 分布式計(jì)算 ? 并行
【嵌牛提問(wèn)】:Hadoop是什么?
【嵌牛正文】:
Hadoop是什么?
Hadoop是一個(gè)開發(fā)和運(yùn)行處理大規(guī)模數(shù)據(jù)的軟件平臺(tái),是Appach的一個(gè)用Java語(yǔ)言實(shí)現(xiàn)開源軟件框架,實(shí)現(xiàn)在大量計(jì)算機(jī)組成的集群中對(duì)海量數(shù)據(jù)進(jìn)行分布式計(jì)算.
Hadoop框架中最核心設(shè)計(jì)就是:HDFS和MapReduce.HDFS提供了海量數(shù)據(jù)的存儲(chǔ),MapReduce提供了對(duì)數(shù)據(jù)的計(jì)算.
Hadoop的優(yōu)點(diǎn)
Hadoop是一個(gè)能夠?qū)Υ罅繑?shù)據(jù)進(jìn)行分布式處理的軟件框架。 Hadoop 以一種可靠、高效、可伸縮的方式進(jìn)行數(shù)據(jù)處理。
Hadoop是可靠的,因?yàn)樗僭O(shè)計(jì)算元素和存儲(chǔ)會(huì)失敗,因此它維護(hù)多個(gè)工作數(shù)據(jù)副本,確保能夠針對(duì)失敗的節(jié)點(diǎn)重新分布處理。
Hadoop是高效的,因?yàn)樗圆⑿械姆绞焦ぷ?,通過(guò)并行處理加快處理速度。
Hadoop是可伸縮的,能夠處理 PB 級(jí)數(shù)據(jù)。
此外,Hadoop 依賴于社區(qū)服務(wù),因此它的成本比較低,任何人都可以使用。
Hadoop是一個(gè)能夠讓用戶輕松架構(gòu)和使用的分布式計(jì)算平臺(tái)。用戶可以輕松地在Hadoop上開發(fā)和運(yùn)行處理海量數(shù)據(jù)的應(yīng)用程序。它主要有以下幾個(gè)優(yōu)點(diǎn):
高可靠性:Hadoop按位存儲(chǔ)和處理數(shù)據(jù)的能力值得人們信賴。
高擴(kuò)展性:Hadoop是在可用的計(jì)算機(jī)集簇間分配數(shù)據(jù)并完成計(jì)算任務(wù)的,這些集簇可以方便地?cái)U(kuò)展到數(shù)以千計(jì)的節(jié)點(diǎn)中
高效性:Hadoop能夠在節(jié)點(diǎn)之間動(dòng)態(tài)地移動(dòng)數(shù)據(jù),并保證各個(gè)節(jié)點(diǎn)的動(dòng)態(tài)平衡,因此處理速度非??臁?/p>
高容錯(cuò)性:Hadoop能夠自動(dòng)保存數(shù)據(jù)的多個(gè)副本,并且能夠自動(dòng)將失敗的任務(wù)重新分配。
低成本:與一體機(jī)、商用數(shù)據(jù)倉(cāng)庫(kù)以及QlikView、Yonghong Z-Suite等數(shù)據(jù)集市相比,hadoop是開源的,項(xiàng)目的軟件成本因此會(huì)大大降低。
Hadoop核心架構(gòu)
Hadoop
由許多元素構(gòu)成。其最底部是 Hadoop Distributed File System(HDFS),它存儲(chǔ) Hadoop
集群中所有存儲(chǔ)節(jié)點(diǎn)上的文件。HDFS的上一層是MapReduce 引擎,該引擎由 JobTrackers 和 TaskTrackers
組成。通過(guò)對(duì)Hadoop分布式計(jì)算平臺(tái)最核心的分布式文件系統(tǒng)HDFS、MapReduce處理過(guò)程,以及數(shù)據(jù)倉(cāng)庫(kù)工具Hive和分布式數(shù)據(jù)庫(kù)Hbase的介紹,基本涵蓋了Hadoop分布式平臺(tái)的所有技術(shù)核心。
HDFS
對(duì)外部客戶機(jī)而言,HDFS就像一個(gè)傳統(tǒng)的分級(jí)文件系統(tǒng)。可以創(chuàng)建、刪除、移動(dòng)或重命名文件,等等。但是
HDFS 的架構(gòu)是基于一組特定的節(jié)點(diǎn)構(gòu)建的(參見(jiàn)圖 1),這是由它自身的特點(diǎn)決定的。這些節(jié)點(diǎn)包括 NameNode(僅一個(gè)),它在 HDFS
內(nèi)部提供元數(shù)據(jù)服務(wù);DataNode,它為 HDFS 提供存儲(chǔ)塊。由于僅存在一個(gè) NameNode,因此這是 HDFS 的一個(gè)缺點(diǎn)(單點(diǎn)失?。?。
存儲(chǔ)在
HDFS 中的文件被分成塊,然后將這些塊復(fù)制到多個(gè)計(jì)算機(jī)中(DataNode)。這與傳統(tǒng)的 RAID 架構(gòu)大不相同。塊的大?。ㄍǔ?/p>
64MB)和復(fù)制的塊數(shù)量在創(chuàng)建文件時(shí)由客戶機(jī)決定。NameNode 可以控制所有文件操作。HDFS 內(nèi)部的所有通信都基于標(biāo)準(zhǔn)的 TCP/IP
協(xié)議。
NameNode
NameNode
是一個(gè)通常在 HDFS 實(shí)例中的單獨(dú)機(jī)器上運(yùn)行的軟件。它負(fù)責(zé)管理文件系統(tǒng)名稱空間和控制外部客戶機(jī)的訪問(wèn)。NameNode 決定是否將文件映射到
DataNode 上的復(fù)制塊上。對(duì)于最常見(jiàn)的 3
個(gè)復(fù)制塊,第一個(gè)復(fù)制塊存儲(chǔ)在同一機(jī)架的不同節(jié)點(diǎn)上,最后一個(gè)復(fù)制塊存儲(chǔ)在不同機(jī)架的某個(gè)節(jié)點(diǎn)上。注意,這里需要您了解集群架構(gòu)。
實(shí)際的
I/O事務(wù)并沒(méi)有經(jīng)過(guò) NameNode,只有表示 DataNode 和塊的文件映射的元數(shù)據(jù)經(jīng)過(guò)
NameNode。當(dāng)外部客戶機(jī)發(fā)送請(qǐng)求要求創(chuàng)建文件時(shí),NameNode 會(huì)以塊標(biāo)識(shí)和該塊的第一個(gè)副本的 DataNode IP
地址作為響應(yīng)。這個(gè) NameNode 還會(huì)通知其他將要接收該塊的副本的 DataNode。
NameNode
在一個(gè)稱為 FsImage 的文件中存儲(chǔ)所有關(guān)于文件系統(tǒng)名稱空間的信息。這個(gè)文件和一個(gè)包含所有事務(wù)的記錄文件(這里是 EditLog)將存儲(chǔ)在
NameNode 的本地文件系統(tǒng)上。FsImage 和 EditLog 文件也需要復(fù)制副本,以防文件損壞或 NameNode 系統(tǒng)丟失。
NameNode本身不可避免地具有SPOF(Single Point Of Failure)單點(diǎn)失效的風(fēng)險(xiǎn),主備模式并不能解決這個(gè)問(wèn)題,通過(guò)Hadoop Non-stop namenode才能實(shí)現(xiàn)100% uptime可用時(shí)間。
DataNode
DataNode
也是一個(gè)通常在 HDFS實(shí)例中的單獨(dú)機(jī)器上運(yùn)行的軟件。Hadoop 集群包含一個(gè) NameNode 和大量 DataNode。DataNode
通常以機(jī)架的形式組織,機(jī)架通過(guò)一個(gè)交換機(jī)將所有系統(tǒng)連接起來(lái)。Hadoop 的一個(gè)假設(shè)是:機(jī)架內(nèi)部節(jié)點(diǎn)之間的傳輸速度快于機(jī)架間節(jié)點(diǎn)的傳輸速度。
DataNode
響應(yīng)來(lái)自 HDFS 客戶機(jī)的讀寫請(qǐng)求。它們還響應(yīng)來(lái)自 NameNode 的創(chuàng)建、刪除和復(fù)制塊的命令。NameNode 依賴來(lái)自每個(gè)
DataNode 的定期心跳(heartbeat)消息。每條消息都包含一個(gè)塊報(bào)告,NameNode
可以根據(jù)這個(gè)報(bào)告驗(yàn)證塊映射和其他文件系統(tǒng)元數(shù)據(jù)。如果 DataNode 不能發(fā)送心跳消息,NameNode
將采取修復(fù)措施,重新復(fù)制在該節(jié)點(diǎn)上丟失的塊。
MapReduce
在Hadoop中,一個(gè)MapReduce作業(yè)通常會(huì)把輸入的數(shù)據(jù)集切分為若干獨(dú)立的數(shù)據(jù)塊,由Map任務(wù)以完全并行的方式去處理它們??蚣軙?huì)對(duì)Map的輸出先進(jìn)行排序,然后把結(jié)果輸入給Reduce任務(wù)。通常作業(yè)的輸入和輸出都會(huì)被存儲(chǔ)在文件系統(tǒng)中,整個(gè)框架負(fù)責(zé)任務(wù)的調(diào)度和監(jiān)控,以及重新執(zhí)行已經(jīng)關(guān)閉的任務(wù)。
通常,MapReduce框架和分布式文件系統(tǒng)是運(yùn)行在一組相同的節(jié)點(diǎn)上,也就是說(shuō),計(jì)算節(jié)點(diǎn)和存儲(chǔ)節(jié)點(diǎn)通常都是在一起的。這種配置允許框架在那些已經(jīng)存好數(shù)據(jù)的節(jié)點(diǎn)上高效地調(diào)度任務(wù),這可以使得整個(gè)集群的網(wǎng)絡(luò)帶寬被非常高效地利用。
JobTracker
JobTracker是一個(gè)master服務(wù),軟件啟動(dòng)之后JobTracker接收J(rèn)ob,負(fù)責(zé)調(diào)度Job的每一個(gè)子任務(wù)task運(yùn)行于TaskTracker上,并監(jiān)控它們,如果發(fā)現(xiàn)有失敗的task就重新運(yùn)行它。一般情況應(yīng)該把JobTracker部署在單獨(dú)的機(jī)器上。
TaskTracker
TaskTracker是運(yùn)行在多個(gè)節(jié)點(diǎn)上的slaver服務(wù)。TaskTracker主動(dòng)與JobTracker通信,接收作業(yè),并負(fù)責(zé)直接執(zhí)行每一個(gè)任務(wù),而且TaskTracker都需要運(yùn)行在HDFS的DataNode上。