-
Hadoop
鎖定
Hadoop是一個由Apache基金會所開發的分佈式系統基礎架構。用户可以在不瞭解分佈式底層細節的情況下,開發分佈式程序。充分利用集羣的威力進行高速運算和存儲。Hadoop實現了一個分佈式文件系統( Distributed File System),其中一個組件是HDFS(Hadoop Distributed File System)。HDFS有高容錯性的特點,並且設計用來部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)來訪問應用程序的數據,適合那些有着超大數據集(large data set)的應用程序。HDFS放寬了(relax)POSIX的要求,可以以流的形式訪問(streaming access)文件系統中的數據。Hadoop的框架最核心的設計就是:HDFS和MapReduce。HDFS為海量的數據提供了存儲,而MapReduce則為海量的數據提供了計算
[1]
。
Hadoop起源
Hadoop起源於Apache Nutch項目,始於2002年,是Apache Lucene的子項目之一
[2]
。2004年,Google在“操作系統設計與實現”(Operating System Design and Implementation,OSDI)會議上公開發表了題為MapReduce:Simplified Data Processing on Large Clusters(Mapreduce:簡化大規模集羣上的數據處理)的論文之後,受到啓發的Doug Cutting等人開始嘗試實現MapReduce計算框架,並將它與NDFS(Nutch Distributed File System)結合,用以支持Nutch引擎的主要算法
[2]
。由於NDFS和MapReduce在Nutch引擎中有着良好的應用,所以它們於2006年2月被分離出來,成為一套完整而獨立的軟件,並被命名為Hadoop。到了2008年年初,hadoop已成為Apache的頂級項目,包含眾多子項目,被應用到包括Yahoo在內的很多互聯網公司
[2]
。
Hadoop優點
Hadoop 是可靠的,因為它假設計算元素和存儲會失敗,因此它維護多個工作數據副本,確保能夠針對失敗的節點重新分佈處理。
Hadoop 是高效的,因為它以並行的方式工作,通過並行處理加快處理速度。
Hadoop 還是可伸縮的,能夠處理 PB 級數據。
此外,Hadoop 依賴於社區服務,因此它的成本比較低,任何人都可以使用。
Hadoop大數據處理的意義
Hadoop得以在大數據處理應用中廣泛應用得益於其自身在數據提取、變形和加載(ETL)方面上的天然優勢。Hadoop的分佈式架構,將大數據處理引擎儘可能的靠近存儲,對例如像ETL這樣的批處理操作相對合適,因為類似這樣操作的批處理結果可以直接走向存儲。Hadoop的MapReduce功能實現了將單個任務打碎,並將碎片任務(Map)發送到多個節點上,之後再以單個數據集的形式加載(Reduce)到數據倉庫裏
[3]
。
Hadoop核心架構
Hadoop 由許多元素構成。其最底部是 Hadoop Distributed File System(HDFS),它存儲 Hadoop 集羣中所有存儲節點上的文件。HDFS的上一層是MapReduce 引擎,該引擎由 JobTrackers 和 TaskTrackers 組成。通過對Hadoop分佈式計算平台最核心的分佈式文件系統HDFS、MapReduce處理過程,以及數據倉庫工具Hive和分佈式數據庫Hbase的介紹,基本涵蓋了Hadoop分佈式平台的所有技術核心
[3]
。
HadoopHDFS
對外部客户機而言,HDFS就像一個傳統的分級文件系統。可以創建、刪除、移動或重命名文件,等等。但是 HDFS 的架構是基於一組特定的節點構建的(參見圖 1),這是由它自身的特點決定的。這些節點包括 NameNode(僅一個),它在 HDFS 內部提供元數據服務;DataNode,它為 HDFS 提供存儲塊。由於僅存在一個 NameNode,因此這是 HDFS 1.x版本的一個缺點(單點失敗)。在Hadoop 2.x版本可以存在兩個NameNode,解決了單節點故障問題
[3]
。
存儲在 HDFS 中的文件被分成塊,然後將這些塊複製到多個計算機中(DataNode)。這與傳統的 RAID 架構大不相同。塊的大小(1.x版本默認為 64MB,2.x版本默認為128MB)和複製的塊數量在創建文件時由客户機決定。NameNode 可以控制所有文件操作。HDFS 內部的所有通信都基於標準的 TCP/IP 協議。
HadoopNameNode
NameNode 是一個通常在 HDFS 實例中的單獨機器上運行的軟件。它負責管理文件系統名稱空間和控制外部客户機的訪問。NameNode 決定是否將文件映射到 DataNode 上的複製塊上。對於最常見的 3 個複製塊,第一個複製塊存儲在同一機架的不同節點上,最後一個複製塊存儲在不同機架的某個節點上
[4]
。
實際的 I/O事務並沒有經過 NameNode,只有表示 DataNode 和塊的文件映射的元數據經過 NameNode。當外部客户機發送請求要求創建文件時,NameNode 會以塊標識和該塊的第一個副本的 DataNode IP 地址作為響應。這個 NameNode 還會通知其他將要接收該塊的副本的 DataNode
[4]
。
NameNode 在一個稱為 FsImage 的文件中存儲所有關於文件系統名稱空間的信息。這個文件和一個包含所有事務的記錄文件(這裏是 EditLog)將存儲在 NameNode 的本地文件系統上。FsImage 和 EditLog 文件也需要複製副本,以防文件損壞或 NameNode 系統丟失
[4]
。
NameNode本身不可避免地具有SPOF(Single Point Of Failure)單點失效的風險,主備模式並不能解決這個問題,通過Hadoop Non-stop namenode才能實現100% uptime可用時間
[4]
。
HadoopDataNode
DataNode 也是一個通常在 HDFS實例中的單獨機器上運行的軟件。Hadoop 集羣包含一個 NameNode 和大量 DataNode。DataNode 通常以機架的形式組織,機架通過一個交換機將所有系統連接起來。Hadoop 的一個假設是:機架內部節點之間的傳輸速度快於機架間節點的傳輸速度
[4]
。
DataNode 響應來自 HDFS 客户機的讀寫請求。它們還響應來自 NameNode 的創建、刪除和複製塊的命令。NameNode 依賴來自每個 DataNode 的定期心跳(heartbeat)消息。每條消息都包含一個塊報告,NameNode 可以根據這個報告驗證塊映射和其他文件系統元數據。如果 DataNode 不能發送心跳消息,NameNode 將採取修復措施,重新複製在該節點上丟失的塊
[4]
。
Hadoop文件操作
如果客户機想將文件寫到 HDFS 上,首先需要將該文件緩存到本地的臨時存儲。如果緩存的數據大於所需的 HDFS 塊大小,創建文件的請求將發送給 NameNode。NameNode 將以 DataNode 標識和目標塊響應客户機
[4]
。
同時也通知將要保存文件塊副本的 DataNode。當客户機開始將臨時文件發送給第一個 DataNode 時,將立即通過管道方式將塊內容轉發給副本 DataNode。客户機也負責創建保存在相同 HDFS名稱空間中的校驗和(checksum)文件
[4]
。
HadoopLinux 集羣
Hadoop 框架可在單一的 Linux 平台上使用(開發和調試時),官方提供MiniCluster作為單元測試使用,不過使用存放在機架上的商業服務器才能發揮它的力量。這些機架組成一個 Hadoop 集羣。它通過集羣拓撲知識決定如何在整個集羣中分配作業和文件。Hadoop 假定節點可能失敗,因此採用本機方法處理單個計算機甚至所有機架的失敗
[4]
。
Hadoop和高效能計算、網格計算的區別
在Hadoop 出現之前,高性能計算和網格計算一直是處理大數據問題主要的使用方法和工具,它們主要採用消息傳遞接口(Message Passing Interface,MPI)提供的API 來處理大數據。高性能計算的思想是將計算作業分散到集羣機器上,集羣計算節點訪問存儲區域網絡SAN 構成的共享文件系統獲取數據,這種設計比較適合計算密集型作業。當需要訪問像PB 級別的數據的時候,由於存儲設備網絡帶寬的限制,很多集羣計算節點只能空閒等待數據。而Hadoop卻不存在這種問題,由於Hadoop 使用專門為分佈式計算設計的文件系統HDFS,計算的時候只需要將計算代碼推送到存儲節點上,即可在存儲節點上完成數據本地化計算,Hadoop 中的集羣存儲節點也是計算節點
[4]
。
在分佈式編程方面,MPI 是屬於比較底層的開發庫,它賦予了程序員極大的控制能力,但是卻要程序員自己控制程序的執行流程,容錯功能,甚至底層的套接字通信、數據分析算法等底層細節都需要自己編程實現。這種要求無疑對開發分佈式程序的程序員提出了較高的要求。相反,Hadoop 的MapReduce 卻是一個高度抽象的並行編程模型,它將分佈式並行編程抽象為兩個原語操作,即map 操作和reduce 操作,開發人員只需要簡單地實現相應的接口即可,完全不用考慮底層數據流、容錯、程序的並行執行等細節。這種設計無疑大大降低了開發分佈式並行程序的難度
[4]
。
網格計算通常是指通過現有的互聯網,利用大量來自不同地域、資源異構的計算機空閒的CPU 和磁盤來進行分佈式存儲和計算。這些參與計算的計算機具有分處不同地域、資源異構(基於不同平台,使用不同的硬件體系結構等)等特徵,從而使網格計算和Hadoop 這種基於集羣的計算相區別開。Hadoop 集羣一般構建在通過高速網絡連接的單一數據中心內,集羣計算機都具有體系結構、平台一致的特點,而網格計算需要在互聯網接入環境下使用,網絡帶寬等都沒有保證
[4]
。
發展現狀
Hadoop 設計之初的目標就定位於高可靠性、高可拓展性、高容錯性和高效性,正是這些設計上與生俱來的優點,才使得Hadoop 一出現就受到眾多大公司的青睞,同時也引起了研究界的普遍關注。Hadoop 技術在互聯網領域已經得到了廣泛的運用,例如,Yahoo 使用4 000 個節點的Hadoop集羣來支持廣告系統和Web 搜索的研究;Facebook 使用1 000 個節點的集羣運行Hadoop,存儲日誌數據,支持其上的數據分析和機器學習;百度用Hadoop處理每週200TB 的數據,從而進行搜索日誌分析和網頁數據挖掘工作;中國移動研究院基於Hadoop 開發了“大雲”(Big Cloud)系統,不但用於相關數據分析,還對外提供服務;淘寶的Hadoop 系統用於存儲並處理電子商務交易的相關數據。國內的高校和科研院所基於Hadoop 在數據存儲、資源管理、作業調度、性能優化、系統高可用性和安全性方面進行研究,相關研究成果多以開源形式貢獻給Hadoop 社區
[5]
。
HDFS流程圖(2張)
Hadoop應用程序
Hadoop 的最常見用法之一是 Web 搜索。雖然它不是唯一的軟件框架應用程序,但作為一個並行數據處理引擎,它的表現非常突出。Hadoop 最有趣的方面之一是 Map and Reduce 流程,它受到Google開發的啓發。這個流程稱為創建索引,它將 Web爬行器檢索到的文本 Web 頁面作為輸入,並且將這些頁面上的單詞的頻率報告作為結果。然後可以在整個 Web 搜索過程中使用這個結果從已定義的搜索參數中識別內容
[6]
。
最簡單的 MapReduce應用程序至少包含 3 個部分:一個 Map 函數、一個 Reduce 函數和一個 main 函數。main 函數將作業控制和文件輸入/輸出結合起來。在這點上,Hadoop 提供了大量的接口和抽象類,從而為 Hadoop應用程序開發人員提供許多工具,可用於調試和性能度量等
[6]
。
MapReduce 本身就是用於並行處理大數據集的軟件框架。MapReduce 的根源是函數性編程中的 map 和 reduce 函數。它由兩個可能包含有許多實例(許多 Map 和 Reduce)的操作組成。Map 函數接受一組數據並將其轉換為一個鍵/值對列表,輸入域中的每個元素對應一個鍵/值對。Reduce 函數接受 Map 函數生成的列表,然後根據它們的鍵(為每個鍵生成一個鍵/值對)縮小鍵/值對列表
[6]
。
這裏提供一個示例,幫助您理解它。假設輸入域是 one small step for man,one giant leap for mankind。在這個域上運行 Map 函數將得出以下的鍵/值對列表
[6]
:
(one,1)(small,1) (step,1) (for,1) (man,1)(one,1) (giant,1) (leap,1) (for,1) (mankind,1)
如果對這個鍵/值對列表應用 Reduce 函數,將得到以下一組鍵/值對:
(one,2) (small,1) (step,1) (for,2) (man,1)(giant,1) (leap,1) (mankind,1)
結果是對輸入域中的單詞進行計數,這無疑對處理索引十分有用。但是,假設有兩個輸入域,第一個是 one small step for man,第二個是 one giant leap for mankind。您可以在每個域上執行 Map 函數和 Reduce 函數,然後將這兩個鍵/值對列表應用到另一個 Reduce 函數,這時得到與前面一樣的結果。換句話説,可以在輸入域並行使用相同的操作,得到的結果是一樣的,但速度更快。這便是 MapReduce 的威力;它的並行功能可在任意數量的系統上使用
[6]
。
回到 Hadoop 上,它實現這個功能的方法是:一個代表客户機在單個主系統上啓動的 MapReduce應用程序稱為 JobTracker。類似於 NameNode,它是 Hadoop 集羣中唯一負責控制 MapReduce應用程序的系統。在應用程序提交之後,將提供包含在 HDFS 中的輸入和輸出目錄。JobTracker 使用文件塊信息(物理量和位置)確定如何創建其他 TaskTracker 從屬任務。MapReduce應用程序被複制到每個出現輸入文件塊的節點。將為特定節點上的每個文件塊創建一個唯一的從屬任務。每個 TaskTracker 將狀態和完成信息報告給 JobTracker
[6]
。
Hadoop區別
Hadoop是Apache軟件基金會發起的一個項目,在大數據分析以及非結構化數據蔓延的背景下,Hadoop受到了前所未有的關注
[7]
。
Hadoop是一種分佈式數據和計算的框架。它很擅長存儲大量的半結構化的數據集。數據可以隨機存放,所以一個磁盤的失敗並不會帶來數據丟失。Hadoop也非常擅長分佈式計算——快速地跨多台機器處理大型數據集合
[8]
。
MapReduce是處理大量半結構化數據集合的編程模型。編程模型是一種處理並結構化特定問題的方式。例如,在一個關係數據庫中,使用一種集合語言執行查詢,如SQL。告訴語言想要的結果,並將它提交給系統來計算出如何產生計算。還可以用更傳統的語言(C++,Java),一步步地來解決問題。這是兩種不同的編程模型,MapReduce就是另外一種
[8]
。
Hadoop信息安全
5、確定商業分析是否需要訪問真實數據,或者確定是否可以使用這些敏感數據。然後,選擇合適的加密技術。如果有任何疑問,對其進行加密隱藏處理,同時提供最安全的加密技術和靈活的應對策略,以適應未來需求的發展
[9]
。
- 參考資料
-
- 1. 徐繼業,朱潔華,王海彬編,氣象大數據,上海科學技術出版社,2018.09,第46頁
- 2. 饒文碧主編,Hadoop核心技術與實驗,武漢大學出版社,2017.04,第1頁
- 3. 李小華,周毅主編;劉曉輝等副主編,醫院信息系統數據庫技術與應用=Technology and application of database of hospital information system,中山大學出版社,2015.10,第431頁~第433頁
- 4. 李浪主編,網絡安全與密碼技術導論,華中科技大學出版社,2015.09,第175頁~第177頁
- 5. 陶皖主編,雲計算與大數據,西安電子科技大學出版社,2017.01,第126頁
- 6. 楊旭,湯海京,丁剛毅編著,數據科學導論 第2版,北京理工大學出版社,2017.01,第168頁
- 7. 數據庫技術漫談之大話Hadoop MapReduce .TechTarget數據庫.2012-02-29[引用日期2014-07-24]
- 8. 數據庫新技術:Hadoop和MapReduce的比較 .techTarget 數據庫.2011-06-02[引用日期2014-07-25]
- 9. Joe Austin.Dataguise Enhances DG for Hadoop with Selective Encryption to Enable Secure, High-Performance Analytics for Hadoop Users:網絡出版,2013年