大數(shù)據(jù)計(jì)算生態(tài)之?dāng)?shù)據(jù)存儲(chǔ)

大數(shù)據(jù)計(jì)算發(fā)展至今,已經(jīng)形成了一個(gè)百花齊放的大數(shù)據(jù)生態(tài),通用計(jì)算、定制開發(fā),批量處理、實(shí)時(shí)計(jì)算,關(guān)系查詢、圖遍歷以及機(jī)器學(xué)習(xí)等等,我們都可以找到各種對應(yīng)的計(jì)算引擎來協(xié)助我們處理這些任務(wù)。本系列文章擬以大數(shù)據(jù)平臺從低到高的層次為主線,梳理整個(gè)大數(shù)據(jù)計(jì)算生態(tài)組件及其功能。

導(dǎo)讀:大數(shù)據(jù)計(jì)算發(fā)展至今,已經(jīng)形成了一個(gè)百花齊放的大數(shù)據(jù)生態(tài),通用計(jì)算、定制開發(fā),批量處理、實(shí)時(shí)計(jì)算,關(guān)系查詢、圖遍歷以及機(jī)器學(xué)習(xí)等等,我們都可以找到各種對應(yīng)的計(jì)算引擎來協(xié)助我們處理這些任務(wù)。本系列文章擬以大數(shù)據(jù)平臺從低到高的層次為主線,梳理整個(gè)大數(shù)據(jù)計(jì)算生態(tài)組件及其功能。

大數(shù)據(jù)計(jì)算生態(tài)的系列文章,擬包含的系列文章有:《大數(shù)據(jù)計(jì)算生態(tài)之?dāng)?shù)據(jù)存儲(chǔ)》《大數(shù)據(jù)計(jì)算生態(tài)之?dāng)?shù)據(jù)計(jì)算》《大數(shù)據(jù)計(jì)算生態(tài)之?dāng)?shù)據(jù)交互》《大數(shù)據(jù)計(jì)算生態(tài)之計(jì)算調(diào)度》以及《大數(shù)據(jù)計(jì)算生態(tài)之?dāng)?shù)據(jù)工具》,該系列文章將從底層存儲(chǔ)到頂層交互的各個(gè)組件進(jìn)行講解,幫助大家厘清大數(shù)據(jù)體系,豐富大數(shù)據(jù)知識。

大數(shù)據(jù)計(jì)算生態(tài)(如上圖)最上層為應(yīng)用層,也就是實(shí)際與開發(fā)人員交互的層,例如分析人員只需要在應(yīng)用層的Hive中寫SQL即可,具體的任務(wù)分配和運(yùn)行交給Hive來調(diào)用中間層的MapReduce引擎來進(jìn)行處理。Spark的GraphX、MLlib等組件可以用來進(jìn)行圖分析和機(jī)器學(xué)習(xí)等。中間層的Spark、Flink等作為核心計(jì)算引擎提供批計(jì)算和流計(jì)算支持。左邊ZK和Oozie是任務(wù)配置協(xié)調(diào),右邊的是日志采集、遷移或者獲取數(shù)據(jù)相關(guān)的組件,再向下是資源調(diào)度管理系統(tǒng),最底層是數(shù)據(jù)存儲(chǔ),一個(gè)大數(shù)據(jù)平臺就要提供能進(jìn)行多模型數(shù)據(jù)存儲(chǔ)的能力,比如除了最常見的關(guān)系數(shù)據(jù),還有時(shí)序、文檔、鍵值和圖等數(shù)據(jù)。

有些組件所處的層次其實(shí)還值得繼續(xù)討論,例如ElasticSearch其實(shí)也是一個(gè)存儲(chǔ)組件,Hbase在作為存儲(chǔ)組件的時(shí)候其實(shí)也作為查詢計(jì)算組件使用,F(xiàn)link也可以放到最上層,作為開發(fā)人員直接交互的組件。但整體來講,整個(gè)大數(shù)據(jù)生態(tài)大概就是如此,大數(shù)據(jù)生態(tài)組件之間本就是相互拼接來完成特定功能。本文來具體介紹最底層的數(shù)據(jù)存儲(chǔ)。

存儲(chǔ)層

存儲(chǔ)層負(fù)責(zé)進(jìn)行大數(shù)據(jù)平臺的數(shù)據(jù)存儲(chǔ)。過去的幾十年,數(shù)據(jù)大部分以結(jié)構(gòu)化的形式存儲(chǔ)在關(guān)系數(shù)據(jù)庫中,常見的如Oracle和MySQL兩種。隨著數(shù)據(jù)越來越多樣,出現(xiàn)了各種類型的數(shù)據(jù)庫,如圖數(shù)據(jù)庫、鍵值數(shù)據(jù)庫、時(shí)序數(shù)據(jù)庫、文檔數(shù)據(jù)庫等,以及除了傳統(tǒng)的行存數(shù)據(jù)庫外,也出現(xiàn)了列存數(shù)據(jù)庫或者文件格式。

1.HDFS(分布式文件系統(tǒng))

HDFS 是 Hadoop Distribute File System,Hadoop分布式文件系統(tǒng)的簡稱。這個(gè)文件系統(tǒng)是一個(gè)適用于大的數(shù)據(jù)集的支持高吞吐和高容錯(cuò)的運(yùn)行在通用(廉價(jià))機(jī)上的分布式文件系統(tǒng)。

HDFS 是一個(gè)主從架構(gòu)的服務(wù)。一個(gè) HDFS 集群包括一個(gè) NameNode 節(jié)點(diǎn)、一個(gè) SecondaryNameNode 節(jié)點(diǎn)(非必須)和多個(gè) DataNode 節(jié)點(diǎn)。

圖中的幾個(gè)要點(diǎn):

- NameNode管理著Metadata(元數(shù)據(jù))

- 客戶端Client對元數(shù)據(jù)的操作是指向NameNode,對用戶數(shù)據(jù)的讀寫是通過DataNode;

- NameNode向DataNode發(fā)送Block的操作命令

- 一塊的副本被存儲(chǔ)在不同的機(jī)架中

2.關(guān)系數(shù)據(jù)存儲(chǔ)(行存儲(chǔ))

傳統(tǒng)的數(shù)據(jù)庫例如MySQL,Oracle等關(guān)系數(shù)據(jù)庫,都采用的是行存儲(chǔ)引擎,在基于行式存儲(chǔ)的數(shù)據(jù)庫中, 數(shù)據(jù)是按照行數(shù)據(jù)為基礎(chǔ)邏輯存儲(chǔ)單元進(jìn)行存儲(chǔ)的, 一行中的數(shù)據(jù)在存儲(chǔ)介質(zhì)中以連續(xù)存儲(chǔ)形式存在。

3.列存儲(chǔ)

列式存儲(chǔ)(Column-based)是相對于行式存儲(chǔ)來說的,新興的 Hbase、HP Vertica、EMC Greenplum 等分布式數(shù)據(jù)庫均采用列式存儲(chǔ)。在基于列式存儲(chǔ)的數(shù)據(jù)庫中, 數(shù)據(jù)是按照列為基礎(chǔ)的邏輯存儲(chǔ)單元進(jìn)行存儲(chǔ)的,一列中的數(shù)據(jù)在存儲(chǔ)介質(zhì)中以連續(xù)存儲(chǔ)形式存在。

從上圖可以很清楚地看到,行式存儲(chǔ)下一張表的數(shù)據(jù)都是放在一起的,但列式存儲(chǔ)下都被分開保存了。所以它們就有了如下這些優(yōu)缺點(diǎn):

對于傳統(tǒng)的數(shù)據(jù)存儲(chǔ)來講,無論是行存還是列存,它們的存取策略都基本是一致的,整體分為兩大類操作(讀操作和寫操作),如上圖所示,讀寫策略可以大概總結(jié)為如下的步驟:

針對這樣的讀寫邏輯,就有了針對存儲(chǔ)層在不同存取階段的優(yōu)化方案。

4.多模型存儲(chǔ)

隨著數(shù)據(jù)多樣性的發(fā)展,多種類型的數(shù)據(jù)大量涌出,相對應(yīng)的NoSQL系統(tǒng)也出現(xiàn)了。例如Neo4j圖存儲(chǔ),用來存儲(chǔ)社交網(wǎng)絡(luò)、知識圖譜等圖數(shù)據(jù);再入近兩年Iot智能制造的興起,大量工業(yè)生產(chǎn)生活中的時(shí)序數(shù)據(jù),也對應(yīng)出現(xiàn)了InfluxDB這種存儲(chǔ)時(shí)序數(shù)據(jù)的系統(tǒng);還有生產(chǎn)中常用的鍵值數(shù)據(jù)庫Redis等。

(1)圖存儲(chǔ)

圖存儲(chǔ)分為原生圖存儲(chǔ)和非原生圖存儲(chǔ)(利用圖模型加已有的存儲(chǔ)引擎),不同的存儲(chǔ)方案在讀寫圖數(shù)據(jù)的時(shí)候也有不一樣的策略,如下所列:

原生圖存儲(chǔ)雖然是針對圖數(shù)據(jù)自身特點(diǎn)而定制化開發(fā)的圖存儲(chǔ)策略,但是對于分布式的支持較差。在大數(shù)據(jù)時(shí)代,很難有一個(gè)數(shù)據(jù)管理系統(tǒng)能夠做到存儲(chǔ)查詢雙高效,因此,在現(xiàn)實(shí)的應(yīng)用中,圖相關(guān)的計(jì)算存儲(chǔ)往往是分離的,采用一些比較成熟的存儲(chǔ)引擎。

(2)鍵值對存儲(chǔ)

另一種比較流行的存儲(chǔ)就是鍵值對存儲(chǔ),鍵值數(shù)據(jù)庫因其在不涉及過多數(shù)據(jù)關(guān)聯(lián)的數(shù)據(jù)上的高效讀寫能力得到了廣泛的應(yīng)用。我們以最基本的LevelDB存儲(chǔ)模型為例,來探索鍵值存儲(chǔ)一角。

以上就是LevelDB的讀寫策略,當(dāng)然這只是簡單的總結(jié),其中還涉及到很多有意思的細(xì)節(jié),大家可以繼續(xù)深入探索。

除了上面講的行存儲(chǔ)、列存儲(chǔ)、鍵值存儲(chǔ)以及圖存儲(chǔ),還有文檔存儲(chǔ),時(shí)序數(shù)據(jù)存儲(chǔ)等,在數(shù)據(jù)規(guī)模日益擴(kuò)大、數(shù)據(jù)類型日益豐富的時(shí)代,可能還會(huì)有新的存儲(chǔ)出現(xiàn),但是,只要我們掌握了現(xiàn)有存儲(chǔ)的基本套路,就能夠快速應(yīng)對和掌握新的存儲(chǔ)形式的出現(xiàn)。

5.內(nèi)存存儲(chǔ)

內(nèi)存存儲(chǔ)也可以簡單理解為緩存,緩存其實(shí)已經(jīng)不是什么新概念了,無論是在操作系統(tǒng)還是傳統(tǒng)的數(shù)據(jù)管理系統(tǒng),都有緩沖區(qū)或者緩存的概念,主要是為了平衡CPU和磁盤之間的速度的差異,提高效率。在大數(shù)據(jù)的應(yīng)用場景中,由于數(shù)據(jù)量比較大,數(shù)據(jù)的處理邏輯也比較復(fù)雜,因此一些中間過程結(jié)果可以復(fù)用的數(shù)據(jù)就可以通過分布式緩存來進(jìn)行臨時(shí)存儲(chǔ),其他的任務(wù)就可以避免數(shù)據(jù)的二次加工從而提高效率。

(1)Alluxio

Alluxio(之前名為Tachyon)是世界上第一個(gè)以內(nèi)存為中心的虛擬的分布式存儲(chǔ)系統(tǒng)。它統(tǒng)一了數(shù)據(jù)訪問的方式,為上層計(jì)算框架和底層存儲(chǔ)系統(tǒng)構(gòu)建了橋梁。應(yīng)用只需要連接Alluxio即可訪問存儲(chǔ)在底層任意存儲(chǔ)系統(tǒng)中的數(shù)據(jù)。此外,Alluxio的以內(nèi)存為中心的架構(gòu)使得數(shù)據(jù)的訪問速度能比現(xiàn)有方案快幾個(gè)數(shù)量級。

Alluxio的特點(diǎn)是數(shù)據(jù)存儲(chǔ)與計(jì)算分離,兩部分引擎可以進(jìn)行獨(dú)立的擴(kuò)展。上層的計(jì)算引擎(如Hadoop, Spark)可以通過Alluxio訪問不同數(shù)據(jù)源(Amazon S3, HDFS)中的數(shù)據(jù),通過Alluxio屏蔽底層不同的數(shù)據(jù)源,做到數(shù)據(jù)的無感獲取。

6.總結(jié)

隨著新硬件的出現(xiàn)和發(fā)展,基于磁盤、新硬件、緩存以及內(nèi)存的多級存儲(chǔ)體系得到了越來越多的研究,隨著多級存儲(chǔ)的發(fā)展,必將迎來新的技術(shù)進(jìn)步。

THEEND

最新評論(評論僅代表用戶觀點(diǎn))

更多
暫無評論