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格式的...