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