大數(shù)據(jù)系統(tǒng)的構(gòu)建與高效運(yùn)行,離不開一系列成熟、穩(wěn)定且相互協(xié)作的基礎(chǔ)軟件服務(wù)。它們是整個(gè)數(shù)據(jù)架構(gòu)的基石,負(fù)責(zé)資源的調(diào)度、數(shù)據(jù)的存儲(chǔ)、計(jì)算任務(wù)的執(zhí)行以及系統(tǒng)的協(xié)調(diào)與管理。本篇筆記將概述大數(shù)據(jù)生態(tài)中最為核心的幾類基礎(chǔ)軟件服務(wù)。
1. 分布式文件系統(tǒng):海量數(shù)據(jù)的存儲(chǔ)基石
大數(shù)據(jù)處理的第一個(gè)挑戰(zhàn)是如何可靠、高效地存儲(chǔ)PB乃至EB級(jí)別的海量數(shù)據(jù)。傳統(tǒng)的單機(jī)文件系統(tǒng)無法滿足這一需求,因此,分布式文件系統(tǒng)應(yīng)運(yùn)而生。
- 核心代表:Hadoop Distributed File System (HDFS)
- 設(shè)計(jì)思想:將大文件分割成多個(gè)數(shù)據(jù)塊(Block,默認(rèn)128MB),并將這些塊分散存儲(chǔ)在一個(gè)集群的多個(gè)普通商用服務(wù)器上。通過多副本機(jī)制(默認(rèn)3副本)來保證數(shù)據(jù)的可靠性與高可用性。
- NameNode:主節(jié)點(diǎn),負(fù)責(zé)管理文件系統(tǒng)的命名空間(如目錄樹、文件元數(shù)據(jù))以及數(shù)據(jù)塊到DataNode的映射。它是系統(tǒng)的“大腦”。
- DataNode:從節(jié)點(diǎn),負(fù)責(zé)存儲(chǔ)實(shí)際的數(shù)據(jù)塊,并定期向NameNode報(bào)告其狀態(tài)。
- 特點(diǎn):提供高吞吐量的數(shù)據(jù)訪問,適合一次寫入、多次讀取的場(chǎng)景,為后續(xù)的批處理計(jì)算奠定了存儲(chǔ)基礎(chǔ)。
2. 資源管理與調(diào)度系統(tǒng):集群的“操作系統(tǒng)”
當(dāng)多個(gè)計(jì)算框架(如MapReduce、Spark)需要共享同一個(gè)龐大的硬件集群時(shí),需要一個(gè)“操作系統(tǒng)”來統(tǒng)一管理和分配集群的計(jì)算資源(CPU、內(nèi)存等),這就是資源管理與調(diào)度系統(tǒng)。
- 核心代表:Apache YARN (Yet Another Resource Negotiator)
- 角色:YARN將Hadoop 1.0中JobTracker的資源管理和作業(yè)調(diào)度/監(jiān)控功能分離開來,成為一個(gè)通用的集群資源管理層。
- ResourceManager (RM):全局主節(jié)點(diǎn),負(fù)責(zé)整個(gè)集群的資源管理和分配。
- NodeManager (NM):每個(gè)節(jié)點(diǎn)上的代理,負(fù)責(zé)管理單個(gè)節(jié)點(diǎn)上的資源(啟動(dòng)容器)并報(bào)告給RM。
- ApplicationMaster (AM):每個(gè)應(yīng)用程序特有的“管家”,由RM啟動(dòng),負(fù)責(zé)向RM申請(qǐng)資源,并與NM協(xié)作來執(zhí)行和監(jiān)控具體的計(jì)算任務(wù)。
- 意義:YARN使得Hadoop從單一的計(jì)算模式(MapReduce)演變?yōu)橐粋€(gè)多租戶、多應(yīng)用的數(shù)據(jù)操作系統(tǒng),可以同時(shí)運(yùn)行批處理、交互式查詢、流處理等多種計(jì)算框架。
3. 分布式計(jì)算框架:數(shù)據(jù)價(jià)值的挖掘引擎
存儲(chǔ)和資源管理之上,是直接對(duì)數(shù)據(jù)進(jìn)行處理分析的計(jì)算框架。根據(jù)數(shù)據(jù)處理時(shí)效性的不同,主要分為批處理和流處理兩大類。
- 批處理框架:處理靜態(tài)的、已經(jīng)存在的大量數(shù)據(jù),追求高吞吐量。
- Apache Hadoop MapReduce:經(jīng)典模型,將計(jì)算過程分為Map(映射)和Reduce(歸約)兩個(gè)階段,編程模型簡(jiǎn)單,但中間結(jié)果需落盤,I/O開銷較大。
- Apache Spark:新一代內(nèi)存計(jì)算框架。通過引入彈性分布式數(shù)據(jù)集(RDD)及其上的豐富算子(Transformations和Actions),將中間結(jié)果盡可能保存在內(nèi)存中,極大地提升了迭代計(jì)算和交互式查詢的性能。它兼容YARN,并提供了Spark SQL、Spark Streaming等高級(jí)模塊。
- 流處理框架:處理連續(xù)不斷產(chǎn)生的實(shí)時(shí)數(shù)據(jù)流,追求低延遲。
- Apache Storm:早期的流處理框架,強(qiáng)調(diào)消息處理的“至少一次”語義和低延遲。
- Apache Flink:真正意義上的流處理優(yōu)先框架,將批處理視為有界流。它提供了精確一次(Exactly-once)的狀態(tài)一致性保證,并在流處理性能上表現(xiàn)優(yōu)異。
- Apache Spark Streaming:基于Spark的微批處理(Micro-batch)模型,將流數(shù)據(jù)切成小批次進(jìn)行處理,易于與批處理代碼集成。
4. 協(xié)調(diào)與治理服務(wù):系統(tǒng)的“神經(jīng)中樞”
在分布式環(huán)境中,各個(gè)服務(wù)節(jié)點(diǎn)需要協(xié)同工作,進(jìn)行配置管理、命名服務(wù)、集群同步和領(lǐng)導(dǎo)選舉等,這需要分布式協(xié)調(diào)服務(wù)。
- 核心代表:Apache ZooKeeper
- 角色:一個(gè)分布式的、開放源碼的協(xié)調(diào)服務(wù),用于維護(hù)配置信息、命名、提供分布式同步和提供組服務(wù)。
- 數(shù)據(jù)模型:采用類似文件系統(tǒng)的樹形層次結(jié)構(gòu)(ZNode),可以存儲(chǔ)少量數(shù)據(jù)。
- 核心特性:通過Zab協(xié)議保證順序一致性和原子性廣播,為客戶端提供可靠的分布式鎖、領(lǐng)導(dǎo)者選舉、配置管理等功能。HDFS的NameNode高可用、YARN的ResourceManager高可用、Kafka的Broker協(xié)調(diào)等都依賴于ZooKeeper。
###
大數(shù)據(jù)基礎(chǔ)軟件服務(wù)構(gòu)成了一個(gè)層次化的生態(tài)體系:
- HDFS 提供海量、可靠的底層存儲(chǔ)。
- YARN 對(duì)集群的物理資源進(jìn)行統(tǒng)一管理和調(diào)度。
- MapReduce、Spark、Flink 等計(jì)算框架利用YARN分配的資源,對(duì)HDFS或其它數(shù)據(jù)源中的數(shù)據(jù)進(jìn)行處理。
- ZooKeeper 作為“粘合劑”,為上述所有分布式組件提供關(guān)鍵的協(xié)調(diào)與一致性服務(wù)。
理解這些基礎(chǔ)服務(wù)的定位、原理與相互關(guān)系,是深入學(xué)習(xí)大數(shù)據(jù)技術(shù)、構(gòu)建和優(yōu)化大數(shù)據(jù)平臺(tái)的必經(jīng)之路。后續(xù)筆記將深入探討這些組件的原理、架構(gòu)與編程實(shí)踐。