Hive的文件存儲格式
文件主要存儲格式有四種:textfile、sequencefile、orc、parquet
在Hive建表的時候可以指定文件存儲格式,具體可見:HIVE操作語句–DDL篇
CREATE TABLE table_name(
······
)
SORTED AS file_format
file_format代表文件格式;
常用的文件格式:textfile(文本)、sequencefile(二進制序列文件)、rcfile(列式存儲)
前提:行式存儲以及列式存儲
行式存儲
行存儲中的數(shù)據(jù)是按照數(shù)據(jù)行為基礎(chǔ)邏輯單元進行存儲,一行中的數(shù)據(jù)在存儲介質(zhì)中以連續(xù)的形式存在。行存儲時將表格看作一個一個的記錄,優(yōu)勢是更新塊,數(shù)據(jù)集中數(shù)據(jù)都是單條記錄,適合事務(wù)。
列式存儲
列存儲的數(shù)據(jù)時按照列為基礎(chǔ)邏輯存儲單元進行存儲,一列中的數(shù)據(jù)在存儲介質(zhì)中以連續(xù)存儲形式存在。列存儲將表中數(shù)據(jù)一列一列的存儲在一起,優(yōu)勢是便于查找,以及進行聚合運算。
texfile 和 sequencefile 是行式存儲
orc 和 parquet 是列式存儲
一、TextFile 格式
默認文件存儲格式,數(shù)據(jù)不做壓縮,磁盤開銷大,數(shù)據(jù)解析開銷大??山Y(jié)合 Gzip、Bzip2 使用,進行數(shù)據(jù)的壓縮,但是使用Gzip的時候,數(shù)據(jù)不能進行切分。
二、Orc 格式
每個Orc文件是由1個或者多個stripe組成,每個stripe一般為HDFS的塊大小,每個stripe包含多條記錄,記錄按照列進行獨立存儲。每個stripe由三部分組成,分別是 Index Data, Row Data, Stripe Footer。
Index Data:一個輕量級的索引,默認每隔1W行做一個索引,記錄某行的各字段在Row Data中的offset;
Row Data:存儲的是具體的數(shù)據(jù),先取數(shù)據(jù)中部分行,將行按列進行存儲。并對每個列進行了編碼,分成多個Stream存儲;
Stripe Footer:存儲的是各個Stream的類型,長度等信息。
在文件存儲的時候,每個文件都有一個File Footer,記錄著每個Stripe的行數(shù),以及每個行的數(shù)據(jù)類型;每個數(shù)據(jù)文件存儲的尾部有一個Post Script,記錄了數(shù)據(jù)文件的壓縮類型,以及File Footer的長度信息。
讀取文件時,先從文件尾部讀取Post Script,解析到File Footer的長度,再讀File Footer,解析到每個Stripe信息,獲取到每個Stream的信息,隨后通過Stream,以及Index進行讀取數(shù)據(jù)。
三、Parquet 格式
文件是以二進制方法存儲,不能直接讀取文件,文件中包括該文件的數(shù)據(jù)以及元數(shù)據(jù)。
Row Group:行組,每一個行組包含一定的行數(shù),并且在一個HDFS文件中最少存儲一個行組;
Column Chunk:列塊,在一個行組中每一列保存在一個列塊中,行組中的所有塊連續(xù)存儲在行組文件中。一個列塊中的值都是相同類型,不同的列塊可以使用不同的算法進行壓縮;
Page:頁,每一個列塊劃分為多個頁,一個頁是最小的編碼單位,在同一個列塊的不同頁,可能使用不同的編碼方式。
一個Parquet文件可以存儲多個行組,文件的首位都是該文件的 Magic Code,用于校驗該文件是否是一個Parquet文件,F(xiàn)ooter length 記錄了文件的元數(shù)據(jù)的大小,通過該值和文件的長度可以計算出元數(shù)據(jù)的偏移量,文件的元數(shù)據(jù)中包括每一個行組的元數(shù)據(jù)信息和該文件存儲數(shù)據(jù)的Schema信息。除了文件中的每一個行組的元數(shù)據(jù),每一頁的開始都會存儲該頁的元數(shù)據(jù)。
column chunk a meta data中保存著該列塊元數(shù)據(jù),包括字段類型,數(shù)據(jù)個數(shù),起始位置偏移量等。
在文件中,包括三種類型的頁:數(shù)據(jù)頁、字典頁和索引頁。文章來源:http://www.zghlxwxcb.cn/news/detail-514380.html
數(shù)據(jù)頁用于存儲當(dāng)前行組中該列的值;字典頁存儲該列值的編碼字典,每一個列塊中最多包含一個字典頁;索引頁用來存儲當(dāng)前行組下該列的索引,但在Parquet中不支持索引頁。文章來源地址http://www.zghlxwxcb.cn/news/detail-514380.html
到了這里,關(guān)于HIVE基礎(chǔ)-文件存儲格式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!