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

1.5 初識Hadoop大數據平臺

1.5.1 Hadoop的發展過程

Hadoop是畢業于美國斯坦福大學的道格· 卡廷(Doug Cutting) (見圖1-7)創建的。1997年年底,Doug Cutting開始研究如何用Java來實現全文文本搜索,最終開發出了全球第一個開源的全文文本搜索系統函數庫——Apache Lucene。之后,Cutting再接再厲,在Lucene的基礎上將開源的思想繼續深化。2004年,Doug Cutting和同為程序員出身的邁克·卡法雷拉 Mike Cafarella 決定開發一款可以代替當時的主流搜索產品的開源搜索引擎,這個項目被命名為 Nutch。Hadoop 就起源于這個開源的網絡搜索引擎——Apache Nutch。因此,Hadoop開始本身也是Lucene項目的一部分。

圖1-7 Hadoop之父——道格·卡廷(Doug Cutting)

1.Hadoop名字的來歷

Hadoop這個單詞并不是一個縮略詞,它完全是一個虛構的名字。有關Hadoop名稱的來歷,請大家看一下創始人Doug Cutting是如何解釋的:“這個名字是我的孩子給一頭吃飽了的棕黃色大象取的。我的命名標準是簡短,容易發音和拼寫,沒有太多的含義,并且不會被用于別處。小孩子是這方面的高手。Google就是小孩子起的名字。”

有趣的是,Hadoop的子項目及后續模塊所使用的名稱也往往與其功能不相關,通常也以大象或其他動物為主題命名,如“Pig”“Hive”“Impala”等,就連一些較小的組件的名稱通常也比較通俗。這意味著我們可以通過它的名字大致猜測它的功能,例如,JobTracker 就是一款用于跟蹤MapReduce作業的程序。

從頭開始構建一個網絡搜索引擎是一個雄心勃勃的計劃,不僅是因為編寫一個爬取并索引網頁的軟件比較復雜,更因為這個項目包含許多需要隨時修改的組件,必須有一個專門的團隊來實現。同時,構建這樣一個系統的代價非常高(據道格·卡廷和邁克·卡法雷拉估計,一個支持10億網頁的索引系統單是硬件上的投入就高達50萬美元,另外每月運行維護費用也高達3萬美元)。不過,他們仍然認為這項工作是值得的,因為它開創了優化搜索引擎算法的平臺。

2.Hadoop的誕生

Nutch項目開始于2002年,一個可以運行的網頁爬取工具和搜索引擎系統很快“浮出水面”。但后來,開發者認為這一架構可擴展性不夠,無法應對數十億網頁的搜索問題。2003 年和 2004年,Google先后發表了The Google File System、MapReduce: Simplified Data Processing on Large Clusters 兩篇論文。這兩個創新性的思路點燃了道格·卡廷和邁克·卡拉雷拉的激情與斗志,他們花了2年的業余時間實現分布式文件系統DFS和MapReduce機制。2005年,他們將Nutch的所有主要算法均改造為用DFS和MapReduce來運行,并且使Nutch可以在20臺機器上支持幾億的數據規模。

2006年,當雅虎在考慮構建一個高度利用硬件資源、并且維護和開發都非常簡易的軟件架構時,道格·卡廷的Nutch進入了雅虎的視野。2006年1月,道格·卡廷加入雅虎,雅虎為此組織了一個專門的團隊和資源,將 Hadoop 發展成了一個能夠處理 Web 數據的系統。2006 年 2 月, Hadoop從Nutch項目中獨立出來,并且正式成為Apache組織中一個專注于DFS和MapReduce的開源項目。作為一個分布式系統基礎架構,Hadoop使用戶可以在不了解分布式底層細節的情況下,充分利用集群的威力,開發分布式程序,實現分布式計算和存儲。

2008年1月,Hadoop發展成為Apache的頂級項目。2008年4月,Hadoop打破世界紀錄,成為最快的TB級數據排序系統。通過一個900節點的群集,Hadoop在209s內完成了對1 TB數據的排序,擊敗了2007年的297s冠軍。這標志著Hadoop取得了成功。

自2007年推出后,Hadoop很快在工業界獲得普及應用,同時獲得了學術界的廣泛關注和研究。在短短的幾年中,Hadoop很快成為到現在為止最為成功、最廣泛接受使用的大數據處理主流技術和系統平臺,而且成為了大數據領域事實上的一種工業標準。

10年來,Hadoop的主要發展歷程如下。

● 2008年6月,Hadoop的第一個SQL框架——Hive成為了Hadoop的子項目。

● 2009年7月,MapReduce 和 HDFS成為Hadoop項目的獨立子項目。

● 2010年5月,Avro脫離Hadoop項目,成為Apache頂級項目。

● 2010年5月,HBase脫離Hadoop項目,成為Apache頂級項目。

● 2010年9月,Hive脫離Hadoop,成為Apache頂級項目。

● 2010年9月,Pig脫離Hadoop,成為Apache頂級項目。

● 2011年1月,ZooKeeper脫離Hadoop,成為Apache頂級項目。

● 2011年12月,Hadoop 1.0.0版本發布。

● 2012年5月, Hadoop 2.0.0-alpha發布,YARN成為Hadoop子項目。

● 2012年10月,Impala加入到了Hadoop生態圈。

● 2013年10月15日, Hadoop 2.2.0版本發布,標志著Hadoop正式進入MapReduce v2.0時代。

● 2014年2月,Spark開始代替MapReduce成為Hadoop的默認執行引擎,并成為Apache頂級項目。

● 2015年4月21日, Hadoop 2.7.0版本發布。

● 2016年7月26日, Spark 2.0.0版本發布。

1.5.2 Hadoop的優勢

Hadoop是一個能夠對大數據進行分布式處理的軟件框架。經過10年的快速發展,Hadoop已經形成了以下4點優勢。

1.高可靠性

Hadoop是可靠的,因為它假設計算元素和存儲會失敗,因此它維護多個工作數據副本,確保能夠針對失敗的節點重新分布處理。

2.高擴展性

Hadoop是在可用的計算機集群之間分配數據并完成計算任務的,整個集群包含的節點規模可以方便地擴展到數以千計。

3.高效性

Hadoop是高效的,因為它以并行的方式工作,通過大規模的并行處理加快數據的處理速度。它還能夠在節點之間動態地移動數據,并保證各個節點的負載動態平衡,因此保證了集群的整體處理速度。

4.高容錯性

Hadoop能夠自動保存數據的多個副本,并且能夠自動將失敗的任務重新分配。Hadoop帶有用Java語言編寫的框架,因此運行在Linux生產平臺上是非常理想的。Hadoop上的應用程序也可以使用其他語言編寫,比如C++。

1.5.3 Hadoop的生態系統

2006年,Hadoop還只是HDFS和MapReduce的代名詞,但是10年來,它已經發生了脫胎換骨的變化。它已經從傳統的三駕馬車——HDFS、MapReduce和HBase社區發展為60多個相關組件組成的龐大生態系統。其中,包含在各大發行版中的組件就有25個以上,包括數據存儲、執行引擎、編程和數據訪問框架等。

現在,構成Hadoop的整個生態系統的所有組件可劃分為4個層次。如圖1-8所示。

圖1-8 Hadoop技術生態系統

Hadoop的底層是存儲層,核心組件是分布式文件系統HDFS;中間層是資源及數據管理層,核心組件是YARN以及Sentry等;上層是計算引擎,核心組件是MapReduce、Impala、Spark等;頂層是基于MapReduce、Spark等計算引擎的高級封裝及工具,如Hive、Pig、Mahout等。

在Hadoop的生態系統之中,HDFS是分布式存儲系統,即Hadoop Distributed File System。HDFS提供了高可靠性、高擴展性和高吞吐率的數據存儲服務,它源自于Google的GFS論文,是GFS克隆版。

YARN是Hadoop的資源管理系統,原意是Yet Another Resource Negotiator(另一個資源管理系統),負責集群資源的統一管理和調度,是Hadoop 2.0新增加的系統組件,它允許多種計算框架運行在一個集群中。

MapReduce是分布式計算框架,具有易于編程、高容錯性和高擴展性等優點。MapReduce源自于Google的MapReduce論文,是Google MapReduce的克隆版。

特別要注意的是,很多人把YARN理解成了升級版的MapReduce。實際上,YARN并不是下一代MapReduce(即MRv2)。下一代MapReduce與第一代MapReduce(MRv1)在編程接口、數據處理引擎(MapTask和ReduceTask)上是完全一樣的,可認為MRv2重用了MRv1的這些模塊。二者有所不同的是資源管理和作業管理系統,在MRv1中資源管理和作業管理都是由JobTracker實現的,集兩個功能于一身;而在MRv2中,將這兩部分功能分開了,作業管理由ApplicationMaster實現,而資源管理由新增系統YARN完成。由于YARN具有通用性,因此YARN也可以作為其他計算框架(如Spark、Storm等)的資源管理系統,而不僅限于MapReduce。通常而言,我們將運行在YARN上的計算框架統稱為“X on YARN”,例如“MapReduce On YARN”“Spark On YARN”“Storm On YARN”等。

Hive是由Facebook開源,基于MapReduce的數據倉庫,數據計算使用MapReduce,數據存儲使用HDFS。Hive定義了一種類 SQL 查詢語言——HQL。HQL類似SQL,但不完全相同。

Pig是由Yahoo!開源的,是構建在Hadoop之上的數據倉庫。

Mahout是數據挖掘的API庫,基于Hadoop的機器學習和數據挖掘的分布式計算框架,實現了3大類算法:推薦(Recommendation)、聚類(Clustering)、分類(Classification)。

HBase是一種分布式數據庫,源自Google的Bigtable論文,是Google Bigtable克隆版。

Zookeeper是一個分布式協作服務組件,源自Google的Chubby論文,是Chubby克隆版。它被用于解決分布式環境下的數據管理問題,包括統一命名、狀態同步、集群管理、配置同步等。

Sqoop是數據同步工具,是連接Hadoop與傳統數據庫之間的橋梁。它支持多種數據庫,包括MySQL、DB2等,本質上是一個MapReduce程序。

Flume是日志收集工具,Cloudera開源的日志收集系統。

Oozie是作業流調度系統。通過它,我們可以把多個Map/Reduce作業組合到一個邏輯工作單元中,從而完成更大型的任務。

1.5.4 Hadoop的版本

當前Apache Hadoop版本非常多,要理解各版本的特性以及它們之間的聯系比較困難。在搞清楚Hadoop各版本之前,先要了解Apache軟件發布方式。

對于任何一個Apache開源項目,所有的基礎特性均被添加到一個稱為“trunk”的主代碼線。當項目需要添加一個重要的特性時,Apache 會從主代碼線中專門延伸出一個分支(branch),作為一個候選發布版(candidate release)。該分支將專注于實現該特性而不再添加其他新的特性,當bug修復之后,經過相關人士投票便會對外公開,成為發布版(release version)。之后,該特性將合并到主代碼線中。需要注意的是,有時可能會同時進行多個分支的研發,這樣一來,版本高的分支可能先于版本低的分支發布。

由于Apache以特性為準延伸新的分支,故在介紹Apache Hadoop版本之前,先了解幾個獨立產生Hadoop新版本的重大功能特性。

1.HDFS Append

Append特性主要完成追加文件內容的功能,也就是允許用戶以Append方式修改HDFS上的文件。HDFS最初的一個設計目標是支持MapReduce編程模型,而該模型只需要寫一次文件,之后僅進行讀操作而不會對其修改,即“write-once-read-many”,這就不需要支持文件追加功能。但隨著HDFS變得流行,一些具有寫需求的應用想以HDFS作為存儲系統,例如,有些應用程序需要往HDFS上的某個文件中追加日志信息,HBase使用HDFS的Append功能來防止數據丟失等。

2.HDFS RAID

Hadoop RAID模塊在HDFS之上構建了一個新的分布式文件系統——DRFS (Distributed Raid File System),該系統采用了糾錯碼(erasure codes)來增強對數據的保護。有了這樣的保護,可以采用更低的副本數來實現同樣的可靠性保障,進而為用戶節省大量存儲空間。

3.Symlink

Symlink 模塊讓 HDFS 支持符號鏈接。符號鏈接是一種特殊的文件,它以絕對或者相對路徑的形式指向另外一個文件或者目錄(目標文件),當程序向符號鏈接中寫數據時,相當于直接向目標文件中寫數據。

4.Security

Hadoop的HDFS和MapReduce均缺乏相應的安全機制設計。例如,在HDFS中,用戶只要知道某個block的blockID,便可以繞過NameNode直接從DataNode上讀取該block,用戶也可以向任意DataNode上寫block;在MapReduce中,用戶可以修改或者殺死任意其他用戶的作業等。為了增強Hadoop的安全機制,從2009年起,Apache專門抽出一個團隊,從事為Hadoop增加基于Kerberos和刪除標記(deletion token)的安全認證和授權機制的工作。

5.MRv1

正如前面所述,第一代MapReduce計算框架由3部分組成:編程模型、數據處理引擎和運行時環境。其中,編程模型由新舊API兩部分組成;數據處理引擎由MapTask和ReduceTask組成;運行時環境由JobTracker和TaskTracker兩類服務組成。

6.MRv2/YARN

MRv2 是針對 MRv1 在擴展性和多框架支持等方面的不足而提出來的,它將 MRv1 中的JobTracker 包含的資源管理和作業控制兩部分功能拆分開來,分別交由不同的進程實現。考慮到資源管理模塊可以共享給其他框架使用,MRv2將其做成了一個通用的YARN系統。YARN系統的引入使得計算框架進入了平臺化時代。

7.NameNode Federation

在Hadoop 1.0中,一個Hadoop集群只有一個NameNode,因此NameNode的內存限制了集群的可擴展性。NameNode Federation特性解決了Hadoop 1.0的擴展性問題,它允許一個集群擁有多個NameNode,每個NameNode分管一部分目錄,這不僅使HDFS的擴展性得到了增強,也使HDFS具備了隔離性。

8.NameNode HA

HDFS的NameNode存在內存約束限制擴展性和單點故障兩個問題。其中,第一個問題可以通過NameNode Federation方案解決,而第二個問題則可以通過NameNode HA(High Available)機制實現,該機制實現了NameNode的熱備份。

到2013年8月為止,Apache Hadoop已經出現4個大的分支。如圖1-9所示。

Apache Hadoop的4大分支構成了3個系列的Hadoop版本。

(1)0.20.X系列

0.20.2版本發布后,幾個重要的特性沒有基于trunk而是在0.20.2基礎上繼續研發。值得一提的主要有兩個特性:Append與Security。其中,包含Security特性的分支以0.20.203版本發布,而后續的0.20.205版本綜合了這兩個特性。需要注意的是,之后的1.0.0版本僅是0.20.205版本的重命名。0.20.X系列版本是最令用戶感到疑惑的,因為它們具有的一些特性trunk上沒有,而trunk上有的一些特性0.20.X系列版本也沒有。

圖1-9 Hadoop的版本圖

(2)0.21.0/0.22.X系列

這一系列版本將整個 Hadoop 項目分割成了 3 個獨立的模塊,分別是 Common、HDFS 和MapReduce。0.22.0在0.21.0基礎上修復了一些bug并進行了部分優化。HDFS和MapReduce都對Common模塊有依賴,但是MapReduce對HDFS并沒有依賴,這樣,MapReduce可以更容易地運行在其他的分布式文件系統之上,同時,模塊間可以獨立開發。各個模塊的改進如下。

① Common模塊。最大的新特性是在測試方面添加了Large-Scale Automated Test Framework和Fault Injection Framework。

② HDFS模塊。主要增加的新特性包括支持追加操作與建立符號連接、Secondary NameNode改進(Secondary NameNode被剔除,取而代之的是Checkpoint Node,同時添加了一個Backup Node的角色作為NameNode的冷備)、允許用戶自定義block放置算法等。

③ MapReduce模塊。在作業API方面,開始啟動新MapReduce API,但仍然兼容老的API。

(3)0.23.X系列

0.23.X 是為了克服 Hadoop 在擴展性和框架通用性方面的不足而提出來的,它包括基礎庫Common、分布式文件系統HDFS、資源管理框架YARN和運行在YARN上的MapReduce 4部分。其中,新增的YARN可對接入的各種計算框架(如MapReduce、Spark等)進行統一管理。該發行版自帶MapReduce庫,而該庫集成了迄今為止所有的MapReduce新特性。

(4)2.X系列

同0.23.X系列一樣,2.X系列屬于下一代Hadoop。與0.23.X相比,2.X增加了NameNode HA和Wire-compatibility等新特性。

截至本書編寫時,在Hadoop的官方網站http://hadoop.apache.org/releases.html 頁面上,供用戶下載的最新版本有:Hadoop 2.6.4(于2016年2年11日發布)、Hadoop 2.7.2(于2016年1月25日發布)。本書以Hadoop 2.7.2為準,所有示例代碼均在Hadoop 2.7.2中調試。

主站蜘蛛池模板: 化州市| 清河县| 景泰县| 南涧| 赫章县| 阿城市| 黄陵县| 四平市| 郁南县| 岳阳县| 金沙县| 合阳县| 霍州市| 泰兴市| 进贤县| 桂东县| 永福县| 陕西省| 肃北| 岑巩县| 望都县| 苗栗县| 鲜城| 灵台县| 卢氏县| 遂昌县| 开阳县| 噶尔县| 弥勒县| 云浮市| 偏关县| 离岛区| 拉萨市| 甘南县| 镇巴县| 集贤县| 潢川县| 西丰县| 新竹县| 塔河县| 商丘市|