Hive的数据压缩、Hive的存储格式
数据压缩
作用: 1、Map阶段对数据进行压缩,则可以减少Map和Reduce之间数据的传输量,提高执行效率 2、Reduce阶段的输出结果压缩,可以极大的节省磁盘空间,同时hive可以直接识别压缩文件 -- 操作一:开启Map端压缩 -- 1)开启hive中间传输数据压缩功能 set hive.exec.compress.intermediate=true; --2)开启mapreduce中map输出压缩功能 set mapreduce.map.output.compress=true; --3)设置mapreduce中map输出数据的压缩方式为snappy set mapreduce.map.output.compress.codec= org.apache.hadoop.io.compress.SnappyCodec; -- 操作二:开启Reduce端压缩 -- 1)开启hive最终输出数据压缩功能 set hive.exec.compress.output=true; -- 2)开启mapreduce最终输出数据压缩 set mapreduce.output.fileoutputformat.compress=true; -- 3)设置mapreduce最终数据输出压缩方式为snappy set mapreduce.output.fileoutputformat.compress.codec = org.apache.hadoop.io.compress.SnappyCodec; -- 4)设置mapreduce最终数据输出压缩为块压缩 set mapreduce.output.fileoutputformat.compress.type=BLOCK; 备注:在实际应用中几乎所有的原始表数据都要开启压缩,这个是一个最常规的调优手段之一
存储格式 1、在之前的操作中,给Hive表文件使用的存储格式都是文本格式(TextFile) 2、除此之外,Hive还可以支持其他的存储格式,使用合适的存储格式可以减少磁盘的占用量 3、Hive支持的存储格式分类: 行式存储: 1)数据一行行存储,同一行的数据在磁盘上是连续存放的 2)代表:TextFile(默认),SequnceFile 3)优缺点: 优点: 1、TextFile开发者可以直接读懂 2、select * from 表 where id = 1; 使用该方式来查询效率高 缺点: 1、TextFile源文件有多大,就会占用多大空间,没有优化数据存储 2、select name from 表; 使用该方式来查询效率低 列式存储: 1)数据一列列存储,同一列的数据在磁盘上是连续存放的 2)代表:ORC,Parquet 优点: 1、ORC存储格式自带压缩,可以极大的节省磁盘空间 2、select name from 表; 列查询,使用该方式来查询效率高 缺点: 1、ORC存储,查询时需要解压 2、select * from 表 where id = 1; 列查询,使用该方式来查询效率低 结论是:在大数据分析中,都用列式存储
-- (1)创建表,存储数据格式为TEXTFILE
create table log_text(
id string,
user_id string,
city_id string
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE; //创建存储数据格式为:TextFile
-- TextFile格式不会对文件的存储容量进行任何的调整
-- (2)创建表,存储数据格式为ORC
create table log_orc(
id string,
user_id string,
city_id string
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS orc; //创建存储数据格式为:orc 不区分大小写
ORC格式存储的表不能通过load来加载数据,因为ORC格式的调整需要执行MR,需要借助中间表,查询出数据在导入到ORC表
insert into log_orc select * from log_text;
-- (3) 创建表,存储数据格式为PARQUET
create table log_parquet(
id string,
user_id string,
city_id string
) row format delimited fields terminated by '\t'
stored as parquet;
PARQUET和ORC类似,需要借助中间表,查询出数据在导入到log_parquet表中
存储文件的压缩比: ORC > Parquet > TextFile
存储文件的查询速度: ORC > TextFile > Parquet
存储 + 压缩
ORC支持三种压缩:ZLIB,SNAPPY,NONE。最后一种就是不压缩,orc默认采用的是ZLIB压缩 存储格式只是决定数据在硬盘上摆放方式(索引和数据的布局) 压缩是通过某个算法将数据量减少(11111111100000000000----> 1010) ORC + ZLIB (默认) 使用在ODS层 ORC + SNAPPY DW层(DWD DWB DWS) ORC + BZIP2 PARQUET + ZIB PARQUET + SNAPPY
-- orc + snappy create table log_orc_snappy ( id string, user_id string, city_id string ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS orc -- 存储格式 tblproperties ('orc.compress' = 'snappy'); -- 压缩方式 insert into log_orc_snappy select * from log_text;