揭秘:RCFile高效存儲結(jié)構(gòu)
本文介紹了Facebook公司數(shù)據(jù)分析系統(tǒng)中的RCFile存儲結(jié)構(gòu),該結(jié)構(gòu)集行存儲和列存儲的優(yōu)點于一身,在MapReduce環(huán)境下的大規(guī)模數(shù)據(jù)分析中扮演重要角色。
Facebook曾在2010 ICDE(IEEE International Conference on Data Engineering)會議上介紹了數(shù)據(jù)倉庫Hive。Hive存儲海量數(shù)據(jù)在Hadoop系統(tǒng)中,提供了一套類數(shù)據(jù)庫的數(shù)據(jù)存儲和處理機制。它采用類SQL語言對數(shù)據(jù)進行自動化管理和處理,經(jīng)過語句解析和轉(zhuǎn)換,最終生成基于Hadoop的MapReduce任務(wù),通過執(zhí)行這些任務(wù)完成數(shù)據(jù)處理。圖1顯示了Hive數(shù)據(jù)倉庫的系統(tǒng)結(jié)構(gòu)。
?
圖1 Hive數(shù)據(jù)倉庫的系統(tǒng)結(jié)構(gòu)
基于MapReduce的數(shù)據(jù)倉庫在超大規(guī)模數(shù)據(jù)分析中扮演了重要角色,對于典型的Web服務(wù)供應(yīng)商,這些分析有助于它們快速理解動態(tài)的用戶行為及變化的用戶需求。數(shù)據(jù)存儲結(jié)構(gòu)是影響數(shù)據(jù)倉庫性能的關(guān)鍵因素之一。Hadoop系統(tǒng)中常用的文件存儲格式有支持文本的TextFile和支持二進制的SequenceFile等,它們都屬于行存儲方式。Facebook工程師發(fā)表的RCFile: A Fast and Spaceefficient Data Placement Structure in MapReducebased Warehouse Systems一文,介紹了一種高效的數(shù)據(jù)存儲結(jié)構(gòu)——RCFile(Record Columnar File),并將其應(yīng)用于Facebook的數(shù)據(jù)倉庫Hive中。與傳統(tǒng)數(shù)據(jù)庫的數(shù)據(jù)存儲結(jié)構(gòu)相比,RCFile更有效地滿足了基于MapReduce的數(shù)據(jù)倉庫的四個關(guān)鍵需求,即Fast data loading、Fast query processing、Highly efficient storage space utilization和Strong adaptivity to highly dynamic workload patterns。
數(shù)據(jù)倉庫的需求
基于Facebook系統(tǒng)特征和用戶數(shù)據(jù)的分析,在MapReduce計算環(huán)境下,數(shù)據(jù)倉庫對于數(shù)據(jù)存儲結(jié)構(gòu)有四個關(guān)鍵需求。
Fast data loading
對于Facebook的產(chǎn)品數(shù)據(jù)倉庫而言,快速加載數(shù)據(jù)(寫數(shù)據(jù))是非常關(guān)鍵的。每天大約有超過20TB的數(shù)據(jù)上傳到Facebook的數(shù)據(jù)倉庫,由于數(shù)據(jù)加載期間網(wǎng)絡(luò)和磁盤流量會干擾正常的查詢執(zhí)行,因此縮短數(shù)據(jù)加載時間是非常必要的。
Fast query processing
為了滿足實時性的網(wǎng)站請求和支持高并發(fā)用戶提交查詢的大量讀負載,查詢響應(yīng)時間是非常關(guān)鍵的,這要求底層存儲結(jié)構(gòu)能夠隨著查詢數(shù)量的增加而保持高速的查詢處理。
Highly efficient storage space utilization
高速增長的用戶活動總是需要可擴展的存儲容量和計算能力,有限的磁盤空間需要合理管理海量數(shù)據(jù)的存儲。實際上,該問題的解決方案就是最大化磁盤空間利用率。
Strong adaptivity to highly dynamic workload patterns
同一份數(shù)據(jù)集會供給不同應(yīng)用的用戶,通過各種方式來分析。某些數(shù)據(jù)分析是例行過程,按照某種固定模式周期性執(zhí)行;而另一些則是從中間平臺發(fā)起的查詢。大多數(shù)負載不遵循任何規(guī)則模式,這需要底層系統(tǒng)在存儲空間有限的前提下,對數(shù)據(jù)處理中不可預(yù)知的動態(tài)數(shù)據(jù)具備高度的適應(yīng)性,而不是專注于某種特殊的負載模式。
MapReduce存儲策略
要想設(shè)計并實現(xiàn)一種基于MapReduce數(shù)據(jù)倉庫的高效數(shù)據(jù)存儲結(jié)構(gòu),關(guān)鍵挑戰(zhàn)是在MapReduce計算環(huán)境中滿足上述四個需求。在傳統(tǒng)數(shù)據(jù)庫系統(tǒng)中,三種數(shù)據(jù)存儲結(jié)構(gòu)被廣泛研究,分別是行存儲結(jié)構(gòu)、列存儲結(jié)構(gòu)和PAX混合存儲結(jié)構(gòu)。上面這三種結(jié)構(gòu)都有其自身特點,不過簡單移植這些數(shù)據(jù)庫導(dǎo)向的存儲結(jié)構(gòu)到基于MapReduce的數(shù)據(jù)倉庫系統(tǒng)并不能很好地滿足所有需求。
行存儲
如圖2所示,基于Hadoop系統(tǒng)行存儲結(jié)構(gòu)的優(yōu)點在于快速數(shù)據(jù)加載和動態(tài)負載的高適應(yīng)能力,這是因為行存儲保證了相同記錄的所有域都在同一個集群節(jié)點,即同一個HDFS塊。不過,行存儲的缺點也是顯而易見的,例如它不能支持快速查詢處理,因為當查詢僅僅針對多列表中的少數(shù)幾列時,它不能跳過不必要的列讀取;此外,由于混合著不同數(shù)據(jù)值的列,行存儲不易獲得一個極高的壓縮比,即空間利用率不易大幅提高。盡管通過熵編碼和利用列相關(guān)性能夠獲得一個較好的壓縮比,但是復(fù)雜數(shù)據(jù)存儲實現(xiàn)會導(dǎo)致解壓開銷增大。
?
圖2 HDFS塊內(nèi)行存儲的例子
非常好我支持^.^
(4) 100%
不好我反對
(0) 0%
相關(guān)閱讀:
- [控制/MCU] STM32上電啟動過程分析(START_TEST代碼實例) 2023-08-31
- [電子說] FPGA FIFO深度計算的基本步驟和示例 2023-08-07
- [嵌入式技術(shù)] 嵌入式C語言程序數(shù)據(jù)存儲結(jié)構(gòu)詳解 2023-06-28
- [電子說] STM32芯片的存儲結(jié)構(gòu) 2023-06-22
- [電子說] GD32開發(fā)實戰(zhàn)指南(基礎(chǔ)篇) 第20章 GD32的存儲結(jié)構(gòu) 2023-06-03
- [電子說] 淺談STM32芯片的存儲結(jié)構(gòu) 2023-04-19
- [電子說] 算法和數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)知識分享(下) 2023-04-06
- [電子說] 算法和數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)知識分享(中) 2023-04-06
( 發(fā)表人:Spring )