大數據體系架構中的組件非常多,每個組件又屬於不同的生態圈系統。從最早的Hadoop生態圈體系開始,逐步有了Spark生態圈體系和Flink生態圈體系。因此在學習大數據之前有必要了解一下每一個生態圈體系中具體包含哪些組件,以及它們的作用又是什麼。
一、大數據的數據存儲組件
在大數據體系中使用了分佈式存儲的方式解決了海量數據的存儲問題。它分為離線數據存儲和實時數據存儲。
(一)大數據離線數據存儲組件
大數據離線數據存儲組件主要包括:HDFS、HBase和Hive。這三個組件都屬於Hadoop生態圈體系。下面分別進行介紹。
- HDFS
它的全稱是Hadoop Distributed File System,它是Hadoop分佈式文件系統,用於解決大數據的存儲問題。HDFS源自於Google的GFS論文,可用於運行在低成本的通用硬件上,是一個具有容錯的文件系統。 - HBase
基於HDFS之上的分佈式列式存儲NoSQL數據庫,起源於Google的BigTable思想。由於HBase的底層是HDFS,因此HBase中創建的表和表中數據最終都是存儲在HDFS上。HBase的核心是列式存儲,它適合執行查詢操作。 - Hive
Hive是基於HDFS之上的數據倉庫,支持標準的SQL語句。默認情況下,Hive的執行引擎是MapReduce。Hive可以把一條標準的SQL轉換成是MapReduce任務運行在Yarn之上。
提示:Hive的執行引擎也可以是Spark,即:Hive on Spark。
(二)大數據實時數據存儲組件
大數據實時數據存儲組件主要使用消息系統Kafka。
- Kafka
Kafka是由Apache軟件基金會開發的一個開源流處理平台,它是一種高吞吐量的分佈式發佈訂閲消息系統。Kafka的誕生是為了解決LinkedIn的數據管道問題。起初LinkedIn採用ActiveMQ進行數據交換。在2010年前後,Active MQ遠遠無法滿足LinkedIn對數據傳遞系統的要求,經常由於各種缺陷導致消息阻塞或服務無法正常訪問。為了解決這個問題,LinkedIn決定研發自己的消息傳遞系統。當時LinkedIn的首席架構師Jay Kreps組織團隊進行消息傳遞系統的研發,進而有了現在的Kafka消息系統。
二、大數據的數據計算組件
大數據生態圈提供了各種計算引擎。通過使用這些計算引擎來執行批處理的離線計算和流處理的實時計算;同時也提供了各種數據分析引擎,用於支持SQL語句
(一)大數據批處理的離線計算組件
大數據批處理的離線計算組件主要包括:MapReduce、Spark Core和Flink DataSet。下面分別進行介紹。
- MapReduce
MapReduce是一種分佈式計算模型,用以進行大數據量的計算,它是一種離線計算處理模型。MapReduce通過Map和Reduce兩個階段的劃分,非常適合在大量計算機組成的分佈式並行環境裏進行數據處理。通過MapReduce既可以處理HDFS中的數據,也可以處理HBase中的數據。提示:在Hadoop的安裝包中已經集成了HDFS與Yarn。因此Hadoop安裝成功後,可以直接執行MapReduce任務處理HDFS的數據。 - Spark Core
Spark Core是Spark的核心部分,也是Spark執行引擎。在Spark中執行的所有計算都是由Spark Core完成,它是一個種離線計算引擎。Spark Core提供了SparkContext訪問接口用於提交執行Spark任務。通過該訪問接口既可以開發Java程序,也可以開發Scala程序來分析和處理數據。SparkContext也是Spark中最重要的一個對象。提示:Spark中的所有計算都是Spark Core離線計算,因此Spark生態圈體系中不存在真正的實時計算。 - Flink DataSet
Flink DataSet API是Flink中用於處理有邊界數據流的功能模塊,其本質就是執行批處理的離線計算,這一點與Hadoop中的MapReduce和Spark中的Spark Core其實是一樣的。下表列出了Flink DataSet API中的一些常見的算子。
(二)大數據流處理的實時計算組件
大數據流處理的實時計算組件主要包括:Spark Streaming和Flink DataStream。下面分別進行介紹。
- Spark Streaming
Spark Streaming是核心Spark API的擴展,它可實現可擴展、高吞吐量、可容錯的實時數據流處理。但是Spark Streaming底層的執行引擎依然是Spark Core,這就決定了Spark Streaming並不是真正的流處理引擎,它是通過時間的採樣間隔把流式數據編程小批量數據進行處理,其本質任然是批處理的離線計算。Spark Streaming訪問接口是StreamingContext。 - Flink DataStream
Flink DataStream API可以從多種數據源創建DataStreamSource,如:消息隊列Kafka、文件流和Socket連接等等;然後,通過Transformation的轉換操作進行流式數據的處理;最後由Sink組件將處理的結果進行輸出。
(三)大數據數據分析組件
為了支持使用SQL處理大數據便有了各種大數據分析引擎,主要包括:Hive、Spark SQL、Flink SQL等下面分別進行介紹。
- Hive
Hive是基於HDFS之上的數據倉庫,支持標準的SQL語句。默認情況下,Hive的執行引擎是MapReduce。Hive可以把一條標準的SQL轉換成是MapReduce任務運行在Yarn之上。
提示:Hive的執行引擎也可以是Spark,即:Hive on Spark。 - Spark SQL
Spark SQL是Spark用來處理結構化數據的一個模塊,它的核心數據模型是DataFrame,其訪問接口是SQLContext。這裏可以把DataFrame理解成是一張表。當DataFrame創建成功後,Spark SQL可支持DSL語句和SQL語句來分析處理數據。由於Spark SQL底層的執行引擎是Spark Core,因此Spark SQL執行的本質也是執行的一個Spark Core任務。 - Flink Table & FlinkSQL
與Hadoop的Hive和Spark SQL類似,在Flink的生態圈體系中也提供了兩個關係型操作的API:Table API 和SQL。Flink Table API 是用於Scala 和Java 語言的查詢API,允許以非常直觀的方式組合關係運算符的查詢,如 select、filter 和 join;Flink SQL API支持的是實現了標準SQL的Apache Calcite。通過這套接口,能夠使用SQL語句處理DataSet數據流和DataStream數據流。