Hadoop生態系統架構
Hadoop是什麼
Hadoop是一個由Apache基金會所開發的分散式系統基礎架構。
使用者可以在不瞭解分散式底層細節的情況下,開發分散式程式。充分利用叢集的威力進行高速運算和儲存。
Hadoop實現了一個分散式檔案系統(Hadoop Distributed File System),簡稱HDFS。HDFS有高容錯性的特點,並且設計用來部署在低廉的(low-cost)硬體上;而且它提供高吞吐量(high throughput)來訪問應用程式的資料,適合那些有著超大資料集(large data set)的應用程式。HDFS放寬了(relax)POSIX的要求,可以以流的形式訪問(streaming access
Hadoop的框架最核心的設計就是:HDFS和MapReduce。HDFS為海量的資料提供了儲存,則MapReduce為海量的資料提供了計算。
簡單的說:
Hadoop是在分散式伺服器叢集上儲存海量資料並執行分散式分析應用的一個開源的軟體框架。具有可靠、高效、可伸縮的特點。
Hadoop1.0時期架構圖
HDFS
Hadoop生態系統的基礎元件是Hadoop分散式檔案系統(HDFS)。HDFS的機制是將大量資料分佈到計算機叢集上,資料一次寫入,但可以多次讀取用於分析。它是其他一些工具的基礎,例如HBase。
MapReduce
Hadoop的主要執行框架即MapReduce,它是一個用於分散式並行資料處理的程式設計模型,將作業分為
HBase
一個構建在HDFS之上的面向列的NoSQL資料庫,HBase用於對大量資料進行快速讀取/寫入。HBase將Zookeeper用於自身的管理,以保證其所有元件都正在執行。
Zookeeper
Zookeeper是Hadoop的分散式協調服務。Zookeeper被設計成可以在機器叢集上執行,是一個具有高度可用性的服務,用於Hadoop操作的管理,而且很多
Oozie
一個可擴充套件的Workflow系統,Oozie已經被整合到Hadoop軟體棧中,用於協調多個MapReduce作業的執行。它能夠處理大量的複雜性,基於外部事件(包括定時和所需資料是否存在)來管理執行。
Pig
對MapReduce程式設計複雜性的抽象,Pig平臺包含用於分析Hadoop資料集的執行環境和指令碼語言(Pig Latin)。它的編譯器將Pig Latin翻譯為MapReduce程式序列。
Hive
類似於SQL的高階語言,用於執行對儲存在Hadoop中資料的查詢,Hive允許不熟悉MapReduce的開發人員編寫資料查詢語句,它會將其翻譯為Hadoop中的MapReduce作業。類似於Pig,Hive是一個抽象層,但更傾向於面向較熟悉SQL而不是Java程式設計的資料庫分析師。
Sqoop
是一個連通性工具,用於在關係型資料庫和資料倉庫與Hadoop之間移動資料。Sqoop利用資料庫來描述匯入/匯出資料的模式,並使用MapReduce實現並行操作和容錯。
Flume
是一個分散式的、具有可靠性和高可用性的服務,用於從單獨的機器上將大量資料高效地收集、聚合並移動到HDFS中。它基於一個簡單靈活的架構,提供流式資料操作。它藉助於簡單可擴充套件的資料模型,允許將來自企業中多臺機器上的資料移至Hadoop。
Mahout
一個機器學習和資料探勘的庫,提供用於聚類、迴歸測試和統計建模常見演算法的MapReduce實現。
Ambari
該專案致力於簡化Hadoop的管理,提供對Hadoop叢集進行供應、管理和監控的支援。
Hadoop2.0時期架構圖
分析 Hadoop2.0時期架構圖:
最底層是分散式檔案系統HDFS。
在分散式檔案系統之上是資源管理與排程系統YARN。
YARN相當於一個作業系統,基於YARN可以部署離線批處理計算框架MapReduce、互動式分散式計算框架Tez,記憶體計算框架Spark,流式計算框架Storm等。
上層可以執行Hive、Pig等資料庫。
Hive是一種類似於sql的分散式資料庫,可以構建資料倉庫。
Pig是一種流資料庫語言。
如果需要執行多個連續的分散式計算任務,那麼Oozie是理想的選擇,其可以方便的執行多種任務。
除此之外,Hbase可以作為分散式資料庫來使用,例如構建海量影象資料的儲存倉庫,其查詢速度很快,是面向列儲存的資料庫。
ZooKeeper是分散式協調服務。
Flume可以構建日誌分析系統。Sqoop可以輕鬆將資料庫中的資料匯入HDFS.
HDFS架構
MapReduce架構
JobTracker:Master節點,只有一個,管理所有作業,作業/任務的監控、錯誤處理等;將任務分解成一系列任務,並分派給TaskTracker。
TaskTracker:Slave節點,執行Map Task和Reduce Task;並與JobTracker互動,彙報任務狀態。
Map Task:解析每條資料記錄,傳遞給使用者編寫的map(),並執行,將輸出結果寫入本地磁碟(如果為map-only作業,直接寫入HDFS)。
Reducer Task:從Map Task的執行結果中,遠端讀取輸入資料,對資料進行排序,將資料按照分組傳遞給使用者編寫的reduce函式執行。
yarn架構
步驟1 使用者向YARN中提交應用程式,其中包括ApplicationMaster程式、啟動ApplicationMaster的命令、使用者程式等。
步驟2ResourceManager為該應用程式分配第一個Container,並與對應的Node-Manager通訊,要求它在這個Container中啟動應用程式的ApplicationMaster。
步驟3ApplicationMaster首先向ResourceManager註冊,這樣使用者可以直接通過ResourceManager檢視應用程式的執行狀態,然後它將為各個任務申請資源,並監控它的執行狀態,直到執行結束,即重複步驟4~7。
步驟4ApplicationMaster採用輪詢的方式通過RPC協議向ResourceManager申請和領取資源。
步驟5 一旦ApplicationMaster申請到資源後,便與對應的NodeManager通訊,要求它啟動任務。
步驟6NodeManager為任務設定好執行環境(包括環境變數、JAR包、二進位制程式等)後,將任務啟動命令寫到一個指令碼中,並通過執行該指令碼啟動任務。
步驟7 各個任務通過某個RPC協議向ApplicationMaster彙報自己的狀態和進度,以讓ApplicationMaster隨時掌握各個任務的執行狀態,從而可以在任務失敗時重新啟動任務。
在應用程式執行過程中,使用者可隨時通過RPC向ApplicationMaster查詢應用程式的當前執行狀態。
步驟8 應用程式執行完成後,ApplicationMaster向ResourceManager登出並關閉自己。
hadoop1.0與hadoop2.0比較
Hadoop元件依賴關係
Hadoop實驗叢集部署結構
負責協調工作流程的ZooKeeper和Oozie
隨著越來越多的專案加入Hadoop大家庭併成為集群系統運作的一部分,大資料處理系統需要負責協調工作的的成員。隨著計算節點的增多,叢集成員需要彼此同步並瞭解去哪裡訪問服務和如何配置,ZooKeeper正是為此而生的。
而在Hadoop執行的任務有時候需要將多個Map/Reduce作業連線到一起,它們之間或許批次依賴。Oozie元件提供管理工作流程和依賴的功能,並無需開發人員編寫定製的解決方案。
Ambari是最新加入Hadoop的專案,Ambari專案旨在將監控和管理等核心功能加入Hadoop專案。Ambari可幫助系統管理員部署和配置Hadoop,升級叢集以及監控服務。還可通過API整合與其他的系統管理工具。
Apache Whirr是一套運行於雲服務的類庫(包括Hadoop),可提供高度的互補性。Whirr現今相對中立,當前支援Amazon EC2和Rackspace服務。
歡迎關注我們的公眾號,每天都有精彩內容分享哦 ~~