hive優化 儲存格式

2021-08-18 17:19:47 字數 2363 閱讀 7915

hive中的檔案格式大致上分為面向行和面向列兩類:

面向行:同一行的資料儲存在一起,即連續儲存。textfile,sequencefile。採用這種方式,如果只需要訪問行的一小部分資料,亦需要將整行讀入記憶體,推遲序列化一定程度上可以緩解這個問題,但是從磁碟讀取整行資料的開銷卻無法避免。面向行的儲存適合於整行資料需要同時處理的情況。

面向列:整個檔案被切割為若干列資料,每一列資料一起儲存。 rcfile,orcfile。面向列的格式使得讀取資料時,可以跳過不需要的列,適合於只處於行的一小部分欄位的情況。但是這種格式的讀寫需要更多的記憶體空間,因為需要快取行在記憶體中(為了獲取多行中的某一列)。

預設格式,資料不做壓縮,磁碟開銷大,資料解析開銷大。

可結合gzip、bzip2使用(系統自動檢查,執行查詢時自動解壓),但使用這種方式,hive不會對資料進行切分,

從而無法對資料進行並行操作。

根據是否壓縮,以及採用記錄壓縮還是塊壓縮,儲存格式有所不同:

不壓縮:

按照記錄長度、key長度、value程度、key值、value值依次儲存。長度是指位元組數。採用指定的serialization進行序列化。

record壓縮:

只有value被壓縮,壓縮的codec儲存在header中。

block壓縮:

多條記錄被壓縮在一起,可以利用記錄之間的相似性,更節省空間。block前後都加入了同步標識,一般建議使用block壓縮。block的最小值由io.seqfile.compress.blocksize屬性設定。

rcfile是一種行列儲存相結合的儲存方式。首先,其將資料按行分塊,保證同乙個record在乙個塊上,避免讀乙個記錄需要讀取多個block。其次,塊資料列式儲存,有利於資料壓縮和快速的列訪問

orcfile(optimized record columnar file)提供了一種比rcfile更加高效的檔案格式。其內部將資料劃分為預設大小為250m的stripe。每個stripe包括索引、資料和footer。索引儲存每一列的最大最小值,以及列中每一行的位置。

壓縮格式

檔案大小

查詢時間(指定條件統計)

壓縮型別

分割引數

textfile

618.4 g

186.1s無是

無textfile_gz

128.0 g

76.8sgz否

set hive.exec.compress.output=true;set mapred.output.compression.codec=org.apache.hadoop.io.compress.gzipcodec;

sequencefile-block_gz

132.7 g

79.8s

block

是set hive.exec.compress.output=true;set mapred.output.compression.codec=org.apache.hadoop.io.compress.gzipcodec;set mapred.output.compression.type=block;

rcfile_gz

130.2 g

84.7sgz是

set hive.exec.compress.output=true;set mapred.output.compression.codec=org.apache.hadoop.io.compress.gzipcodec;

orcfile

271.2 g

66.5s無是

需要在建表語句中新增:stored as orc tblproperties (「orc.compress」=」none」);

orcfile_zlib

123.3 g

46.9s(無索引)/40.7s(有索引)

zlib

是預設為zlib不需要設定

hive儲存格式

textfile 預設格式,行儲存,匯入資料時直接把資料檔案拷貝到hdfs的hive表目錄 hive location 資料檔案可先經過gzip等壓縮,再導hive表 系統自動檢查,執行查詢時自動解壓 但使用這種方式,hive不會對資料進行切分,從而無法對資料進行並行操作.優點 資料載入快 load...

Hive儲存格式

hive的四種儲存格式 textfile sequencefile rcfile parquet 列式儲存和行式儲存的比較 優點缺點 行式儲存 一行資料是一條記錄,放在同乙個block塊中 只查詢幾個列時,也會讀取整行的資料,當資料量大時,影響效能 方便進行insert update操作 不同型別的...

hive 儲存格式

hive有textfile,sequencefile,rcfile三種檔案格式。textfile為預設格式,建表時不指定預設為這個格式,匯入資料時會直接把資料檔案拷貝到hdfs上不進行處理。sequencefile,rcfile格式的表不能直接從本地檔案匯入資料,資料要先匯入到textfile格式的...