什么是hadoop有哪些優(yōu)點(diǎn)
什么是hadoop有哪些優(yōu)點(diǎn)
Hadoop是一個(gè)由Apache基金會(huì)所開發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu)。那么你對(duì)Hadoop了解多少呢?下面就讓學(xué)習(xí)啦小編來給你科普一下什么是hadoop。
hadoop的起源
項(xiàng)目起源
Hadoop由 Apache Software Foundation 公司于 2005 年秋天作為L(zhǎng)ucene的子項(xiàng)目Nutch的一部分正式引入。它受到最先由 Google Lab 開發(fā)的 Map/Reduce 和 Google File System(GFS) 的啟發(fā)。
2006 年 3 月份,Map/Reduce 和 Nutch Distributed File System (NDFS) 分別被納入稱為 Hadoop 的項(xiàng)目中。
Hadoop 是最受歡迎的在 Internet 上對(duì)搜索關(guān)鍵字進(jìn)行內(nèi)容分類的工具,但它也可以解決許多要求極大伸縮性的問題。例如,如果您要 grep 一個(gè) 10TB 的巨型文件,會(huì)出現(xiàn)什么情況?在傳統(tǒng)的系統(tǒng)上,這將需要很長(zhǎng)的時(shí)間。但是 Hadoop 在設(shè)計(jì)時(shí)就考慮到這些問題,采用并行執(zhí)行機(jī)制,因此能大大提高效率。
發(fā)展歷程
Hadoop原本來自于谷歌一款名為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)。
目前有很多公司開始提供基于Hadoop的商業(yè)軟件、支持、服務(wù)以及培訓(xùn)。Cloudera是一家美國(guó)的企業(yè)軟件公司,該公司在2008年開始提供基于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è)縮寫,而是一個(gè)虛構(gòu)的名字。該項(xiàng)目的創(chuàng)建者,Doug Cutting解釋Hadoop的得名 :“這個(gè)名字是我孩子給一個(gè)棕黃色的大象玩具命名的。我的命名標(biāo)準(zhǔn)就是簡(jiǎn)短,容易發(fā)音和拼寫,沒有太多的意義,并且不會(huì)被用于別處。小孩子恰恰是這方面的高手。”
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)樗圆⑿械姆绞焦ぷ?,通過并行處理加快處理速度。
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)平衡,因此處理速度非常快。
高容錯(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帶有用Java語言編寫的框架,因此運(yùn)行在 Linux 生產(chǎn)平臺(tái)上是非常理想的。Hadoop 上的應(yīng)用程序也可以使用其他語言編寫,比如 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)轭愃七@樣操作的批處理結(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ù)里。
MapReduce和Hadoop的區(qū)別
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è)磁盤的失敗并不會(huì)帶來數(shù)據(jù)丟失。Hadoop也非常擅長(zhǎng)分布式計(jì)算——快速地跨多臺(tái)機(jī)器處理大型數(shù)據(jù)集合。
MapReduce是處理大量半結(jié)構(gòu)化數(shù)據(jù)集合的編程模型。編程模型是一種處理并結(jié)構(gòu)化特定問題的方式。例如,在一個(gè)關(guān)系數(shù)據(jù)庫(kù)中,使用一種集合語言執(zhí)行查詢,如SQL。告訴語言想要的結(jié)果,并將它提交給系統(tǒng)來計(jì)算出如何產(chǎn)生計(jì)算。還可以用更傳統(tǒng)的語言(C++,Java),一步步地來解決問題。這是兩種不同的編程模型,MapReduce就是另外一種。
MapReduce和Hadoop是相互獨(dú)立的,實(shí)際上又能相互配合工作得很好。
hadoop的應(yīng)用程序
Hadoop 的最常見用法之一是 Web 搜索。雖然它不是唯一的軟件框架應(yīng)用程序,但作為一個(gè)并行數(shù)據(jù)處理引擎,它的表現(xiàn)非常突出。Hadoop 最有趣的方面之一是 Map and Reduce 流程,它受到Google開發(fā)的啟發(fā)。這個(gè)流程稱為創(chuàng)建索引,它將 Web爬行器檢索到的文本 Web 頁(yè)面作為輸入,并且將這些頁(yè)面上的單詞的頻率報(bào)告作為結(jié)果。然后可以在整個(gè) Web 搜索過程中使用這個(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é)合起來。在這點(diǎn)上,Hadoop 提供了大量的接口和抽象類,從而為 Hadoop應(yīng)用程序開發(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ì)列表:
(one,1) (small,1) (step,1) (for,1) (man,1)
MapReduce 流程的概念流
MapReduce 流程的概念流
(one,1) (giant,1) (leap,1) (for,1) (mankind,1)
如果對(duì)這個(gè)鍵/值對(duì)列表應(yīng)用 Reduce 函數(shù),將得到以下一組鍵/值對(duì):
(one,2) (small,1) (step,1) (for,2) (man,1)(giant,1) (leap,1) (mankind,1)
結(jié)果是對(duì)輸入域中的單詞進(jìn)行計(jì)數(shù),這無疑對(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é)果。換句話說,可以在輸入域并行使用相同的操作,得到的結(jié)果是一樣的,但速度更快。這便是 MapReduce 的威力;它的并行功能可在任意數(shù)量的系統(tǒng)上使用。圖 2 以區(qū)段和迭代的形式演示這種思想。
回到 Hadoop 上,
它是如何實(shí)現(xiàn)這個(gè)功能的?一個(gè)代表客戶機(jī)在單個(gè)主系統(tǒng)上啟動(dòng)的 MapReduce應(yīng)用程序稱為 JobTracker。類似于 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)樗]有將存儲(chǔ)移動(dòng)到某個(gè)位置以供處理,而是將處理移動(dòng)到存儲(chǔ)。這通過根據(jù)集群中的節(jié)點(diǎn)數(shù)調(diào)節(jié)處理,因此支持高效的數(shù)據(jù)處理。
看過“hadoop有哪些優(yōu)點(diǎn)”的人還看了:
2.如何快速閱讀代碼