Hadoop Architecture

Hadoop以分布式文件系統(tǒng)HDFS(Hadoop Distributed File System)和MapReduce為核心,為用戶提供了系統(tǒng)底層細節(jié)透明得分布式基礎(chǔ)構(gòu)架。分布式文件系統(tǒng)HDFS的高容錯性、高伸縮性等優(yōu)點允許用戶將Hadoop部署在低廉的硬件上,形成分布式文件系統(tǒng);MapReduce分布式編程模型允許用戶在不了解分布式系統(tǒng)底層細節(jié)的情況下開發(fā)并行運用程序。所以用戶可以利用Hadoop快速簡便地搭建分布式計算平臺,并且可以充分利用集群的計算和存儲能力,完成海量數(shù)據(jù)的處理。

Apache Hadoop 2.X版本包含以下模塊:Hadoop通用模塊;Hadoop分布式文件系統(tǒng)HDFS;支持應(yīng)用數(shù)據(jù)高吞吐訪問的分布式文件系統(tǒng);Hadoop YARN,用于作業(yè)調(diào)度和集群資源管理地框架;Hadoop MapReduce,基于YARN地大數(shù)據(jù)并行處理系統(tǒng)。

Hadoop生態(tài)系統(tǒng)主要包括:Hive、HBase、Pig、Sqoop、Flume、ZooKeeper、Mahout、Spark、Storm、Shark、Phonix、Tez、Ambari等。

Hive:用于Hadoop地一個數(shù)據(jù)倉庫系統(tǒng),它提供了類似于SQL地查詢語言,通過該語言可以方便的進行數(shù)據(jù)匯總,特定查詢以及分析放在Hadoop兼容文件系統(tǒng)中的大數(shù)據(jù)。

HBase:一種分布的、可伸縮的、大數(shù)據(jù)存儲庫,支持隨機、實時讀/寫訪問。

Pig:一個分析大數(shù)據(jù)地平臺。

Sqoop:為高效傳輸批量數(shù)據(jù)而設(shè)計的一種工具,用于Apache Hadoop和機構(gòu)化數(shù)據(jù)庫存儲之間的數(shù)據(jù)傳輸。

Flume:一種分布式的、可靠的服務(wù),用于高校搜集、匯總、移動大量日志數(shù)據(jù)。

ZooKeeper:一種集中服務(wù),用于維護配置信息,命名,提供分布式同步,以及提供分組服務(wù)。

Mahout:一種基于Hadoop的機器學習和數(shù)據(jù)挖掘的分布式計算框架算法集,實現(xiàn)了多種MapReduce模式的數(shù)據(jù)挖掘算法。

Spark:一個開源數(shù)據(jù)分析集群計算框架,由UC Berkeley開發(fā),建立于HDFS之上。Spark 和 Hadoop一樣,用于構(gòu)建大規(guī)模,低延時的數(shù)據(jù)分析應(yīng)用。Spark采用Scala語言實現(xiàn),使用Scala作為應(yīng)用框架。

Storm:一個分布式的、容錯的實時計算系統(tǒng)。Storm屬于流處理平臺,多用于實時計算并更新數(shù)據(jù)庫;也可被用于“連續(xù)計算”,對數(shù)據(jù)流做連續(xù)查詢,并將數(shù)據(jù)計算結(jié)果以流的形式輸出給用戶。

Shark:即Hive on?Spark,一個專為Spark打造的大規(guī)模數(shù)據(jù)倉庫系統(tǒng),兼容Apache Hive, Shark支持Hive查詢語言、元存儲、序列化格式及自定義函數(shù),與現(xiàn)有Hive部署無縫集成,是一個更快、更強大的替代方案。

Hadoop HDFS 原理

HDFS和現(xiàn)有的分布式文件系統(tǒng)有很多共同點,同時,它又和其他的有明顯的區(qū)別。HDFS是一個高容錯性(fault-tolerant)的系統(tǒng),部署在廉價硬件上能提供高吞吐量的數(shù)據(jù)訪問(high throughput),放寬了一部分POSIX的約束,來實現(xiàn)流式讀取文件的系統(tǒng)數(shù)據(jù)的目的。

HDFS采用的是master/slave的架構(gòu),一個HDFS集群是由一個NameNode和一定數(shù)目的DataNodes組成。

HDFS Architecture

Hadoop MapReduce 原理

這是一個快速高效用于編寫并行處理大數(shù)據(jù)程序并應(yīng)用在大集群上的編程框架。Map(映射)、Reduce(歸納)。一個MapReduce作業(yè)通常會把輸入的數(shù)據(jù)集切分成若干獨立的數(shù)據(jù)塊,由map任務(wù)已完全并行的方式處理它們,框架會對map的輸出先進行排序,然后把輸出結(jié)果給reduce任務(wù)。作業(yè)的輸入和輸出通常會被存儲在文件系統(tǒng)中,整個框架負,責任務(wù)的調(diào)度和監(jiān)控,重新執(zhí)行失敗任務(wù)。

通常,運行MapReduce框架的計算節(jié)點和HDFS存儲節(jié)點是運行在一組相同節(jié)點上的。MapReduce框架包括一個主節(jié)點(ResourceManager)、多個子節(jié)點(NodeManager)和MRAppMaster(每個任務(wù)一個)共同組成。應(yīng)用程序至少應(yīng)該指明輸入/輸出的參數(shù)位置(路徑),并通過實現(xiàn)合適的接口或則抽象類提供map和reduce函數(shù),再加上其他作業(yè)的參數(shù),就構(gòu)成了作業(yè)配置(job configuration)。Hadoop的job client提交作業(yè)(jar包/exe等)和配置信息給ResourceManager,后者負責分發(fā)這些軟件和配置信息給slave,調(diào)度任務(wù)且監(jiān)控它們的執(zhí)行,同時提供狀態(tài)和診斷信息給job-client。

(1)map階段

InputFormat根據(jù)輸入文件產(chǎn)生鍵值對,并傳送到mapper類的map函數(shù)中;

map輸出鍵值對到一個沒有排序的緩沖內(nèi)存中;

當緩沖內(nèi)存達到給定值或者map任務(wù)完成,在緩沖中的鍵值對就會被排序,然后輸出到磁盤中的溢出文件;

如果有多個溢出文件,那么就會整理這些文件到一個文件中,排好序;

這些排好序的、在溢出文件中的鍵值對就會等到Reducer的獲取;

MapReduce Architecture

(2)Reduce階段

Reducer獲取Mapper的記錄,然后產(chǎn)生另外的鍵值對,最后輸出到HDFS中;

shuffle:相同的key被傳輸?shù)酵粋€Reducer中;

當有一個Mapper完成以后,Reducer就開始獲取相關(guān)的數(shù)據(jù),所有的溢出文件會被排序到一個緩存區(qū)中;

當內(nèi)存緩沖區(qū)滿了以后,就會產(chǎn)生溢出文件到本地磁盤;

當Reducer所有相關(guān)的數(shù)據(jù)都傳輸完成以后,所有;溢出文件就會被整合排序;

Reducer中的reduce方法針對每個key調(diào)用一次;

Reducer的輸出到HDFS。

Hadoop YARN 原理

那時在MapReduce框架中,作業(yè)執(zhí)行受兩種類型的進程控制:一個稱為JobTracker的主要進程,它協(xié)調(diào)在集群上運行的所有作業(yè),分配要在TaskTracker上運行的map和reduce任務(wù);另一個就是許多稱為TaskTracker的下級進程,它們運行分配的任務(wù)并定期向JobTracker匯報。

YARN(也成為MRv2),YARN稱為下一代Hadoop計算平臺,主要包括ResourceManager、ApplicationMaster、NodeManager,其中ResourceManager用來代替集群管理器,ApplicationMaster代替一個專用且短暫的JobTracker,NodeManager代替TaskTracker。

YARN最主要的思想就是將JobTracker兩個主要的功能分離成單獨的組件,這兩個功能是資源管理和任務(wù)調(diào)度/監(jiān)控。新的資源管理器全局管理所有應(yīng)用計算資源的分配,每一個應(yīng)用的ApplicationMaster負責相應(yīng)的協(xié)調(diào)和調(diào)度。一個應(yīng)用程序要么是一個單獨的傳統(tǒng)的MapReduce任務(wù)或者一個DAG(有向無環(huán)圖)任務(wù)。ResouceManager和每一臺機器的節(jié)點管理服務(wù)(NodeManager)能夠管理用戶在那臺機器上的進程并對計算進行組織。事實上,每一個應(yīng)用的ApplicationMaster是一個特定的框架庫,它和ResourceManager來協(xié)調(diào)資源,和NodeManager協(xié)同工作以運行和監(jiān)控任務(wù)。

ResourceManager有兩個重要的組件:Scheduler和ApplicationsManager。Scheduler負責分配資源給每個正在運行的應(yīng)用,同時需要注意Scheduler是一個單一的分配資源組件,不負責監(jiān)控或跟蹤任務(wù)狀態(tài)。而且它不保證重啟失敗的任務(wù)。ApplicationsManager注意負責接收任務(wù)的提交,和執(zhí)行應(yīng)用的第一個容器ApplicationMaster協(xié)調(diào),負責任務(wù)失敗時重啟。

YARN Architecture

客戶端提交任務(wù)到ResourceManager的ApplicationsManager,然后Scheduler在獲得了集群各個節(jié)點的資源后,為每個應(yīng)用啟動一個App Mastr用于執(zhí)行任務(wù)。每個起到一個或多個Container用于實際執(zhí)行任務(wù)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容