本文主要目的是介紹 Hadoop 的基本架構以及衍生出來的各類工具,以期對 Hadoop 有個總體的認識。html
Hadoop 生態系統是指以 分佈式的文件系統 HDFS、分佈式的計算框架 MapReduce 以及資源管理器 YARN爲基礎構成的分佈式數據處理系統,其結構圖以下圖所示:web
下面將對圖中各項組件作一個介紹算法
HDFS 是 Google 於 2003 發表的 分佈式文件系統 GFS 論文的開源實現版本,主要目的是使用普通商業電腦解決大量數據的存儲以及讀取速度問題,在 GFS 出現以前通常主要在單臺計算機用 RAID 來提升數據存儲量和讀取速度。可是採用 RAID 一方面成本比較高(需求過高時可能只有超級計算機才能知足),另外一方面數據量過大時可能超級計算機也沒法知足需求。因此這個時候就須要採起分佈式的方式去知足擴大存儲(多臺機器多個磁盤)和增長讀取速度的需求(多臺機器能夠同時讀)。數據庫
MapReduce 是一個分佈式的計算框架,在 MapReduce 出現以前就已經有了分佈式計算這個概念。可是大多數分佈式計算只能專門用於處理一類運算,而 Google 在大量實踐中總結出了一個通用的編程模型: map
和 reduce
。其中 map
是指分開計算的過程,而 reduce
是指合併結果的過程。而在這一編程模型添加的一系列機制和操做構成了 MapReduce。MapReduce 大大下降了分佈式計算的門檻,對於開發人員而言只須要編寫一系列 map
和 reduce
函數便可完成所需的分佈式計算過程。編程
YARN 是一個資源管理框架,主要做用是負責集羣的資源調度和做業任務管理。YARN 的出現源於 Hadoop 不能知足統一使用集羣資源的需求,由於 Hadoop1 中集羣的資源調度和任務管理與 MapReduce 的執行過程是耦合在一塊兒的,然後續出現的 Spark、Storm 等分佈式計算系統其架構和執行過程與 MapReduce 不一樣,沒法直接向 Hadoop 申請集羣資源。因此爲了實現集羣資源的統一管理,在 Hadoop2 中對 MapReduce 進行了一個解耦,抽離出了 YARN 這個框架。架構
Zookeeper 主要做用是提供一個分佈式、高可用的協調服務,解決分佈式環境下的數據管理問題:統一命名,狀態同步,集羣管理,配置同步等。框架
雖然 MapReduce 極大的簡化了分佈式計算編程的門檻,可是 Yahoo 的工程師依然以爲 MapReduce 編程太過麻煩,因此他們便開發了 Pig 這個腳本語言用於描述對大數據集的操做。這樣就能夠經過編譯 Pig 腳本生成對應的 MapReduce 程序。機器學習
爲了方便使用 SQL 的工程師使用 MapReduce,Facebook 的工程師開發了 Hive,經過 Hive 熟悉數據庫的工程師能夠無門檻的使用 MapReduce。分佈式
Mahout 的主要目標是建立一些可擴展的機器學習領域經典算法的實現,旨在幫助開發人員更加方便快捷地建立智能應用程序。Mahout 如今已經包含了聚類、分類、推薦引擎(協同過濾)和頻繁集挖掘等普遍使用的數據挖掘方法。函數
Tez 是 Apache 最新開源的支持 DAG 做業的計算框架,它直接源於 MapReduce 框架,核心思想是將 Map 和 Reduce 兩個操做進一步拆分,即 Map 被拆分紅 Input、Processor、Sort、Merge和Output, Reduce 被拆分紅 Input、Shuffle、Sort、Merge、Processor 和 Output 等。
HBase 是一個創建在 HDFS 之上,面向列的針對結構化數據的可伸縮、高可靠、高性能、分佈式和麪向列的動態模式數據庫。
Cloudera 開源的日誌收集系統,具備分佈式、高可靠、高容錯、易於定製和擴展的特色。
Sqoop 是 SQL-to-Hadoop 的縮寫,主要用於傳統數據庫和 Hadoop 以前傳輸數據。數據的導入和導出本質上是Mapreduce 程序,充分利用了 MR 的並行化和容錯性。
Ambari 的做用來講,就是建立、管理、監視 Hadoop 的集羣,是爲了讓 Hadoop 以及相關的大數據軟件更容易使用的一個 web 工具。
總的來講 HDFS 、MapReduce 以及 YARN 是 Hadoop 的核心組件,而咱們學習 Hadoop 最好從核心組件開始學習其原理機制,再逐漸往上層進行了解。