Hive檔案儲存格式

2021-10-06 09:38:24 字數 3410 閱讀 5662

hive支援的儲存數的格式主要有:textfile 、sequencefile、orc、parquet。

列式儲存和行式儲存

如圖6-10所示左邊為邏輯表,右邊第乙個為行式儲存,第二個為列式儲存。

1.行儲存的特點

查詢滿足條件的一整行資料的時候,列儲存則需要去每個聚集的字段找到對應的每個列的值,行儲存只需要找到其中乙個值,其餘的值都在相鄰地方,所以此時行儲存查詢的速度更快。

2.列儲存的特點

因為每個欄位的資料聚集儲存,在查詢只需要少數幾個欄位的時候,能大大減少讀取的資料量;每個欄位的資料型別一定是相同的,列式儲存可以針對性的設計更好的設計壓縮演算法。

textfile和sequencefile的儲存格式都是基於行儲存的;

orc和parquet是基於列式儲存的。

textfile格式

預設格式,資料不做壓縮,磁碟開銷大,資料解析開銷大。可結合gzip、bzip2使用,但使用gzip這種方式,hive不會對資料進行切分,從而無法對資料進行並行操作。

orc格式

orc (optimized row columnar)是hive 0.11版裡引入的新的儲存格式。

如圖6-11所示可以看到每個orc檔案由1個或多個stripe組成,每個stripe250mb大小,這個stripe實際相當於rowgroup概念,不過大小由4mb->250mb,這樣應該能提公升順序讀的吞吐率。每個stripe裡有三部分組成,分別是index data,row data,stripe footer:

1)index data:乙個輕量級的index,預設是每隔1w行做乙個索引。這裡做的索引應該只是記錄某行的各字段在row data中的offset。

2)row data:存的是具體的資料,先取部分行,然後對這些行按列進行儲存。對每個列進行了編碼,分成多個stream來儲存。

3)stripe footer:存的是各個stream的型別,長度等資訊。

每個檔案有乙個file footer,這裡面存的是每個stripe的行數,每個column的資料型別資訊等;每個檔案的尾部是乙個postscript,這裡面記錄了整個檔案的壓縮型別以及filefooter的長度資訊等。在讀取檔案時,會seek到檔案尾部讀postscript,從裡面解析到file footer長度,再讀filefooter,從裡面解析到各個stripe資訊,再讀各個stripe,即從後往前讀。

parquet格式

儲存檔案的壓縮比測試:

測試資料(在我的檔案中,點開我的資訊檢視)

textfile

(1)建立表,儲存資料格式為textfile

create table log_text (

track_time string,

url string,

session_id string,

referer string,

ip string,

end_user_id string,

city_id string

)row format delimited fields terminated by '\t'

stored as textfile ;

(2)向表中載入資料

load data local inpath '/export/servers/datas/log.data' into table log_text ;
(3)檢視表中資料大小

dfs -du -h /user/hive/warehouse/log_parquet/

;

18.1morc(1)建立表,儲存資料格式為orc

create table log_orc

(track_time string,

url string,

session_id string,

referer string,

ip string,

end_user_id string,

city_id string

)row format delimited fields terminated by '\t'

stored as orc ;

(2)向表中載入資料

insert into table log_orc select * from log_text ;
(3)檢視表中資料大小

dfs -du -h /user/hive/warehouse/log_orc/

;

2.8 mparquet

(1)建立表,儲存資料格式為parquet

create table log_parquet

(track_time string,

url string,

session_id string,

referer string,

ip string,

end_user_id string,

city_id string

)row format delimited fields terminated by '\t'

stored as parquet ;

(2)向表中載入資料

insert into table log_parquet select * from log_text ;
(3)檢視表中資料大小

dfs -du -h /user/hive/warehouse/log_parquet/

;

13.1m儲存檔案的壓縮比總結:

orc > parquet > textfile

儲存檔案的查詢速度測試:

儲存檔案的查詢速度總結:查詢速度相近。

HIVE檔案儲存格式

hive檔案儲存格式包括以下幾類 textfile sequencefile rcfile orcfile 其中textfile為預設格式,建表時不指定預設為這個格式,匯入資料時會直接把資料檔案拷貝到hdfs上不進行處理。sequencefile,rcfile,orcfile格式的表不能直接從本地檔...

Hive檔案儲存格式

上圖左邊為邏輯表,右邊第乙個為行式儲存,第二個為列式儲存。行儲存的特點 查詢滿足條件的一整行資料的時候,列儲存則需要去每個聚集的字段找到對應的每個列的值,行儲存只需要找到 其中乙個值,其餘的值都在相鄰地方 所以此時行儲存查詢的速度更快。列儲存的特點 因為每個欄位的資料聚集儲存,在查詢只需要少數幾個欄...

Hive檔案儲存格式

上圖左邊為邏輯表,右邊第乙個為行式儲存,第二個為列式儲存。行儲存的特點 查詢滿足條件的一整行資料的時候,列儲存則需要去每個聚集的字段找到對應的每個列的值,行儲存只需要找到 其中乙個值,其餘的值都在相鄰地方 所以此時行儲存查詢的速度更快。列儲存的特點 因為每個欄位的資料聚集儲存,在查詢只需要少數幾個欄...