終于有人把Hadoop大數(shù)據(jù)系統(tǒng)架構(gòu)講明白了
傳統(tǒng)的系統(tǒng)已無法處理結(jié)構(gòu)多變的大數(shù)據(jù),而高性能硬件和專用服務器價格昂貴且不靈活,Hadoop因此應運而生。Hadoop使用互連的廉價商業(yè)硬件,通過數(shù)百甚至數(shù)千個低成本服務器協(xié)同工作,可有效存儲和處理大量數(shù)據(jù)。
1.Hadoop生態(tài)體系
Google通過三篇重量級論文為大數(shù)據(jù)時代提供了三項革命性技術(shù):GFS、MapReduce和BigTable,即所謂的Google大數(shù)據(jù)的“三駕馬車”。
- GFS(Google File System)是Google面向大規(guī)模數(shù)據(jù)密集型應用的、可伸縮的分布式文件系統(tǒng),可在廉價的硬件上運行,并具有可靠的容錯能力。
- MapReduce是一種并行編程模式,可以在超大分布式集群上并行運算,對超大規(guī)模數(shù)據(jù)集進行處理。
- BigTable是在GFS上構(gòu)建的處理結(jié)構(gòu)化數(shù)據(jù)的分布式數(shù)據(jù)庫,可以用于處理海量數(shù)據(jù)的更新和隨機查詢。
Hadoop和Hbase是基于這三項技術(shù)發(fā)展出的開源實現(xiàn)。在大數(shù)據(jù)分析和處理領域,Hadoop兼容體系已經(jīng)成為一個非常成熟的生態(tài)圈,涵蓋了很多大數(shù)據(jù)相關(guān)的基礎組件,包括Hadoop、Hbase、Hive、Spark、Flink、Storm、Presto、Impala等。
2.Hadoop集群硬件架構(gòu)
Hadoop集群遵循主從架構(gòu),由一個或多個主節(jié)點(控制節(jié)點)和大量從節(jié)點組成,可以通過增減節(jié)點實現(xiàn)線性水平擴展。集群中的每個節(jié)點都有自己的磁盤、內(nèi)存、處理器和帶寬。主節(jié)點負責存儲元數(shù)據(jù),管理整個集群中的資源,并將任務分配給從節(jié)點;從節(jié)點負責存儲數(shù)據(jù)并執(zhí)行計算任務。
Hadoop包含三大組件:HDFS、Yarn和MapReduce。HDFS負責將文件切分為固定大小的數(shù)據(jù)塊,以多副本分布式方式進行存儲。Yarn是資源管理器,通過不同的進程執(zhí)行資源管理和任務調(diào)度/監(jiān)控任務。MapReduce是計算層,它通過將數(shù)據(jù)處理邏輯抽象為Map任務和Reduce任務,將“計算”在貼近數(shù)據(jù)存儲位置并行執(zhí)行。
Hadoop集群硬件架構(gòu)如圖1所示,具體的組件部署結(jié)構(gòu)分析如下。
- 主節(jié)點上:部署HDFS的NameNode組件,管理命名空間,管理客戶端對文件的訪問,負責跟蹤數(shù)據(jù)塊到DataNode的映射;部署Yarn的ResourceManager組件,管理整個集群中的資源。
- 從節(jié)點上:部署HDFS的DataNode組件,服務于客戶端的讀/寫請求;部署Yarn的NodeManager組件,監(jiān)視本節(jié)點容器的資源使用情況,并將其報告給Resource-Manager;運行MapReduce的容器。
▲ 圖1 Hadoop集群硬件架構(gòu)
3.Hadoop體系分層功能架構(gòu)
Hadoop設計了一個在分布式集群上實現(xiàn)資源管理與功能水平分層的架構(gòu),該分層解耦架構(gòu)讓大家可以在Hadoop上不斷地疊加組件,并且每個組件可以獨立升級,同類組件可以相互競爭,不斷提升性能。作為Hadoop生態(tài)系統(tǒng)的核心,HDFS、YARN、MapReduce形成了一個靈活的基座,并以此為基礎擴展出了非常多的Hadoop兼容開源項目和軟件。
Hadoop體系架構(gòu)可分為四層,上層一般需要依賴下層的組件,層與層之間相互透明,僅基于下層組件的接口進行交互,四層從下到上分別為分布式存儲層、分布式計算資源管理層、分布式并行處理框架層、分析應用層,如圖2所示。
▲ 圖2 Hadoop體系的分層架構(gòu)
每層的功能具體說明如下。
(1)分布式存儲層
HDFS是一個分布式文件存儲系統(tǒng),它將統(tǒng)一管理整個集群的所有存儲空間,并將寫入的數(shù)據(jù)切分成相同大小的數(shù)據(jù)塊,每個數(shù)據(jù)塊保存多個副本(通常是三個),每個副本存儲在不同的從節(jié)點上,以避免因單節(jié)點故障造成數(shù)據(jù)丟失。HDFS主節(jié)點(NameNode)保存命名空間、文件名、每個數(shù)據(jù)塊及所有副本的元數(shù)據(jù)信息。
在大數(shù)據(jù)量情況下,文件存儲格式與壓縮方法對讀寫效率影響非常大。在HDFS上的數(shù)據(jù)格式主要包括文本、KV格式、行式存儲格式、列式存儲格式。具體的文件格式舉例如下。
- 文本:Text。
- KV格式:SequenceFile、MapFile。
- 行式存儲:AvroFile。
- 列式存儲:RCFile、ORCFile、Parquet、CarbonData,其中CarbonData是帶索引的列式存儲格式,由華為貢獻給開源社區(qū)。
(2)分布式計算資源管理層
YARN(Yet Another Resource Negotiator)是一個資源協(xié)商器,它將統(tǒng)一管理和調(diào)度整個集群的計算資源,并將接收到的計算任務拆分到各個節(jié)點執(zhí)行。如果一個節(jié)點運行緩慢或失敗,YARN會將節(jié)點上的任務取消,然后分發(fā)到數(shù)據(jù)的其他副本所在節(jié)點進行運算。YARN作為資源協(xié)商器,可以讓大量的應用程序和用戶有效地共享集群計算資源,即支持多租戶,這些數(shù)據(jù)處理可以是批處理、實時處理、迭代處理等。
最初,Hadoop由MapReduce組件同時負責資源管理和數(shù)據(jù)處理。Hadoop 2.0引入了YARN后將這兩個功能分開?;赮ARN,我們?yōu)镠adoop編寫的不同組件可以非常方便地集成到Hadoop生態(tài)系統(tǒng)中,例如Spark、Giraph、Hive等項目,以及MapReduce本身。
YARN框架內(nèi)有ResourceManager、NodeManager組件:ResourceManager在集群的主節(jié)點上運行,負責接收計算任務,并在所有競爭應用程序之間做資源分配;NodeManager在從節(jié)點上運行,負責容器,監(jiān)視資源(CPU、內(nèi)存、磁盤、網(wǎng)絡)使用情況。
(3)分布式并行處理框架層
數(shù)據(jù)處理框架分為批式處理框架和流式處理框架。
批式處理框架主要有Hadoop MapReduce和Spark等。Hadoop MapReduce組件封裝了MapReduce并行編程模型。Spark是對Hadoop MapReduce組件的改進,通過對中間結(jié)果使用內(nèi)存存儲,大幅提高了計算速度,目前是批處理應用的主流選擇。
傳統(tǒng)的并行計算模型的實現(xiàn)和使用都非常復雜,如MPI(Message Passing Interface,消息傳遞接口)一般都用在科學計算等專門領域。MapReduce作為一種全新的通用并行編程模型,是基于集群的并行計算方式的創(chuàng)新抽象,非常簡單易用,開發(fā)友好。MapReduce處理數(shù)據(jù)為Key-Value格式,其主要思想是從函數(shù)式編程借鑒而來的。MapReduce模型將計算分為兩個階段。
- Map(映射)階段:對每條數(shù)據(jù)記錄進行獨立處理,其處理邏輯相當于對每條輸入執(zhí)行一個映射變換(即函數(shù)的計算),因此可以在大量節(jié)點進行并行處理(通常在數(shù)據(jù)所在節(jié)點)。
- Reduce(規(guī)約)階段:匯總計算階段,即處理邏輯具有記錄之間的相關(guān)性,例如按Key對Value進行加和運算,此階段一般會產(chǎn)生節(jié)點間的數(shù)據(jù)傳輸(即Shuffle操作)。
流式處理框架主要有Storm、Spark Streaming、Flink等。Storm是較早成熟的低延遲流式數(shù)據(jù)處理框架,可以進行事件級(單條數(shù)據(jù))處理。Spark Streaming是基于Spark批處理實現(xiàn)的微批式的流式處理,延遲較高,可以和Spark一起應用,實現(xiàn)流批一體的數(shù)據(jù)處理。Flink是當前最出色的流式數(shù)據(jù)處理框架,可以進行事件級數(shù)據(jù)處理,具有低延遲、吞吐量大、支持SQL等優(yōu)點。
(4)分析應用層
基于HDFS、YARN和并行處理框架中的一個組件或組合,可以搭建非常多樣的大數(shù)據(jù)應用,主要包括交互分析(OLAP)、隨機查詢、專門領域的數(shù)據(jù)分析、搜索等。各類應用的介紹如下。
- 交互分析。此類應用可統(tǒng)稱為SQL on Hadoop,并且可以分成兩類。一類是基于MapReduce計算模型的Hive、Spark SQL,此類組件的計算效率雖然一般,但均由Hadoop和Spark默認支持,所以應用非常廣泛。另一類是獨立實現(xiàn)的兼容Hadoop的OLAP分析引擎,典型的有Impala、Drill、HAWQ、Presto,此類組件為分析實現(xiàn)了專門的計算引擎,計算效率非常高,可以僅依賴HDFS或者HDFS+YARN。
- 隨機查詢。HDFS+Parquet+Spark的方式非常適合批量掃描式的數(shù)據(jù)處理,但當需要查詢單條數(shù)據(jù)時,效率非常低。HBase針對這個場景專門設計了列族數(shù)據(jù)模型和存儲格式,提高了數(shù)據(jù)的隨機讀取效率,也支持數(shù)據(jù)的隨機更新。HBase僅依賴HDFS實現(xiàn)數(shù)據(jù)的分布式存儲。
- 專門領域的數(shù)據(jù)分析。此類一般是提供一個該領域的并行算法庫實現(xiàn),主要有機器學習和圖計算兩類。機器學習庫有Hadoop默認提供的Mahout和Spark提供的MLlib,圖計算庫有Giraph和Spark GraphX。
本文摘編于《數(shù)據(jù)應用工程:方法論與實踐》,經(jīng)出版方授權(quán)發(fā)布。(書號:9787111704096)轉(zhuǎn)載請保留文章出處。