大資料開發之Hadoop生態6 大核心元件

Hadoop 第一代分散式儲存計算框架

Hadoop是一個分散式系統基礎架構,由Apache基金會開發,它允許使用者在不瞭解分散式底層細節的情況下,開發分散式程式,充分利用叢集的威力高速運算和儲存。Hadoop包含豐富的生態元件,有我們耳熟能詳的分散式檔案系統HDFS,分散式計算框架MapReduce,以及分散式排程系統YARN。

HDFS是一個高容錯、高吞吐的分散式儲存系統,可以被廣泛部署在低價的硬體裝置之上。基本架構:

大資料開發之Hadoop生態6 大核心元件

有幾個概念值得記住:

資料塊(Block)

大檔案被切分成多個block儲存,預設大小為128M。為了保證資料可靠性,每個block分散式儲存在多個datanode節點上,預設3副本。

NameNode

NameNode是HDFS的主節點,主要作用是維護檔案系統的目錄結構,管理檔案與block之間關係,block與datanode之間關係。

DataNode

DataNode是HDFS的資料節點,主要作用是儲存與管理資料塊,並將資訊上報給NameNode。

MapReduce是Hadoop體系中的平行計算框架, 也是一種程式設計模型,分成Map和Reduce兩個階段,在Map階段對資料進行提取,得到有效的鍵值對,然後在Reduce階段進行計算,得到最終的結果。流程圖如:

大資料開發之Hadoop生態6 大核心元件

YARN是一個通用資源管理系統,可為上層應用提供統一的資源管理和排程,它的引入在叢集利用率、資源統一管理和資料共享等方面具有重大意義。這裡不做詳細介紹。

Hive 基於Hadoop的資料倉庫

Hive是構建在Hadoop之上的資料倉庫工具,由facebook開源,最初用於解決海量結構化的日誌資料統計問題。Hive 定義了一種類 SQL 查詢語言 HQL,提供SQL查詢功能,可以將SQL語句轉換為MapReduce任務執行。

Hive是一個SQL on Hadoop元件,主要特點是高吞吐、高延時,學習成本低(SQL),通常用於海量結構化資料離線分析;Hive支援TextFile、RCFile、ORC、Parquet等多種檔案格式,Gzip、LZO、Snappy等多種壓縮格式;支援使用者自定義函式。資料模型如下:

大資料開發之Hadoop生態6 大核心元件

Hive是大家比較熟知的開源元件,多數情況下我們只要解決如何更好、穩定、高效的使用問題即可。涉及Hive MetaStore相關的屬於高階使用。

HBase 主流的分散式NoSQL資料庫

HBase(Hadoop database)是一個分散式、可擴充套件、面向列的NoSQL資料庫,本質上是一個Key-Value系統,底層資料儲存在檔案系統HDFS上,原生支援 MapReduce計算框架,具有高吞吐、低延時的讀寫特點。

HBase周邊生態成熟,具有很多豐富的特性,比如強一致性讀寫、自動分割槽、自動故障轉移、面向列等。HBase主要用於海量資料永久性儲存與超大規模併發訪問場景,目前應用非常廣泛。生態架構如:

大資料開發之Hadoop生態6 大核心元件

HBase相關的概念主要有:

HMaster

HBase主節點,負責節點的管理。

RegionServer

HBase從節點,資料節點;負責資料的讀寫。

Region

HBase表的分割槽,水平方向分散式儲存的單元。

Namespace

Table

Rowkey

ColumnFamily

ColumnQualifier

Spark 一站式的分散式計算引擎

Spark是一個快速通用的、一站式的分散式計算引擎,它是開源的類Hadoop MapReduce的通用並行框架,擁有Hadoop MapReduce所具有的優點,但又不同於MapReduce,其中間輸出結果可以儲存在記憶體中,從而不再需要頻繁讀寫HDFS,因此Spark能更好地適用於資料探勘與機器學習等需要迭代的MapReduce演算法。

Spark提供了大量的庫,主要包括Spark Core、Spark SQL 、Spark Streaming 、MLlib、GraphX等。開發者可以在同一個應用程式中無縫組合使用這些庫。框架圖如:

大資料開發之Hadoop生態6 大核心元件

總結Spark的技術優勢,主要有以下幾點:

強大的RDD模型

先進的DAG架構

高效的Cache機制

豐富的運算元操作型別

多語言支援

統一完整的解決方案

Kafka 分散式訊息引擎及流處理平臺

Kafka是一個分散式訊息引擎與流處理平臺,經常用做企業的訊息匯流排、實時資料管道,甚至還可把它看作儲存系統。早期Kafka 的定位是一個高吞吐的分散式訊息系統,目前則演變成了一個成熟的分散式訊息引擎,以及流處理平臺。

高吞吐、低延時是Kafka 顯著的特點,Kafka能夠達到百萬級的訊息吞吐量,延遲可達毫秒級。Kafka是典型的生產者-消費者模型,如下:

大資料開發之Hadoop生態6 大核心元件

Kafka生產端傳送訊息到叢集Broker節點上,具體是發到某一個topic的partition中,訊息在同一partition中保證順序;消費端拉取訊息進行消費處理,通常是sink到其他引擎如另一個kafka、儲存系統、NoSQL資料庫等。涉及主要概念有:

Producer

生產者,即訊息產生和傳送的一方。

Consumer

消費者,即拉取訊息進行處理的一方。

Broker

Kafka例項或角色,一個Kafka叢集由多個broker構成,通常一臺機器部署一個Kafka例項,一個例項掛了不影響其他例項。

Topic

即主題,服務端訊息的邏輯儲存單元。一個topic通常包含若干個Partition即分割槽。

Partition

Topic的分割槽,分散式儲存在各個broker中, 實現釋出與訂閱的負載均衡。

Message

訊息,或稱日誌訊息,是Kafka服務端實際儲存的資料。

Elasticsearch 主流的分散式搜尋引擎

Elasticsearch,簡稱ES,是當下主流的分散式全文搜尋,它允許使用者快速進行儲存、搜尋和分析海量資料,底層是開源庫Lucene,開箱即用。

ES通常為具有複雜的搜尋要求或多維度查詢的應用程式提供底層資料儲存、搜尋能力,不僅僅是全文搜尋。基本架構圖:

大資料開發之Hadoop生態6 大核心元件

總結主要有以下關鍵詞或特點:

全文或結構化搜尋

ES是一個搜尋引擎,可用於全文搜尋或結構化搜尋。

分散式

如上圖示,ES資料在水平方向是以分片(shard)以及副本分片(replica)的形式分散式儲存在不同節點。

Restful API

對外主要以Rest API或介面的形式提供服務。

近實時搜尋與更新

主要能夠提供近實時的寫入與搜尋能力,不太適用於那些對實時性要求比較高的應用。

面向文件

ES還是一個文件型引擎,資料在ES中被稱為document,使用者可指定document id,否則ES會自動生成一個document id。

Schema free

ES是一個Schema free的元件,我們可以提前定義schema結構,也可以不定義,ES會自動幫我們建立schema結構,動態新增欄位。