大數(shù)據(jù)計算生態(tài)之數(shù)據(jù)存儲

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

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

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

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

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

存儲層

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

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

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

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

圖中的幾個要點:

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

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

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

- 一塊的副本被存儲在不同的機架中

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

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

3.列存儲

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

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

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

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

4.多模型存儲

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

(1)圖存儲

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

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

(2)鍵值對存儲

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

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

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

5.內(nèi)存存儲

內(nèi)存存儲也可以簡單理解為緩存,緩存其實已經(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ù)就可以通過分布式緩存來進行臨時存儲,其他的任務(wù)就可以避免數(shù)據(jù)的二次加工從而提高效率。

(1)Alluxio

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

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

6.總結(jié)

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

THEEND

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

更多
暫無評論