Hive檔案格式

2021-09-07 22:14:04 字數 4668 閱讀 3763

hive檔案儲存格式包括以下幾類:

1、textfile

2、sequencefile

3、rcfile

4、orcfile(0.11以後出現)

其中textfile為預設格式,建表時不指定預設為這個格式,匯入資料時會直接把資料檔案拷貝到hdfs上不進行處理;

sequencefile,rcfile,orcfile格式的表不能直接從本地檔案匯入資料,資料要先匯入到textfile格式的表中, 然後再從表中用insert匯入sequencefile,rcfile,orcfile表中。

前提建立環境:

hive 0.8

建立一張testfile_table表,格式為textfile。

create table if not exists testfile_table( site string, url  string, pv   bigint, label string) row format delimited fields terminated by '\t' stored as textfile;

一、textfile

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

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

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

示例:

create

table

ifnot

exists

textfile_table(

site string,

url string,

pv

bigint

,label string)

row format delimited

fields terminated by'

\t'stored

astextfile;

插入資料操作:

set hive.exec.compress.output=

true;

set mapred.output.compress=

true;

set mapred.output.compression.codec=

org.apache.hadoop.io.compress.gzipcodec;

set io.compression.codecs=

org.apache.hadoop.io.compress.gzipcodec;

insert overwrite table textfile_table select

*from textfile_table;

二、sequencefile

sequencefile是hadoop api提供的一種二進位制檔案支援,其具有使用方便、可分割、可壓縮的特點。

sequencefile支援三種壓縮選擇:none,record,block。record壓縮率低,一般建議使用block壓縮。

示例:

create

table

ifnot

exists

seqfile_table(

site string,

url string,

pv

bigint

,label string)

row format delimited

fields terminated by'

\t'stored

assequencefile;

插入資料操作:

set hive.exec.compress.output=

true;

set mapred.output.compress=

true;

set mapred.output.compression.codec=

org.apache.hadoop.io.compress.gzipcodec;

set io.compression.codecs=

org.apache.hadoop.io.compress.gzipcodec;

set mapred.output.compression.type=

block;

insert overwrite table seqfile_table select

*from textfile_table;

三、rcfile

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

rcfile檔案示例:

create

table

ifnot

exists

rcfile_table(

site string,

url string,

pv

bigint

,label string)

row format delimited

fields terminated by'

\t'stored

asrcfile;

插入資料操作:

set hive.exec.compress.output=

true;

set mapred.output.compress=

true;

set mapred.output.compression.codec=

org.apache.hadoop.io.compress.gzipcodec;

set io.compression.codecs=

org.apache.hadoop.io.compress.gzipcodec;

insert overwrite table rcfile_table select

*from textfile_table;

四、orcfile()

五、再看textfile、sequencefile、rcfile三種檔案的儲存情況:

[

hadoop@node3 ~

]$ hadoop dfs -dus /

user

/hive/warehouse/*

hdfs://node1:19000/user/hive/warehouse/hbase_table_1 0

hdfs://node1:19000/user/hive/warehouse/hbase_table_2 0

hdfs://node1:19000/user/hive/warehouse/orcfile_table 0

hdfs://node1:19000/user/hive/warehouse/rcfile_table 102638073

hdfs://node1:19000/user/hive/warehouse/seqfile_table 112497695

hdfs://node1:19000/user/hive/warehouse/testfile_table 536799616

hdfs://node1:19000/user/hive/warehouse/textfile_table 107308067

[hadoop@node3 ~]$ hadoop dfs -ls /user/hive/warehouse/

*/-rw-r--

r-- 2 hadoop supergroup 51328177 2014-03-20 00:42 /user/hive/warehouse/rcfile_table/000000_0

-rw-r--

r-- 2 hadoop supergroup 51309896 2014-03-20 00:43 /user/hive/warehouse/rcfile_table/000001_0

-rw-r--

r-- 2 hadoop supergroup 56263711 2014-03-20 01:20 /user/hive/warehouse/seqfile_table/000000_0

-rw-r--

r-- 2 hadoop supergroup 56233984 2014-03-20 01:21 /user/hive/warehouse/seqfile_table/000001_0

-rw-r--

r-- 2 hadoop supergroup 536799616 2014-03-19 23:15 /user/hive/warehouse/testfile_table/weibo.txt

-rw-r--

r-- 2 hadoop supergroup 53659758 2014-03-19 23:24 /user/hive/warehouse/textfile_table/000000_0.gz

-rw-r--

r-- 2 hadoop supergroup 53648309 2014-03-19 23:26 /user/hive/warehouse/textfile_table/000001_1.gz

總結:相比textfile和sequencefile,rcfile由於列式儲存方式,資料載入時效能消耗較大,但是具有較好的壓縮比和查詢響應。資料倉儲的特點是一次寫入、多次讀取,因此,整體來看,rcfile相比其餘兩種格式具有較明顯的優勢。

Hive 檔案格式

hive檔案儲存格式包括以下幾類 1 textfile 2 sequencefile 3 rcfile 4 orcfile 0.11以後出現 5 parquet其中textfile為預設格式,建表時不指定預設為這個格式,匯入資料時會直接把資料檔案拷貝到hdfs上不進行處理 sequencefile,...

Hive檔案格式

hive檔案儲存格式包括以下幾類 1 textfile 2 sequencefile 3 rcfile 4 orcfile 0.11以後出現 其中textfile為預設格式,建表時不指定預設為這個格式,匯入資料時會直接把資料檔案拷貝到hdfs上不進行處理 sequencefile,rcfile,or...

hive檔案格式

sequencefile sequencefile是hadoop api 提供的一種二進位制檔案,它將資料以的形式序列化到檔案中。這種二進位制檔案內部使用hadoop 的標準的writable 介面實現序列化和反序列化。它與hadoop api中的mapfile 是互相相容的。hive 中的sequ...