列存儲 - 揭秘:RCFile高效存儲結構
圖3顯示了在HDFS上按照列組存儲表格的例子。在這個例子中,列A和列B存儲在同一列組,而列C和列D分別存儲在單獨的列組。查詢時列存儲能夠避免讀不必要的列,并且壓縮一個列中的相似數(shù)據(jù)能夠達到較高的壓縮比。然而,由于元組重構的較高開銷,它并不能提供基于Hadoop系統(tǒng)的快速查詢處理。列存儲不能保證同一記錄的所有域都存儲在同一集群節(jié)點,例如圖2的例子中,記錄的4個域存儲在位于不同節(jié)點的3個HDFS塊中。因此,記錄的重構將導致通過集群節(jié)點網(wǎng)絡的大量數(shù)據(jù)傳輸。盡管預先分組后,多個列在一起能夠減少開銷,但是對于高度動態(tài)的負載模式,它并不具備很好的適應性。除非所有列組根據(jù)可能的查詢預先創(chuàng)建,否則對于一個查詢需要一個不可預知的列組合,一個記錄的重構或許需要2個或多個列組。再者由于多個組之間的列交疊,列組可能會創(chuàng)建多余的列數(shù)據(jù)存儲,這導致存儲利用率的降低。
?
圖3 HDFS塊內(nèi)列存儲的例子
PAX混合存儲
PAX存儲模型(用于Data Morphing存儲技術)使用混合存儲方式,目的在于提升CPU Cache性能。對于記錄中來自不同列的多個域,PAX將它們放在一個磁盤頁中。在每個磁盤頁中,PAX使用一個迷你頁來存儲屬于每個列的所有域,并使用一個頁頭來存儲迷你頁的指針。類似于行存儲,PAX對多種動態(tài)查詢有很強的適應能力。然而,它并不能滿足大型分布式系統(tǒng)對于高存儲空間利用率和快速查詢處理的需求,原因在于:首先,PAX沒有數(shù)據(jù)壓縮的相關工作,這部分與Cache優(yōu)化關系不大,但對于大規(guī)模數(shù)據(jù)處理系統(tǒng)是非常關鍵的,它提供了列維度數(shù)據(jù)壓縮的可能性;其次,PAX不能提升I/O性能,因為它不能改變實際的頁內(nèi)容,該限制使得大規(guī)模數(shù)據(jù)掃描時不易實現(xiàn)快速查詢處理;再次,PAX用固定的頁作為數(shù)據(jù)組織的基本單位,按照這個大小,在海量數(shù)據(jù)處理系統(tǒng)中,PAX將不會有效存儲不同大小類型的數(shù)據(jù)域。本文介紹的是RCF i l e 數(shù)據(jù)存儲結構在Hadoop系統(tǒng)上的實現(xiàn)。該結構強調:第一,RCFile存儲的表是水平劃分的,分為多個行組, 每個行組再被垂直劃分, 以便每列單獨存儲;第二,RCFile在每個行組中利用一個列維度的數(shù)據(jù)壓縮,并提供一種Lazy解壓(decompression)技術來在查詢執(zhí)行時避免不必要的列解壓;第三,RCFile支持彈性的行組大小,行組大小需要權衡數(shù)據(jù)壓縮性能和查詢性能兩方面。
RCFile的設計與實現(xiàn)
RCFile(Record Columnar File)存儲結構遵循的是“先水平劃分,再垂直劃分”的設計理念,這個想法來源于PAX。它結合了行存儲和列存儲的優(yōu)點:首先,RCFile保證同一行的數(shù)據(jù)位于同一節(jié)點,因此元組重構的開銷很低;其次,像列存儲一樣,RCFile能夠利用列維度的數(shù)據(jù)壓縮,并且能跳過不必要的列讀取。圖4是一個HDFS塊內(nèi)RCFile方式存儲的例子。
?
圖4 HDFS塊內(nèi)RCFile方式存儲的例子
數(shù)據(jù)格式
RCFile在HDFS分布式文件系統(tǒng)之上設計并實現(xiàn),如圖4所示,RCFile按照下面的數(shù)據(jù)格式來存儲一張表。
RCFile基于HDFS架構,表格占用多個HDFS塊。
每個HDFS塊中,RCFile以行組為基本單位來組織記錄。也就是說,存儲在一個HDFS塊中的所有記錄被劃分為多個行組。對于一張表,所有行組大小都相同。一個HDFS塊會有一個或多個行組。
一個行組包括三個部分。第一部分是行組頭部的同步標識,主要用于分隔HDFS塊中的兩個連續(xù)行組;第二部分是行組的元數(shù)據(jù)頭部,用于存儲行組單元的信息,包括行組中的記錄數(shù)、每個列的字節(jié)數(shù)、列中每個域的字節(jié)數(shù);第三部分是表格數(shù)據(jù)段,即實際的列存儲數(shù)據(jù)。在該部分中,同一列的所有域順序存儲。從圖4可以看出,首先存儲了列A的所有域,然后存儲列B的所有域等。
- 第 1 頁:揭秘:RCFile高效存儲結構
- 第 2 頁:列存儲
- 第 3 頁:壓縮方式
本文導航
非常好我支持^.^
(4) 100%
不好我反對
(0) 0%
相關閱讀:
- [控制/MCU] STM32上電啟動過程分析(START_TEST代碼實例) 2023-08-31
- [電子說] FPGA FIFO深度計算的基本步驟和示例 2023-08-07
- [嵌入式技術] 嵌入式C語言程序數(shù)據(jù)存儲結構詳解 2023-06-28
- [電子說] STM32芯片的存儲結構 2023-06-22
- [電子說] GD32開發(fā)實戰(zhàn)指南(基礎篇) 第20章 GD32的存儲結構 2023-06-03
- [電子說] 淺談STM32芯片的存儲結構 2023-04-19
- [電子說] 算法和數(shù)據(jù)結構基礎知識分享(下) 2023-04-06
- [電子說] 算法和數(shù)據(jù)結構基礎知識分享(中) 2023-04-06
( 發(fā)表人:Spring )