- 测试方法
- 以下是测试textFile存储的Demo,其它存储的测试方法参照既可以
create table page_views_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;
insert overwrite table page_views_text select * from page_views;
- 比较
存储格式 | 原文件大小 | 当前存储格式下文件大小 | 存储耗时 |
---|
textFile(默认) | 18.1M | 18.1M | 19015089 |
parquet | 18.1M | 13.1M | 13721063 |
RCFile | 18.1M | 17.9 M | 18799676 |
ORC(默认内置压缩ZLIB) | 18.1M | 2.8 M | 2914107 |
ORC(去掉内置默认压缩) | 18.1M | 7.7 M | 8101648 |
AVRO | 18.1M | 18.9 M | 19777791 |
SequenceFile | 18.1M | 18.9M | 19777807 |
存储格式 | 特点 | 存储比较 | 压缩比较 | 查询比较 |
---|
textFile | 行式存储 | hive表中默认的存储格式,存储的字段类型默认全是string | 支持压缩 | 查询速度慢 |
SEQUENCEFILE | 行式存储 | 比textFile多了头部、标识、信息长度等信息 | 存储比textFile大;支持压缩,但是压缩的是value | |
RCFile | 行列混合 | 先在水平上划分多个group,然后然后每个group内部再以列存储 | 支持压缩,压缩10%左右 | 查询快 |
ORC | 行列混合 | 在RCFile基础上优化;在水平上划分为多个strips,每个strip由:Index Data(包含每一列的最大值和最小值以及每一列中的行位置),Row Data(用于表扫描),strip footer(包含流位置的目录) | 存储是textFiled的40%,使用压缩10% | 查询快 |
- 行式存储和列式存储
存储方法 | 存储特点 | 压缩比较 | 查询比较 |
---|
行式存储 | 一个快存储一列或者多列数据 , | 按照行压缩,由于一行中有多个字段,而且字段类型有可能不一样,所有压缩性能差 | 查询一张表中的某几个字段,由于是行式存储而进行全表扫描,查询慢, |
列式存储 | 在HDFS上一个block存储一列或多列 | 必然按列压缩,每一列对应的相同的数据格式,所以压缩性能好 | 查询一张表中的某几个字段,由于是列式存储不需要全表扫描,查询快如果是select * from table 这种反之慢,因为列式存储查询出结果还要组装数据 |