揭秘:RCFile高效存儲結(jié)構(gòu)
本文介紹了Facebook公司數(shù)據(jù)分析系統(tǒng)中的RCFile存儲結(jié)構(gòu),該結(jié)構(gòu)集行存儲和列存儲的優(yōu)點于一身,在MapReduce環(huán)境下的大規(guī)模數(shù)據(jù)分析中扮演重要角色。
本文引用地址:http://www.ex-cimer.com/article/150786.htmFacebook曾在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ìn)行自動化管理和處理,經(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和支持二進(jìn)制的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ā)用戶提交查詢的大量讀負(fù)載,查詢響應(yīng)時間是非常關(guān)鍵的,這要求底層存儲結(jié)構(gòu)能夠隨著查詢數(shù)量的增加而保持高速的查詢處理。
Highly efficient storage space utilization
高速增長的用戶活動總是需要可擴(kuò)展的存儲容量和計算能力,有限的磁盤空間需要合理管理海量數(shù)據(jù)的存儲。實際上,該問題的解決方案就是最大化磁盤空間利用率。
Strong adaptivity to highly dynamic workload patterns
同一份數(shù)據(jù)集會供給不同應(yīng)用的用戶,通過各種方式來分析。某些數(shù)據(jù)分析是例行過程,按照某種固定模式周期性執(zhí)行;而另一些則是從中間平臺發(fā)起的查詢。大多數(shù)負(fù)載不遵循任何規(guī)則模式,這需要底層系統(tǒng)在存儲空間有限的前提下,對數(shù)據(jù)處理中不可預(yù)知的動態(tài)數(shù)據(jù)具備高度的適應(yīng)性,而不是專注于某種特殊的負(fù)載模式。
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)負(fù)載的高適應(yīng)能力,這是因為行存儲保證了相同記錄的所有域都在同一個集群節(jié)點,即同一個HDFS塊。不過,行存儲的缺點也是顯而易見的,例如它不能支持快速查詢處理,因為當(dāng)查詢僅僅針對多列表中的少數(shù)幾列時,它不能跳過不必要的列讀取;此外,由于混合著不同數(shù)據(jù)值的列,行存儲不易獲得一個極高的壓縮比,即空間利用率不易大幅提高。盡管通過熵編碼和利用列相關(guān)性能夠獲得一個較好的壓縮比,但是復(fù)雜數(shù)據(jù)存儲實現(xiàn)會導(dǎo)致解壓開銷增大。
圖2 HDFS塊內(nèi)行存儲的例子
評論