目录
2.行存储格式:squencefile ,压缩后大小8.89MB
3. 列存储格式 orc - ZILIB ,压缩后大小2.78MB
4.列存储格式 orc-snappy ,压缩后大小3.75MB
5.列存储格式之parquets ,压缩后大小13.09MB
hive参数设置范围 : 配置文件参数 > 命令行参数 > set参数声明
hive参数设置优先级: set参数声明 > 命令行参数 > 配置文件参数
注意: 一般执行SQL需要指定的参数, 都是通过 set参数声明 方式进行配置,因为它属于当前会话的临时设置,断开后就失效了
==Hive底层是运行MapReduce,所以Hive支持什么压缩格式本质上取决于MapReduce。==
在后续可能会使用GZ(GZIP), 保证压缩后的数据更小, 同时压缩和解压的速度比较OK的,
但是大部分的选择主要会选择另一种压缩方案, snappy, 此种方案可以保证在合理的压缩比下, 拥有更高的解压缩的速度
snappy | A fast compressor/decompressor On a single core of a Core i7 processor in 64-bit mode, Snappy compresses at about 250 MB/sec or more and decompresses at about 500 MB/sec or more.

开启压缩
- create database hive6;
- use hive6;
- -- 开启压缩(map阶段或者reduce阶段)
- --开启hive支持中间结果的压缩方案
- set hive.exec.compress.intermediate; -- 查看默认
- set hive.exec.compress.intermediate=true ;
- --开启hive支持最终结果压缩
- set hive.exec.compress.output; -- 查看默认
- set hive.exec.compress.output=true;
-
- --开启MR的map端压缩操作
- set mapreduce.map.output.compress; -- 查看默认
- set mapreduce.map.output.compress=true;
- --设置mapper端压缩的方案
- set mapreduce.map.output.compress.codec; -- 查看默认
- set mapreduce.map.output.compress.codec= org.apache.hadoop.io.compress.SnappyCodec;
-
- -- 开启MR的reduce端的压缩方案
- set mapreduce.output.fileoutputformat.compress; -- 查看默认
- set mapreduce.output.fileoutputformat.compress=true;
- -- 设置reduce端压缩的方案
- set mapreduce.output.fileoutputformat.compress.codec; -- 查看默认
- set mapreduce.output.fileoutputformat.compress.codec = org.apache.hadoop.io.compress.SnappyCodec;
- --设置reduce的压缩类型
- set mapreduce.output.fileoutputformat.compress.type; -- 查看默认
- set mapreduce.output.fileoutputformat.compress.type=BLOCK;

行存储的特点: 查询满足条件的一整行数据的时候,列存储则需要去每个聚集的字段找到对应的每个列的值,行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快。
列存储的特点: 因为每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量;每个字段的数据类型一定是相同的,列式存储可以针对性的设计更好的设计压缩算法。
行存储: textfile和squencefile
优点: 每行数据连续存储 select * from 表名; 查询速度相对较快
缺点: 每列类型不一致,空间利用率不高 select 列名 from 表名; 查询速度相对较慢
列存储: orc(zlib,snappy)和parquet
优点: 每列数据连续存储 select 列名 from 表名; 查询速度相对较快
缺点: 因为每行数据不是连续存储 select * from 表名;查询速度相对较慢
注意: ORC文件格式的数据, 默认内置一种压缩算法:zlib , 在实际生产中一般会将ORC压缩算法替换为 snappy使用,格式为: STORED AS orc tblproperties ("orc.compress"="SNAPPY")

- --存储压缩比
- -- 存储格式应用对比
- -- 演示textfile行存储格式: 18.1 m
- create table log_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 ; -- TEXTFILE当前默认的,可以省略
-
- -- 查询数据
- select * from log_text;
压缩后size:18MB ,原封不动


压缩后大小8.89MB
-
- create table log_text_sequen (
- 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 sequencefile ;
- -- 加载数据(先上传数据文件到根目录)
- insert into table log_text_sequen select * from log_text;
- -- 查询数据
- select * from log_text_sequen ;
/*ORC文件格式的数据, 默认内置一种压缩算法:ZLIB , 在实际生产中一般会将ORC压缩算法替换为 snappy
格式为: STORED AS orc tblproperties ("orc.compress"="SNAPPY") */
- create table log_orc_zlib(
- 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 ;-- 默认内置一种压缩算法:ZLIB
-
- -- 加载数据(先上传数据文件到根目录,可以)
- insert into table log_orc_zlib select * from log_text; --24s 726ms size 2.78MB
- --回到HDFS中查看,原来18MB的文件,在算法压缩后,变成2.78MB,压缩后在hdfs中查看是乱码
- -- 查询数据
- select * from log_orc_zlib;
压缩后大小2.78MB

/*ORC文件格式的数据, 默认内置一种压缩算法:ZLIB , 在实际生产中一般会将ORC压缩算法替换为 snappy
格式为: STORED AS orc tblproperties ("orc.compress"="SNAPPY") */
- -- [重点orc配合snappy]
- -- 演示orc列存储(指定snappy): 3.75 m
- 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"); -- 配合SNAPPY压缩
-
- -- 加载数据(先上传数据文件到根目录)
- insert into table log_orc_snappy select * from log_text;
- -- 查询数据
- select * from log_orc_snappy;

- -- 演示parquet压缩存储:13.09 m
- create table 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 PARQUET ;
-
- -- 加载数据(先上传数据文件到根目录)
- insert into table log_parquet select * from log_text;
- -- 查询数据
- select * from log_parquet;
压缩后大小13.9MB
查看文件大小的hdfs dfs -du -h '路径';
[root@node1 ~]# hdfs dfs -du -h '/user/hive/warehouse/hive6.db/log_text/log.data' ;
18.1 M 54.4 M /user/hive/warehouse/hive6.db/log_text/log.data
[root@node1 ~]# hdfs dfs -du -h '/user/hive/warehouse/hive6.db/log_orc_zlib/000000_0';
2.8 M 8.3 M /user/hive/warehouse/hive6.db/log_orc_zlib/000000_0