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