Hadoop
一個(gè)分布式系統(tǒng)基礎(chǔ)架構(gòu),由Apache基金會(huì)所開(kāi)發(fā)。
用戶(hù)可以在不了解分布式底層細(xì)節(jié)的情況下,開(kāi)發(fā)分布式程序。充分利用集群的威力進(jìn)行高速運(yùn)算和存儲(chǔ)。
Hadoop實(shí)現(xiàn)了一個(gè)分布式文件系統(tǒng)(Hadoop Distributed File System),簡(jiǎn)稱(chēng)HDFS。HDFS有高容錯(cuò)性的特點(diǎn),并且設(shè)計(jì)用來(lái)部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)來(lái)訪(fǎng)問(wèn)應(yīng)用程序的數(shù)據(jù),適合那些有著超大數(shù)據(jù)集(large data set)的應(yīng)用程序。HDFS放寬了(relax)POSIX的要求,可以以流的形式訪(fǎng)問(wèn)(streaming access)文件系統(tǒng)中的數(shù)據(jù)。
Hadoop的框架最核心的設(shè)計(jì)就是:HDFS和MapReduce.HDFS為海量的數(shù)據(jù)提供了存儲(chǔ),則MapReduce為海量的數(shù)據(jù)提供了計(jì)算。
中文名海杜普
外文名Hadoop
項(xiàng)目起源
Hadoop由 Apache Software Foundation 公司于 2005 年秋天作為L(zhǎng)ucene的子
hadoop logo
hadoop logo
項(xiàng)目Nutch的一部分正式引入。它受到最先由 Google Lab 開(kāi)發(fā)的 Map/Reduce 和 Google File System(GFS) 的啟發(fā)。
2006 年 3 月份,Map/Reduce 和 Nutch Distributed File System (NDFS) 分別被納入稱(chēng)為 Hadoop 的項(xiàng)目中。
Hadoop 是最受歡迎的在 Internet 上對(duì)搜索關(guān)鍵字進(jìn)行內(nèi)容分類(lèi)的工具,但它也可以解決許多要求極大伸縮性的問(wèn)題。例如,如果您要 grep 一個(gè) 10TB 的巨型文件,會(huì)出現(xiàn)什么情況?在傳統(tǒng)的系統(tǒng)上,這將需要很長(zhǎng)的時(shí)間。但是 Hadoop 在設(shè)計(jì)時(shí)就考慮到這些問(wèn)題,采用并行執(zhí)行機(jī)制,因此能大大提高效率。
發(fā)展歷程
Hadoop原本來(lái)自于谷歌一款名為MapReduce的編程模型包。谷歌的MapReduce框架可以把一個(gè)應(yīng)用程序分解為許多并行計(jì)算指令,跨大量的計(jì)算節(jié)點(diǎn)運(yùn)行非常巨大的數(shù)據(jù)集。使用該框架的一個(gè)典型例子就是在網(wǎng)絡(luò)數(shù)據(jù)上運(yùn)行的搜索算法。
Hadoop 最初只與網(wǎng)頁(yè)索引有關(guān),迅速發(fā)展成為分析大數(shù)據(jù)的領(lǐng)先平臺(tái)。Cloudera是一家企業(yè)軟件公司,該公司在2008年開(kāi)始提供基于Hadoop的軟件和服務(wù)。
GoGrid是一家云計(jì)算基礎(chǔ)設(shè)施公司,在2012年,該公司與Cloudera合作加速了企業(yè)采納基于Hadoop應(yīng)用的步伐。Dataguise公司是一家數(shù)據(jù)安全公司,同樣在2012年該公司推出了一款針對(duì)Hadoop的數(shù)據(jù)保護(hù)和風(fēng)險(xiǎn)評(píng)估。
名字起源
Hadoop這個(gè)名字不是一個(gè)縮寫(xiě),而是一個(gè)虛構(gòu)的名字。該項(xiàng)目的創(chuàng)建者,Doug Cutting解釋Hadoop的得名 :“這個(gè)名字是我孩子給一個(gè)棕黃色的大象玩具命名的。我的命名標(biāo)準(zhǔn)就是簡(jiǎn)短,容易發(fā)音和拼寫(xiě),沒(méi)有太多的意義,并且不會(huì)被用于別處。小孩子恰恰是這方面的高手。”
Hadoop的發(fā)音是 [h?du:p]。
2 諸多優(yōu)點(diǎn)
Hadoop是一個(gè)能夠?qū)Υ罅繑?shù)據(jù)進(jìn)行分布式處理的軟件框架。但是 Hadoop 是以一種可靠、高效、可伸縮的方式進(jìn)行處理的。
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 依賴(lài)于社區(qū)服務(wù),因此它的成本比較低,任何人都可以使用。
Hadoop是一個(gè)能夠讓用戶(hù)輕松架構(gòu)和使用的分布式計(jì)算平臺(tái)。用戶(hù)可以輕松地在Hadoop上開(kāi)發(fā)和運(yùn)行處理海量數(shù)據(jù)的應(yīng)用程序。它主要有以下幾個(gè)優(yōu)點(diǎn):
高可靠性。Hadoop按位存儲(chǔ)和處理數(shù)據(jù)的能力值得人們信賴(lài)。
高擴(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)平衡,因此處理速度非???。
高容錯(cuò)性。Hadoop能夠自動(dòng)保存數(shù)據(jù)的多個(gè)副本,并且能夠自動(dòng)將失敗的任務(wù)重新分配。
低成本。與一體機(jī)、商用數(shù)據(jù)倉(cāng)庫(kù)以及QlikView、Yonghong Z-Suite等數(shù)據(jù)集市相比,hadoop是開(kāi)源的,項(xiàng)目的軟件成本因此會(huì)大大降低。
Hadoop帶有用Java語(yǔ)言編寫(xiě)的框架,因此運(yùn)行在 Linux 生產(chǎn)平臺(tái)上是非常理想的。Hadoop 上的應(yīng)用程序也可以使用其他語(yǔ)言編寫(xiě),比如 C++。
hadoop大數(shù)據(jù)處理的意義
Hadoop得以在大數(shù)據(jù)處理應(yīng)用中廣泛應(yīng)用得益于其自身在數(shù)據(jù)提取、變形和加載(ETL)方面上的天然優(yōu)勢(shì)。Hadoop的分布式架構(gòu),將大數(shù)據(jù)處理引擎盡可能的靠近存儲(chǔ),對(duì)例如像ETL這樣的批處理操作相對(duì)合適,因?yàn)轭?lèi)似這樣操作的批處理結(jié)果可以直接走向存儲(chǔ)。Hadoop的MapReduce功能實(shí)現(xiàn)了將單個(gè)任務(wù)打碎,并將碎片任務(wù)(Map)發(fā)送到多個(gè)節(jié)點(diǎn)上,之后再以單個(gè)數(shù)據(jù)集的形式加載(Reduce)到數(shù)據(jù)倉(cāng)庫(kù)里。[1]
3 核心架構(gòu)
Hadoop 由許多元素構(gòu)成。其最底部是 Hadoop Distributed File System(HDFS),它存儲(chǔ) Hadoop 集群中所有存儲(chǔ)節(jié)點(diǎn)上的文件。HDFS(對(duì)于本文)的上一層是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ù)核心。[4]
HDFS
對(duì)外部客戶(hù)機(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)大不相同。塊的大?。ㄍǔ?64MB)和復(fù)制的塊數(shù)量在創(chuàng)建文件時(shí)由客戶(hù)機(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)名稱(chēng)空間和控制外部客戶(hù)機(jī)的訪(fǎng)問(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)外部客戶(hù)機(jī)發(fā)送請(qǐng)求要求創(chuàng)建文件時(shí),NameNode 會(huì)以塊標(biāo)識(shí)和該塊的第一個(gè)副本的 DataNode IP 地址作為響應(yīng)。這個(gè) NameNode 還會(huì)通知其他將要接收該塊的副本的 DataNode。
NameNode 在一個(gè)稱(chēng)為 FsImage 的文件中存儲(chǔ)所有關(guān)于文件系統(tǒng)名稱(chē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 客戶(hù)機(jī)的讀寫(xiě)請(qǐng)求。它們還響應(yīng)來(lái)自 NameNode 的創(chuàng)建、刪除和復(fù)制塊的命令。NameNode 依賴(lài)來(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)上丟失的塊。
文件操作
可見(jiàn),HDFS 并不是一個(gè)萬(wàn)能的文件系統(tǒng)。它的主要目的是支持以流的形式訪(fǎng)問(wèn)寫(xiě)入的大型文件。
如果客戶(hù)機(jī)想將文件寫(xiě)到 HDFS 上,首先需要將該文件緩存到本地的臨時(shí)存儲(chǔ)。如果緩存的數(shù)據(jù)大于所需的 HDFS 塊大小,創(chuàng)建文件的請(qǐng)求將發(fā)送給 NameNode。NameNode 將以 DataNode 標(biāo)識(shí)和目標(biāo)塊響應(yīng)客戶(hù)機(jī)。
同時(shí)也通知將要保存文件塊副本的 DataNode。當(dāng)客戶(hù)機(jī)開(kāi)始將臨時(shí)文件發(fā)送給第一個(gè) DataNode 時(shí),將立即通過(guò)管道方式將塊內(nèi)容轉(zhuǎn)發(fā)給副本 DataNode。客戶(hù)機(jī)也負(fù)責(zé)創(chuàng)建保存在相同 HDFS名稱(chēng)空間中的校驗(yàn)和(checksum)文件。
在最后的文件塊發(fā)送之后,NameNode 將文件創(chuàng)建提交到它的持久化元數(shù)據(jù)存儲(chǔ)(在 EditLog 和 FsImage 文件)。
Linux 集群
Hadoop 框架可在單一的 Linux 平臺(tái)上使用(開(kāi)發(fā)和調(diào)試時(shí)),官方提供MiniCluster作為單元測(cè)試使用,不過(guò)使用存放在機(jī)架上的商業(yè)服務(wù)器才能發(fā)揮它的力量。這些機(jī)架組成一個(gè) Hadoop 集群。它通過(guò)集群拓?fù)渲R(shí)決定如何在整個(gè)集群中分配作業(yè)和文件。Hadoop 假定節(jié)點(diǎn)可能失敗,因此采用本機(jī)方法處理單個(gè)計(jì)算機(jī)甚至所有機(jī)架的失敗。
4 集群系統(tǒng)
Google的數(shù)據(jù)中心使用廉價(jià)的Linux PC機(jī)組成集群,在上面運(yùn)行各種應(yīng)用。即使是分布式開(kāi)發(fā)的新手也可以迅速使用Google的基礎(chǔ)設(shè)施。核心組件是3個(gè):
⒈GFS(Google File System)。一個(gè)分布式文件系統(tǒng),隱藏下層負(fù)載均衡,冗余復(fù)制等細(xì)節(jié),對(duì)上層程序提供一個(gè)統(tǒng)一的文件系統(tǒng)API接口。Google根據(jù)自己的需求對(duì)它進(jìn)行了特別優(yōu)化,包括:超大文件的訪(fǎng)問(wèn),讀操作比例遠(yuǎn)超過(guò)寫(xiě)操作,PC機(jī)極易發(fā)生故障造成節(jié)點(diǎn)失效等。GFS把文件分成64MB的塊,分布在集群的機(jī)器上,使用Linux的文件系統(tǒng)存放。同時(shí)每塊文件至少有3份以上的冗余。中心是一個(gè)Master節(jié)點(diǎn),根據(jù)文件索引,找尋文件塊。詳見(jiàn)Google的工程師發(fā)布的GFS論文。
?、睲apReduce。Google發(fā)現(xiàn)大多數(shù)分布式運(yùn)算可以抽象為MapReduce操作。Map是把輸入Input分解成中間的Key/Value對(duì),Reduce把Key/Value合成最終輸出Output。這兩個(gè)函數(shù)由程序員提供給系統(tǒng),下層設(shè)施把Map和Reduce操作分布在集群上運(yùn)行,并把結(jié)果存儲(chǔ)在GFS上。
?、矪igTable。一個(gè)大型的分布式數(shù)據(jù)庫(kù),這個(gè)數(shù)據(jù)庫(kù)不是關(guān)系式的數(shù)據(jù)庫(kù)。像它的名字一樣,就是一個(gè)巨大的表格,用來(lái)存儲(chǔ)結(jié)構(gòu)化的數(shù)據(jù)。
以上三個(gè)設(shè)施Google均有論文發(fā)表。
《The Google File System 》 2003年[5]
《MapReduce: Simplified Data Processing on Large Clusters》 2004年[6]
《Bigtable: A Distributed Storage System for Structured Data》 2006年[7]
5 應(yīng)用程序
Hadoop 的最常見(jiàn)用法之一是 Web 搜索。雖然它不是惟一的軟件框架應(yīng)用程序,但作為一個(gè)并行數(shù)據(jù)處理引擎,它的表現(xiàn)非常突出。Hadoop 最有趣的方面之一是 Map and Reduce 流程,它受到Google開(kāi)發(fā)的啟發(fā)。這個(gè)流程稱(chēng)為創(chuàng)建索引,它將 Web爬行器檢索到的文本 Web 頁(yè)面作為輸入,并且將這些頁(yè)面上的單詞的頻率報(bào)告作為結(jié)果。然后可以在整個(gè) Web 搜索過(guò)程中使用這個(gè)結(jié)果從已定義的搜索參數(shù)中識(shí)別內(nèi)容。
MapReduce
最簡(jiǎn)單的 MapReduce應(yīng)用程序至少包含 3 個(gè)部分:一個(gè) Map 函數(shù)、一個(gè) Reduce 函數(shù)和一個(gè) main 函數(shù)。main 函數(shù)將作業(yè)控制和文件輸入/輸出結(jié)合起來(lái)。在這點(diǎn)上,Hadoop 提供了大量的接口和抽象類(lèi),從而為 Hadoop應(yīng)用程序開(kāi)發(fā)人員提供許多工具,可用于調(diào)試和性能度量等。
MapReduce 本身就是用于并行處理大數(shù)據(jù)集的軟件框架。MapReduce 的根源是函數(shù)性編程中的 map 和 reduce 函數(shù)。它由兩個(gè)可能包含有許多實(shí)例(許多 Map 和 Reduce)的操作組成。Map 函數(shù)接受一組數(shù)據(jù)并將其轉(zhuǎn)換為一個(gè)鍵/值對(duì)列表,輸入域中的每個(gè)元素對(duì)應(yīng)一個(gè)鍵/值對(duì)。Reduce 函數(shù)接受 Map 函數(shù)生成的列表,然后根據(jù)它們的鍵(為每個(gè)鍵生成一個(gè)鍵/值對(duì))縮小鍵/值對(duì)列表。
這里提供一個(gè)示例,幫助您理解它。假設(shè)輸入域是 one small step for man,one giant leap for mankind。在這個(gè)域上運(yùn)行 Map 函數(shù)將得出以下的鍵/值對(duì)列表:
?。╫ne,1) (small,1) (step,1) (for,1) (man,1)
MapReduce 流程的概念流
(one,1) (giant,1) (leap,1) (for,1) (mankind,1)
如果對(duì)這個(gè)鍵/值對(duì)列表應(yīng)用 Reduce 函數(shù),將得到以下一組鍵/值對(duì):
?。╫ne,2) (small,1) (step,1) (for,2) (man,1)(giant,1) (leap,1) (mankind,1)
結(jié)果是對(duì)輸入域中的單詞進(jìn)行計(jì)數(shù),這無(wú)疑對(duì)處理索引十分有用。但是,假設(shè)有兩個(gè)輸入域,第一個(gè)是 one small step for man,第二個(gè)是 one giant leap for mankind。您可以在每個(gè)域上執(zhí)行 Map 函數(shù)和 Reduce 函數(shù),然后將這兩個(gè)鍵/值對(duì)列表應(yīng)用到另一個(gè) Reduce 函數(shù),這時(shí)得到與前面一樣的結(jié)果。換句話(huà)說(shuō),可以在輸入域并行使用相同的操作,得到的結(jié)果是一樣的,但速度更快。這便是 MapReduce 的威力;它的并行功能可在任意數(shù)量的系統(tǒng)上使用。圖 2 以區(qū)段和迭代的形式演示這種思想。
回到 Hadoop 上,它是如何實(shí)現(xiàn)這個(gè)功能的?一個(gè)代表客戶(hù)機(jī)在單個(gè)主系統(tǒng)上啟動(dòng)的 MapReduce應(yīng)用程序稱(chēng)為 JobTracker。類(lèi)似于 NameNode,它是 Hadoop 集群中惟一負(fù)責(zé)控制 MapReduce應(yīng)用程序的系統(tǒng)。在應(yīng)用程序提交之后,將提供包含在 HDFS 中的輸入和輸出目錄。JobTracker 使用文件塊信息(物理量和位置)確定如何創(chuàng)建其他 TaskTracker 從屬任務(wù)。MapReduce應(yīng)用程序被復(fù)制到每個(gè)出現(xiàn)輸入文件塊的節(jié)點(diǎn)。將為特定節(jié)點(diǎn)上的每個(gè)文件塊創(chuàng)建一個(gè)惟一的從屬任務(wù)。每個(gè) TaskTracker 將狀態(tài)和完成信息報(bào)告給 JobTracker。圖 3 顯示一個(gè)示例集群中的工作分布。
Hadoop 的這個(gè)特點(diǎn)非常重要,因?yàn)樗](méi)有將存儲(chǔ)移動(dòng)到某個(gè)位置以供處理,而是將處理移動(dòng)到存儲(chǔ)。這通過(guò)根據(jù)集群中的節(jié)點(diǎn)數(shù)調(diào)節(jié)處理,因此支持高效的數(shù)據(jù)處理。
6 MapReduce與Hadoop之比較
Hadoop是Apache軟件基金會(huì)發(fā)起的一個(gè)項(xiàng)目,在大數(shù)據(jù)分析以及非結(jié)構(gòu)化數(shù)據(jù)蔓延的背景下,Hadoop受到了前所未有的關(guān)注。
Hadoop是一種分布式數(shù)據(jù)和計(jì)算的框架。它很擅長(zhǎng)存儲(chǔ)大量的半結(jié)構(gòu)化的數(shù)據(jù)集。數(shù)據(jù)可以隨機(jī)存放,所以一個(gè)磁盤(pán)的失敗并不會(huì)帶來(lái)數(shù)據(jù)丟失。Hadoop也非常擅長(zhǎng)分布式計(jì)算——快速地跨多臺(tái)機(jī)器處理大型數(shù)據(jù)集合。
MapReduce是處理大量半結(jié)構(gòu)化數(shù)據(jù)集合的編程模型。編程模型是一種處理并結(jié)構(gòu)化特定問(wèn)題的方式。例如,在一個(gè)關(guān)系數(shù)據(jù)庫(kù)中,使用一種集合語(yǔ)言執(zhí)行查詢(xún),如SQL。告訴語(yǔ)言想要的結(jié)果,并將它提交給系統(tǒng)來(lái)計(jì)算出如何產(chǎn)生計(jì)算。還可以用更傳統(tǒng)的語(yǔ)言(C++,Java),一步步地來(lái)解決問(wèn)題。這是兩種不同的編程模型,MapReduce就是另外一種。
MapReduce和Hadoop是相互獨(dú)立的,實(shí)際上又能相互配合工作得很好。[9]
7 開(kāi)源實(shí)現(xiàn)
Hadoop是項(xiàng)目的總稱(chēng)。主要是由HDFS和MapReduce組成。
HDFS是Google File System(GFS)的開(kāi)源實(shí)現(xiàn)。
MapReduce是Google MapReduce的開(kāi)源實(shí)現(xiàn)。
這個(gè)分布式框架很有創(chuàng)造性,而且有極大的擴(kuò)展性,使得Google在系統(tǒng)吞吐量上有很大的競(jìng)爭(zhēng)力。因此Apache基金會(huì)用Java實(shí)現(xiàn)了一個(gè)開(kāi)源版本,支持Fedora、Ubuntu等Linux平臺(tái)。雅虎和硅谷風(fēng)險(xiǎn)投資公司Benchmark Capital 聯(lián)合成立一家名為Hortonworks的新公司,接管被廣泛應(yīng)用的數(shù)據(jù)分析軟件Hadoop的開(kāi)發(fā)工作。
Hadoop實(shí)現(xiàn)了HDFS文件系統(tǒng)和MapRecue。用戶(hù)只要繼承MapReduceBase,提供分別實(shí)現(xiàn)Map和Reduce的兩個(gè)類(lèi),并注冊(cè)Job即可自動(dòng)分布式運(yùn)行。
至今為止是2.4.1,穩(wěn)定版本是1.2.1 和 yarn 的 2.4.0。
HDFS把節(jié)點(diǎn)分成兩類(lèi):NameNode和DataNode。NameNode是唯一的,程序與之通信,然后從DataNode上存取文件。這些操作是透明的,與普通的文件系統(tǒng)API沒(méi)有區(qū)別。
MapReduce則是JobTracker節(jié)點(diǎn)為主,分配工作以及負(fù)責(zé)和用戶(hù)程序通信。
HDFS和MapReduce實(shí)現(xiàn)是完全分離的,并不是沒(méi)有HDFS就不能MapReduce運(yùn)算。
Hadoop也跟其他云計(jì)算項(xiàng)目有共同點(diǎn)和目標(biāo):實(shí)現(xiàn)海量數(shù)據(jù)的計(jì)算。而進(jìn)行海量計(jì)算需要一個(gè)穩(wěn)定的,安全的數(shù)據(jù)容器,才有了Hadoop分布式文件系統(tǒng)(HDFS,Hadoop Distributed File System)。
HDFS通信部分使用org.apache.hadoop.ipc,可以很快使用RPC.Server.start()構(gòu)造一個(gè)節(jié)點(diǎn),具體業(yè)務(wù)功能還需自己實(shí)現(xiàn)。針對(duì)HDFS的業(yè)務(wù)則為數(shù)據(jù)流的讀寫(xiě),NameNode/DataNode的通信等。
MapReduce主要在org.apache.hadoop.mapred,實(shí)現(xiàn)提供的接口類(lèi),并完成節(jié)點(diǎn)通信(可以不是hadoop通信接口),就能進(jìn)行MapReduce運(yùn)算。
8 子項(xiàng)目
Hadoop Common: 在0.20及以前的版本中,包含HDFS、MapReduce和其他項(xiàng)目公共內(nèi)容,從0.21開(kāi)始HDFS和MapReduce被分離為獨(dú)立的子項(xiàng)目,其余內(nèi)容為Hadoop Common
HDFS: Hadoop分布式文件系統(tǒng)(Distributed File System) - HDFS (Hadoop Distributed File System)
MapReduce:并行計(jì)算框架,0.20前使用 org.apache.hadoop.mapred 舊接口,0.20版本開(kāi)始引入org.apache.hadoop.mapreduce的新API
HBase: 類(lèi)似Google BigTable的分布式NoSQL列數(shù)據(jù)庫(kù)。(HBase和Avro已經(jīng)于2010年5月成為頂級(jí) Apache 項(xiàng)目)
Hive:數(shù)據(jù)倉(cāng)庫(kù)工具,由Facebook貢獻(xiàn)。
Zookeeper:分布式鎖設(shè)施,提供類(lèi)似Google Chubby的功能,由Facebook貢獻(xiàn)。
Avro:新的數(shù)據(jù)序列化格式與傳輸工具,將逐步取代Hadoop原有的IPC機(jī)制。
Pig: 大數(shù)據(jù)分析平臺(tái),為用戶(hù)提供多種接口。
Ambari:Hadoop管理工具,可以快捷的監(jiān)控、部署、管理集群。
Sqoop:于在HADOOP與傳統(tǒng)的數(shù)據(jù)庫(kù)間進(jìn)行數(shù)據(jù)的傳遞。
9 研究
Hadoop是原Yahoo的Doug Cutting根據(jù)Google發(fā)布的學(xué)術(shù)論文研究而來(lái)。Doug Cutting給這個(gè)Project起了個(gè)名字,就叫Hadoop。
Doug Cutting在Cloudera公司任職。Cloudera的Hadoop是商用版。不同于Apache的開(kāi)源版。
如果要研究Hadoop的話(huà),下載Apache的開(kāi)源版本是一種不錯(cuò)的選擇。
只研究Apache版本的,不足以對(duì)Hadoop的理念理解。再對(duì)Cloudera版本的研究,會(huì)更上一層樓。
美國(guó)的AsterData,也是Hadoop的一個(gè)商用版,AsterData的MPP理念,Applications Within理念等等,也都是值得研究。
Google的成功已經(jīng)說(shuō)明了RDB的下一代就是Nosql(Not Only SQL),比如說(shuō)GFS,Hadoop等等。
Hadoop作為開(kāi)源軟件來(lái)說(shuō),其魅力更是不可估量。
上文中說(shuō)到Google的學(xué)術(shù)論文,其中包涵有:
Google File System(大規(guī)模分散文件系統(tǒng))
MapReduce (大規(guī)模分散FrameWork)
BigTable(大規(guī)模分散數(shù)據(jù)庫(kù))
Chubby(分散鎖服務(wù))
10 大事記
2011年12月27日--1.0.0版本釋出。標(biāo)志著Hadoop已經(jīng)初具生產(chǎn)規(guī)模。
2009年4月-- 贏得每分鐘排序,59秒內(nèi)排序500 GB(在1400個(gè)節(jié)點(diǎn)上)和173分鐘內(nèi)排序100 TB數(shù)據(jù)(在3400個(gè)節(jié)點(diǎn)上)。
2009年3月-- 17個(gè)集群總共24 000臺(tái)機(jī)器。
2008年10月-- 研究集群每天裝載10 TB的數(shù)據(jù)。
2008年4月-- 贏得世界最快1 TB數(shù)據(jù)排序在900個(gè)節(jié)點(diǎn)上用時(shí)209秒。
2007年4月-- 研究集群達(dá)到兩個(gè)1000個(gè)節(jié)點(diǎn)的集群。
2007年1月-- 研究集群到達(dá)900個(gè)節(jié)點(diǎn)。
2006年12月-- 標(biāo)準(zhǔn)排序在20個(gè)節(jié)點(diǎn)上運(yùn)行1.8個(gè)小時(shí),100個(gè)節(jié)點(diǎn)3.3小時(shí),500個(gè)節(jié)點(diǎn)5.2小時(shí),900個(gè)節(jié)點(diǎn)7.8個(gè)小時(shí)。
2006年11月-- 研究集群增加到600個(gè)節(jié)點(diǎn)。
2006年5月-- 標(biāo)準(zhǔn)排序在500個(gè)節(jié)點(diǎn)上運(yùn)行42個(gè)小時(shí)(硬件配置比4月的更好)。
2006年5月-- 雅虎建立了一個(gè)300個(gè)節(jié)點(diǎn)的Hadoop研究集群。
2006年4月-- 標(biāo)準(zhǔn)排序(10 GB每個(gè)節(jié)點(diǎn))在188個(gè)節(jié)點(diǎn)上運(yùn)行47.9個(gè)小時(shí)。
2006年2月-- 雅虎的網(wǎng)格計(jì)算團(tuán)隊(duì)采用Hadoop。
2006年2月-- Apache Hadoop項(xiàng)目正式啟動(dòng)以支持MapReduce和HDFS的獨(dú)立發(fā)展。
2006年1月-- Doug Cutting加入雅虎。
2005年12月-- Nutch移植到新的框架,Hadoop在20個(gè)節(jié)點(diǎn)上穩(wěn)定運(yùn)行。
2004年-- 最初的版本(稱(chēng)為HDFS和MapReduce)由Doug Cutting和Mike Cafarella開(kāi)始實(shí)施。
11 認(rèn)證
Cloudera
Cloudera公司主要提供Apache Hadoop開(kāi)發(fā)工程師認(rèn)證(Cloudera CertifiedDeveloper for Apache Hadoop ,CCDH)和Apache Hadoop管理工程師認(rèn)證(Cloudera CertifiedAdministrator for Apache Hadoop ,CCAH),更多相關(guān)信息,請(qǐng)參閱Cloudera公司官方網(wǎng)站。
Hortonworks
Hortonworks Hadoop培訓(xùn)課程是由Apache Hadoop項(xiàng)目的領(lǐng)導(dǎo)者和核心開(kāi)發(fā)人員所設(shè)計(jì),代表了這一行業(yè)的最高水平。
Hortonworks是國(guó)際領(lǐng)先的開(kāi)發(fā)、推廣和支持Apache Hadoop的商業(yè)供應(yīng)商,它的Hadoop認(rèn)證也是業(yè)界公認(rèn)的Hadoop權(quán)威認(rèn)證,分為開(kāi)發(fā)者認(rèn)證(HCAHD[10] , Hortonworks Certified Apache HadoopDeveloper)和管理員認(rèn)證(HCAHA, Hortonwork Certified Apache HadoopAdministrator)。
12 信息安全
通過(guò)Hadoop安全部署經(jīng)驗(yàn)總結(jié),開(kāi)發(fā)出以下十大建議,以確保大型和復(fù)雜多樣環(huán)境下的數(shù)據(jù)信息安全。
1、先下手為強(qiáng)!在規(guī)劃部署階段就確定數(shù)據(jù)的隱私保護(hù)策略,最好是在將數(shù)據(jù)放入到Hadoop之前就確定好保護(hù)策略。
2、確定哪些數(shù)據(jù)屬于企業(yè)的敏感數(shù)據(jù)。根據(jù)公司的隱私保護(hù)政策,以及相關(guān)的行業(yè)法規(guī)和政府規(guī)章來(lái)綜合確定。
3、及時(shí)發(fā)現(xiàn)敏感數(shù)據(jù)是否暴露在外,或者是否導(dǎo)入到Hadoop中。
4、搜集信息并決定是否暴露出安全風(fēng)險(xiǎn)。
5、確定商業(yè)分析是否需要訪(fǎng)問(wèn)真實(shí)數(shù)據(jù),或者確定是否可以使用這些敏感數(shù)據(jù)。然后,選擇合適的加密技術(shù)。如果有任何疑問(wèn),對(duì)其進(jìn)行加密隱藏處理,同時(shí)提供最安全的加密技術(shù)和靈活的應(yīng)對(duì)策略,以適應(yīng)未來(lái)需求的發(fā)展。
6、確保數(shù)據(jù)保護(hù)方案同時(shí)采用了隱藏和加密技術(shù),尤其是如果我們需要將敏感數(shù)據(jù)在Hadoop中保持獨(dú)立的話(huà)。
7、確保數(shù)據(jù)保護(hù)方案適用于所有的數(shù)據(jù)文件,以保存在數(shù)據(jù)匯總中實(shí)現(xiàn)數(shù)據(jù)分析的準(zhǔn)確性。
8、確定是否需要為特定的數(shù)據(jù)集量身定制保護(hù)方案,并考慮將Hadoop的目錄分成較小的更為安全的組。
9、確保選擇的加密解決方案可與公司的訪(fǎng)問(wèn)控制技術(shù)互操作,允許不同用戶(hù)可以有選擇性地訪(fǎng)問(wèn)Hadoop集群中的數(shù)據(jù)。
10、確保需要加密的時(shí)候有合適的技術(shù)(比如Java、Pig等)可被部署并支持無(wú)縫解密和快速訪(fǎng)問(wèn)數(shù)據(jù)。
13 Hadoop之父
生活中,可能所有人都間接用過(guò)他的作品,他是Lucene、Nutch 、Hadoop等項(xiàng)目的發(fā)起人。是
他,把高深莫測(cè)的搜索技術(shù)形成產(chǎn)品,貢獻(xiàn)給普通大眾;還是他,打造了在云計(jì)算和大數(shù)據(jù)領(lǐng)域里如日中天的Hadoop[12] 。他是某種意義上的盜火者,他就是Doug Cutting。
內(nèi)容來(lái)自百科網(wǎng)