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則為海量的數據提供了計算。
起源,優點,核心架構,HDFS,NameNode,DataNode,檔案操作,Linux 集群,應用程式,區別,信息安全,
起源 Hadoop起源於Apache Nutch項目,始於2002年,是Apache
Lucene 的子項目之一。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引擎的主要算法。由於NDFS和MapReduce在Nutch引擎中有著良好的套用,所以它們於2006年2月被分離出來,成為一套完整而獨立的軟體,並被命名為Hadoop。到了2008年年初,hadoop已成為
Apache 的頂級項目,包含眾多子項目,被套用到包括Yahoo在內的很多網際網路公司。
Hadoop圖示
優點 Hadoop是一個能夠對大量數據進行
分散式處理 的
軟體 框架。 Hadoop 以一種可靠、高效、可伸縮的方式進行數據處理。
Hadoop 是可靠的,因為它假設計算元素和存儲會失敗,因此它維護多個工作數據副本,確保能夠針對失敗的節點重新
分布處理 。
Hadoop 是高效的,因為它以並行的方式工作,通過
並行處理 加快處理速度。
Hadoop 還是可伸縮的,能夠處理 PB 級數據。
此外,Hadoop 依賴於社區服務,因此它的成本比較低,任何人都可以使用。
Hadoop是一個能夠讓用戶輕鬆架構和使用的
分散式計算 平台。用戶可以輕鬆地在Hadoop上開發和運行處理海量數據的
應用程式 。它主要有以下幾個優點:
1.高可靠性 。Hadoop按位存儲和處理數據的能力值得人們信賴。
2.高擴展性 。Hadoop是在可用的計算機集簇間分配數據並完成計算任務的,這些集簇可以方便地擴展到數以千計的節點中。
3.高效性 。Hadoop能夠在節點之間動態地移動數據,並保證各個節點的
動態平衡 ,因此處理速度非常快。
4.高 容錯性 。Hadoop能夠自動保存數據的多個副本,並且能夠自動將失敗的任務重新分配。
5.低成本 。與一體機、商用數據倉庫以及QlikView、Yonghong Z-Suite等數據集市相比,hadoop是開源的,項目的軟體成本因此會大大降低。
Hadoop帶有用
Java 語言編寫的框架,因此運行在 Linux 生產平台上是非常理想的。Hadoop 上的
應用程式 也可以使用其他語言編寫,比如
C++ 。
Hadoop大數據處理的意義
Hadoop得以在大數據處理套用中廣泛套用得益於其自身在數據提取、變形和載入(ETL)方面上的天然優勢。Hadoop的分散式架構,將大數據處理引擎儘可能的靠近存儲,對例如像ETL這樣的批處理操作相對合適,因為類似這樣操作的批處理結果可以直接走向存儲。Hadoop的MapReduce功能實現了將單個任務打碎,並將碎片任務(Map)傳送到多個節點上,之後再以單個數據集的形式載入(Reduce)到數據倉庫里。
Hadoop架構圖
核心架構 Hadoop 由許多元素構成。其最底部是 Hadoop Distributed File System(HDFS),它存儲 Hadoop 集群中所有存儲節點上的檔案。HDFS的上一層是
MapReduce 引擎,該引擎由 JobTrackers 和 TaskTrackers 組成。通過對Hadoop分散式計算平台最核心的
分散式檔案系統 HDFS、MapReduce處理過程,以及數據倉庫工具Hive和
分散式資料庫 Hbase的介紹,基本涵蓋了Hadoop分散式平台的所有技術核心。
HDFS 對外部客戶機而言,
HDFS 就像一個傳統的分級檔案系統。可以創建、刪除、移動或重命名檔案,等等。但是 HDFS 的架構是基於一組特定的節點構建的(參見圖 1),這是由它自身的特點決定的。這些節點包括 NameNode(僅一個),它在 HDFS 內部提供元數據服務;DataNode,它為 HDFS 提供存儲塊。由於僅存在一個 NameNode,因此這是 HDFS 1.x版本的一個缺點(單點失敗)。在Hadoop 2.x版本可以存在兩個NameNode,解決了單節點故障問題。
存儲在 HDFS 中的檔案被分成塊,然後將這些塊複製到多個計算機中(DataNode)。這與傳統的 RAID 架構大不相同。塊的大小(1.x版本默認為 64MB,2.x版本默認為128MB)和複製的塊數量在創建檔案時由客戶機決定。NameNode 可以控制所有檔案操作。HDFS 內部的所有通信都基於標準的 TCP/IP 協定。
NameNode NameNode 是一個通常在
HDFS 實例中的單獨機器上運行的
軟體 。它負責管理檔案系統
名稱空間 和控制外部客戶機的訪問。NameNode 決定是否將檔案映射到 DataNode 上的複製塊上。對於最常見的 3 個複製塊,第一個複製塊存儲在同一機架的不同節點上,最後一個複製塊存儲在不同機架的某個節點上。
實際的 I/O
事務 並沒有經過 NameNode,只有表示 DataNode 和塊的檔案映射的元數據經過 NameNode。當外部客戶機傳送請求要求創建檔案時,NameNode 會以塊標識和該塊的第一個副本的 DataNode IP 地址作為回響。這個 NameNode 還會通知其他將要接收該塊的副本的 DataNode。
NameNode 在一個稱為 FsImage 的檔案中存儲所有關於檔案系統
名稱空間 的信息。這個檔案和一個包含所有事務的
記錄檔案 (這裡是 EditLog)將存儲在 NameNode 的本地檔案系統上。FsImage 和 EditLog 檔案也需要複製副本,以防檔案損壞或 NameNode 系統丟失。
NameNode本身不可避免地具有SPOF(Single Point Of Failure)單點失效的風險,主備模式並不能解決這個問題,通過Hadoop Non-stop namenode才能實現100% uptime可用時間。
DataNode DataNode 也是一個通常在
HDFS 實例中的單獨機器上運行的軟體。Hadoop 集群包含一個 NameNode 和大量 DataNode。DataNode 通常以機架的形式組織,機架通過一個
交換機 將所有系統連線起來。Hadoop 的一個假設是:機架內部
節點 之間的傳輸速度快於機架間節點的傳輸速度。
DataNode 回響來自 HDFS 客戶機的讀寫請求。它們還回響來自 NameNode 的創建、刪除和複製塊的命令。NameNode 依賴來自每個 DataNode 的定期心跳(heartbeat)訊息。每條訊息都包含一個塊報告,NameNode 可以根據這個報告驗證塊映射和其他檔案系統元數據。如果 DataNode 不能傳送心跳訊息,NameNode 將採取修復措施,重新複製在該節點上丟失的塊。
檔案操作 可見,HDFS 並不是一個萬能的檔案系統。它的主要目的是支持以流的形式訪問寫入的大型檔案。
如果客戶機想將檔案寫到 HDFS 上,首先需要將該檔案快取到本地的臨時存儲。如果快取的數據大於所需的 HDFS 塊大小,創建檔案的請求將傳送給 NameNode。NameNode 將以 DataNode 標識和目標塊回響客戶機。
同時也通知將要保存檔案塊副本的 DataNode。當客戶機開始將
臨時檔案 傳送給第一個 DataNode 時,將立即通過管道方式將塊內容轉發給副本 DataNode。客戶機也負責創建保存在相同 HDFS
名稱空間 中的校驗和(checksum)檔案。
在最後的檔案塊傳送之後,NameNode 將檔案創建提交到它的持久化元
數據存儲 (在 EditLog 和 FsImage 檔案)。
Linux 集群 Hadoop 框架可在單一的 Linux 平台上使用(開發和調試時),官方提供MiniCluster作為單元測試使用,不過使用存放在機架上的商業伺服器才能發揮它的力量。這些機架組成一個 Hadoop
集群 。它通過集群拓撲知識決定如何在整個集群中分配作業和檔案。Hadoop 假定節點可能失敗,因此採用本機方法處理單個計算機甚至所有機架的失敗。
Hadoop和高效能計算、格線計算的區別
在Hadoop 出現之前,高性能計算和格線計算一直是處理大數據問題主要的使用方法和工具,它們主要採用訊息傳遞接口(Message Passing Interface,MPI)提供的API 來處理大數據。高性能計算的思想是將計算作業分散到集群機器上,集群計算節點訪問存儲區域網路SAN 構成的已分享檔案系統獲取數據,這種設計比較適合計算密集型作業。當需要訪問像PB 級別的數據的時候,由於存儲設備網路頻寬的限制,很多集群計算節點只能空閒等待數據。而Hadoop卻不存在這種問題,由於Hadoop 使用專門為分散式計算設計的檔案系統HDFS,計算的時候只需要將計算代碼推送到存儲節點上,即可在存儲節點上完成數據本地化計算,Hadoop 中的集群存儲節點也是計算節點。
在分散式編程方面,MPI 是屬於比較底層的開發庫,它賦予了程式設計師極大的控制能力,但是卻要程式設計師自己控制程式的執行流程,容錯功能,甚至底層的套接字通信、數據分析算法等底層細節都需要自己編程實現。這種要求無疑對開發分散式程式的程式設計師提出了較高的要求。相反,Hadoop 的MapReduce 卻是一個高度抽象的並行編程模型,它將分散式並行編程抽象為兩個原語操作,即map 操作和reduce 操作,開發人員只需要簡單地實現相應的接口即可,完全不用考慮底層數據流、容錯、程式的並行執行等細節。這種設計無疑大大降低了開發分散式並行程式的難度。
格線計算通常是指通過現有的網際網路,利用大量來自不同地域、資源異構的計算機空閒的CPU 和磁碟來進行分散式存儲和計算。這些參與計算的計算機具有分處不同地域、資源異構(基於不同平台,使用不同的硬體體系結構等)等特徵,從而使格線計算和Hadoop 這種基於集群的計算相區別開。Hadoop 集群一般構建在通過高速網路連線的單一數據中心內,集群計算機都具有體系結構、平台一致的特點,而格線計算需要在網際網路接入環境下使用,網路頻寬等都沒有保證。
發展現狀
Hadoop 設計之初的目標就定位於高可靠性、高可拓展性、高容錯性和高效性,正是這些設計上與生俱來的優點,才使得Hadoop 一出現就受到眾多大公司的青睞,同時也引起了研究界的普遍關注。Hadoop 技術在網際網路領域已經得到了廣泛的運用,例如,Yahoo 使用4 000 個節點的Hadoop集群來支持廣告系統和Web 搜尋的研究;Facebook 使用1 000 個節點的集群運行Hadoop,存儲日誌數據,支持其上的數據分析和機器學習;百度用Hadoop處理每周200TB 的數據,從而進行搜尋日誌分析和網頁數據挖掘工作;
中國移動研究院 基於Hadoop 開發了“大雲”(Big Cloud)系統,不但用於相關數據分析,還對外提供服務;淘寶的Hadoop 系統用於存儲並處理電子商務交易的相關數據。國內的高校和科研院所基於Hadoop 在數據存儲、資源管理、作業調度、性能最佳化、系統高可用性和安全性方面進行研究,相關研究成果多以開源形式貢獻給Hadoop 社區。
除了上述大型企業將Hadoop 技術運用在自身的服務中外,一些提供Hadoop 解決方案的商業型公司也紛紛跟進,利用自身技術對Hadoop 進行最佳化、改進、二次開發等,然後以公司自有產品形式對外提供Hadoop 的商業服務。比較知名的有創辦於2008 年的Cloudera 公司,它是一家專業從事基於ApacheHadoop 的數據管理軟體銷售和服務的公司,它希望充當大數據領域中類似RedHat 在Linux 世界中的角色。該公司基於Apache Hadoop 發行了相應的商業版本Cloudera Enterprise,它還提供Hadoop 相關的支持、諮詢、培訓等服務。在2009 年,Cloudera 聘請了Doug Cutting(Hadoop 的創始人)擔任公司的
首席架構師 ,從而更加加強了Cloudera 公司在Hadoop 生態系統中的影響和地位。最近,Oracle 也表示已經將Cloudera 的Hadoop 發行版和Cloudera Manager 整合到Oracle Big Data Appliance 中。同樣,Intel 也基於Hadoop 發行了自己的版本IDH。從這些可以看出,越來越多的企業將Hadoop 技術作為進入大數據領域的必備技術。
應用程式 Hadoop 的最常見用法之一是 Web 搜尋。雖然它不是唯一的
軟體 框架
應用程式 ,但作為一個並行
數據處理 引擎,它的表現非常突出。Hadoop 最有趣的方面之一是 Map and Reduce 流程,它受到
Google 開發的啟發。這個流程稱為創建索引,它將 Web
爬行器 檢索到的文本 Web 頁面作為輸入,並且將這些頁面上的單詞的頻率報告作為結果。然後可以在整個 Web 搜尋過程中使用這個結果從已定義的搜尋參數中識別內容。
最簡單的 MapReduce
應用程式 至少包含 3 個部分:一個 Map
函式 、一個 Reduce 函式和一個 main 函式。main 函式將
作業控制 和檔案輸入/輸出結合起來。在這點上,Hadoop 提供了大量的接口和
抽象類 ,從而為 Hadoop
應用程式開發 人員提供許多工具,可用於調試和性能度量等。
MapReduce 本身就是用於
並行處理 大數據集的
軟體 框架。MapReduce 的根源是函式性編程中的 map 和 reduce 函式。它由兩個可能包含有許多實例(許多 Map 和 Reduce)的操作組成。Map 函式接受一組數據並將其轉換為一個鍵/值對列表,輸入域中的每個元素對應一個鍵/值對。Reduce 函式接受 Map 函式生成的列表,然後根據它們的鍵(為每個鍵生成一個鍵/值對)縮小鍵/值對列表。
這裡提供一個示例,幫助您理解它。假設輸入域是 one small step for man,one giant leap for mankind。在這個域上運行 Map 函式將得出以下的鍵/值對列表:
(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 的威力;它的並行功能可在任意數量的系統上使用。
回到 Hadoop 上,它實現這個功能的方法是:一個代表客戶機在單個主系統上啟動的 MapReduce
應用程式 稱為 JobTracker。類似於 NameNode,它是 Hadoop 集群中唯一負責控制 MapReduce
應用程式 的系統。在
應用程式 提交之後,將提供包含在 HDFS 中的輸入和輸出目錄。JobTracker 使用檔案塊信息(物理量和位置)確定如何創建其他 TaskTracker 從屬任務。MapReduce
應用程式 被複製到每個出現輸入檔案塊的節點。將為特定節點上的每個檔案塊創建一個唯一的從屬任務。每個 TaskTracker 將狀態和完成信息報告給 JobTracker。
Hadoop 的這個特點非常重要,因為它並沒有將存儲移動到某個位置以供處理,而是將處理移動到存儲。
顯示處理和存儲的物理分布的 Hadoop 集群 Hadoop是一種分散式數據和計算的框架。它很擅長存儲大量的半結構化的數據集。數據可以隨機存放,所以一個磁碟的失敗並不會帶來數據丟失。Hadoop也非常擅長分散式計算——快速地跨多台機器處理大型數據集合。
5、確定商業分析是否需要訪問真實數據,或者確定是否可以使用這些敏感數據。然後,選擇合適的加密技術。如果有任何疑問,對其進行加密隱藏處理,同時提供最安全的加密技術和靈活的應對策略,以適應未來需求的發展。