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