hive文件存储格式

1. 文件存储格式

  1. TextFile
  2. SequeceFile
  3. RCFile
  4. ORCFile
  5. PARQuet

2. 说明

格式 导入数据方式
textfile 将数据文件直接拷贝到hdfs上,不进行处理
SequenceFile, RCFile, ORCFile, PARQuet 不能直接将数据文件直接拷贝到hdfs上,数据文件要先导入到TextFile格式的表中,然后再从表中用insert导入各个格式的表中;或者复制表结构及数据的方式

3. 不同格式的不同

格式 存储方式 效率
textfile 行存储 磁盘开销大,数据解析开销大,hive不会对数据进行切分
sequencefile 行存储 可分割压缩,一般选择block压缩
refile 数据按行分块,每块按照列存储 压缩快,快速列存取,读取全量数据的操作,性能可能比sequencefile没有明显的优势
orcfile 数据按行分块,每块按照列存储 压缩快,快速列存取,效率比refile高
parquet 数据列式存储 相对于orc格式,hadoop生态系统中大部分工程都支持parquet文件

4. 一起对比

  • 压缩比:
    ORC>Parquet>TextFile(没有进行压缩)
  • 查询速度:
    三者几乎一致

5. 建表/加载数据

-- 创建表,存储数据格式为TEXTFILE
create table log_text[log_orc|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 textfile[orc|parquet]; 
 
-- 向表中加载数据 
load data local inpath '/opt/module/datas/log.data' into table log_text;
 
--向表中加载数据
insert into table log_orc select * from log_text;

-- 向表中加载数据
insert into table log_parquet select * from log_text;

6. 压缩和存储结合

-- 建表
-- 创建一个非压缩的ORC存储方式
create table log_orc_none(
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 tblproperties ("orc.compress"="NONE");
-- 插入数据
hive (default)> insert into table log_orc_none select * from log_text;


-- 创建一个SNAPPY压缩的ORC存储方式
create table log_orc_snappy(
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 tblproperties ("orc.compress"="SNAPPY");
-- 插入数据
hive (default)> insert into table log_orc_snappy select * from log_text;


-- 创建一个默认压缩的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;
-- 向表中加载数据
insert into table log_orc select * from log_text;


-- 对比三者的压缩比:
hive (db_hive)> dfs -du -h /user/hive/warehouse/db_hive.db/log_orc_none;
18.1 M  /user/hive/warehouse/db_hive.db/log_orc_none/log.data
hive (db_hive)> dfs -du -h /user/hive/warehouse/db_hive.db/log_orc_snappy;
3.8 M  /user/hive/warehouse/db_hive.db/log_orc_snappy/000000_0
hive (db_hive)> dfs -du -h /user/hive/warehouse/db_hive.db/log_orc;
2.8 M  /user/hive/warehouse/db_hive.db/log_orc/000000_0
没有压缩的orc格式相当于textfile,
默认的压缩格式压缩比例最大,orc存储文件默认采用ZLIB压缩,ZLIB采用的时deflate压缩算法。
文件没有压缩的话,HDFS上显示的是原来的文件名,如果压缩的话,使用类似000000_0的文件名。
posted @ 2022-12-07 15:53  jsqup  阅读(46)  评论(0编辑  收藏  举报