Hadoop是一個可以對大量數據進行分佈式處理的軟件框架。具備可靠、高效、可伸縮的特色。算法
Hadoop的核心是HDFS和Mapreduce,hadoop2.0還包括YARN。數據庫
下圖爲hadoop的生態系統:apache
源自於Google的GFS論文,發表於2003年10月,HDFS是GFS克隆版。編程
是Hadoop體系中數據存儲管理的基礎。它是一個高度容錯的系統,能檢測和應對硬件故障,用於在低成本的通用硬件上運行。HDFS簡化了文件的一致性模型,經過流式數據訪問,提供高吞吐量應用程序數據訪問功能,適合帶有大型數據集的應用程序。瀏覽器
Client:切分文件;訪問HDFS;與NameNode交互,獲取文件位置信息;與DataNode交互,讀取和寫入數據。架構
NameNode:Master節點,在hadoop1.X中只有一個,管理HDFS的名稱空間和數據塊映射信息,配置副本策略,處理客戶端請求。框架
DataNode:Slave節點,存儲實際的數據,彙報存儲信息給NameNode。機器學習
Secondary NameNode:輔助NameNode,分擔其工做量;按期合併fsimage和fsedits,推送給NameNode;緊急狀況下,可輔助恢復NameNode,但Secondary NameNode並不是NameNode的熱備。分佈式
源自於google的MapReduce論文,發表於2004年12月,Hadoop MapReduce是google MapReduce 克隆版。函數
源自於google的MapReduce論文
MapReduce是一種計算模型,用以進行大數據量的計算。其中Map對數據集上的獨立元素進行指定的操做,生成鍵-值對形式中間結果。Reduce則對中間結果中相同「鍵」的全部「值」進行規約,以獲得最終結果。MapReduce這樣的功能劃分,很是適合在大量計算機組成的分佈式並行環境裏進行數據處理。
JobTracker:Master節點,只有一個,管理全部做業,做業/任務的監控、錯誤處理等;將任務分解成一系列任務,並分派給TaskTracker。
TaskTracker:Slave節點,運行Map Task和Reduce Task;並與JobTracker交互,彙報任務狀態。
Map Task:解析每條數據記錄,傳遞給用戶編寫的map(),並執行,將輸出結果寫入本地磁盤(若是爲map-only做業,直接寫入HDFS)。
Reducer Task:從Map Task的執行結果中,遠程讀取輸入數據,對數據進行排序,將數據按照分組傳遞給用戶編寫的reduce函數執行。
Mapreduce處理流程,以wordCount爲例:
由facebook開源,最初用於解決海量結構化的日誌數據統計問題。
Hive定義了一種相似SQL的查詢語言(HQL),將SQL轉化爲MapReduce任務在Hadoop上執行。
一般用於離線分析。
源自Google的Bigtable論文,發表於2006年11月,HBase是Google Bigtable克隆版
HBase是一個針對結構化數據的可伸縮、高可靠、高性能、分佈式和麪向列的動態模式數據庫。和傳統關係數據庫不一樣,HBase採用了BigTable的數據模型:加強的稀疏排序映射表(Key/Value),其中,鍵由行關鍵字、列關鍵字和時間戳構成。HBase提供了對大規模數據的隨機、實時讀寫訪問,同時,HBase中保存的數據可使用MapReduce來處理,它將數據存儲和並行計算完美地結合在一塊兒。
數據模型:Schema-->Table-->Column Family-->Column-->RowKey-->TimeStamp-->Value
源自Google的Chubby論文,發表於2006年11月,Zookeeper是Chubby克隆版
解決分佈式環境下的數據管理問題:統一命名,狀態同步,集羣管理,配置同步等。
Sqoop是SQL-to-Hadoop的縮寫,主要用於傳統數據庫和Hadoop以前傳輸數據。
數據的導入和導出本質上是Mapreduce程序,充分利用了MR的並行化和容錯性。
由yahoo!開源,設計動機是提供一種基於MapReduce的ad-hoc(計算在query時發生)數據分析工具
定義了一種數據流語言—Pig Latin,將腳本轉換爲MapReduce任務在Hadoop上執行。
一般用於進行離線分析。
Mahout起源於2008年,最初是Apache Lucent的子項目,它在極短的時間內取得了長足的發展,如今是Apache的頂級項目。
Mahout的主要目標是建立一些可擴展的機器學習領域經典算法的實現,旨在幫助開發人員更加方便快捷地建立智能應用程序。Mahout如今已經包含了聚類、分類、推薦引擎(協同過濾)和頻繁集挖掘等普遍使用的數據挖掘方法。除了算法,Mahout還包含數據的輸入/輸出工具、與其餘存儲系統(如數據庫、MongoDB 或Cassandra)集成等數據挖掘支持架構。
Cloudera開源的日誌收集系統,具備分佈式、高可靠、高容錯、易於定製和擴展的特色。
它將數據從產生、傳輸、處理並最終寫入目標的路徑的過程抽象爲數據流,在具體的數據流中,數據源支持在Flume中定製數據發送方,從而支持收集各類不一樣協議數據。同時,Flume數據流提供對日誌數據進行簡單處理的能力,如過濾、格式轉換等。此外,Flume還具備可以將日誌寫往各類數據目標(可定製)的能力。總的來講,Flume是一個可擴展、適合複雜環境的海量日誌收集系統。
由圖可知 (1)各類瀏覽器,產生海量的Web數據;(2)Nutch項目,一個快速搜索海量網頁的開源項目(3)HDFS,Hadoop分佈式文件系統,大數據的存儲系統;(4)數據分析和可視化工具;(5)MapReduce,大數據處理系統;(6)非結構化數據採集和處理工具;(7)結構化數據與HDFS之間的交互工具;(8)多樣化的MapReduce程序控制工具;(9)數據可視化工具;(10)工做流管理工具;(11)Hadoop生態系統的監管工具;(12)數據序列化處理與任務調度工具;(13)高專業度的Hadoop上層服務工具;(14)在線事務處理存儲系統HBase。整個Hadoop生態系統涉及到了大數據收集、大數據存儲、大數據處理、大數據分析和大數據應用,從而真正達到尋找和應用大數據價值的目的。(3)和(5)是Hadoop的核心模塊,破解了大數據存儲和處理的難題。
俗話說,「大道至簡」,爲了全方位地應用Hadoop造成解決大數據問題的方案,Hadoop周邊的子項目或工具,讓Hadoop如虎添翼。在此,選取幾個細說以下。
1)Pig(http://pig.apache.org/):它是Hadoop的一個擴展,簡化了Hadoop的編程,提供了一個高級數據處理語言Pig Latin,而且保持了Hadoop易於擴展與可靠的特徵。
2)Hive(http://hive.apache.org/):它是一種類SQL數據倉庫基礎設施,創建在Hadoop基礎上的數據倉庫軟件包。數據分析師們可使用一種HiveQL的類SQL語言,發起一個查詢實現與Hive的交互。
3)HBase(http://hbase.apache.org/):它是一個可擴展的、分佈式的、大數據存儲系統。它的設計源自谷歌的Bigtable,旨在支持大表,即包含數十億級別的行和數百萬級別的列。
4)ZooKeeper(http://zookeeper.apache.org/):它是用於構建大型分佈式應用的一種協做式服務。它實現了許多在大型分佈式應用中常見的服務,如配置管理、命名、同步和組服務。
5)Sqoop(http://sqoop.apache.org/):它是用在關係數據庫和Hadoop之間傳遞數據。簡而言之,經過Sqoop,一方面能夠把關係數據庫中數據導入到HDFS;另外一方面也能夠把HDFS中的數據導入到關係數據庫裏。
6)Mahout(http://mahout.apache.org/):它是針對Hadoop實現機器學習算法,包含樸素貝葉斯分類、k-means聚類和協同過濾等算法。