我是靠谱客的博主 聪明吐司,最近开发中收集的这篇文章主要介绍Hive数据压缩_MR数据压缩_存储数据压缩,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一 MR 数据压缩

Hadoop三大核心:HDFS(负责存储)、MapReduce(负责计算)、Yarn( 负责调度计算)
Hive基于HDFS存储,Hive计算是将Hql语句转换为MR任务,而MR任务可以对处理的数据进行压缩。所以所谓Hive数据压缩就是MR数据压缩

1、基本含义

MR压缩:通过压缩编码对mapper或者reducer的输出进行压缩,以减少磁盘IO,提高MR程序运行速度,但相应增加了cpu运算负担


压缩特性运用得当能提高性能,但运用不当也可能降低性能。其基本原则是:

  • 运算密集型的job,少用压缩
  • IO密集型的job,多用压缩

2、压缩编码、算法和对比

MR支持的压缩编码

为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器,如下表所示:

压缩格式对应的编码/解码
DEFAULTorg.apache.hadoop.io.compress.DefaultCodec
Gziporg.apache.hadoop.io.compress.GzipCodec
Bzip2org.apache.hadoop.io.compress.Bzip2Codec
LZOorg.hadoop.io.compress.lzo.LzopCodec
LZ4org.apache.hadoop.io.compress.Lz4pCodec
Snappyorg.apache.hadoop.io.compress.SnappyCodec

压缩性能的比较:

3、实际操作

map阶段:开启 map 输出阶段压缩可以减少 job 中 map 和 Reduce task 间数据传输量。

-- 开启 hive 中间传输数据压缩功能
set hive.exec.compress.intermediate=true;

-- 开启 mapreduce 中 map 输出压缩功能
set mapreduce.map.output.compress=true;

-- 设置 mapreduce 中 map 输出数据的压缩方式
set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;

reduce阶段:当Hive将输出写入到表中时,输出内容同样可以进行压缩

-- 开启hive最终输出数据压缩功能
set hive.exec.compress.output=true;

--开启mapreduce最终输出数据压缩
set mapreduce.output.fileoutputformat.compress=true;

--设置mapreduce最终数据输出压缩方式
set mapreduce.output.fileoutputformat.compress.codec =org.apache.hadoop.io.compress.SnappyCodec;

--设置mapreduce最终数据输出压缩为块压缩
set mapreduce.output.fileoutputformat.compress.type=BLOCK;

二、Hive存储数据压缩

1、基本含义

Hive存储格式

texfile:行存储。默认的存储格式。加载速度最快,可采用Gzip进行压缩,压缩后的文件无法split,无法并行处理

sequencefile:行存储。提供的一种二进制存储格式,可以切割,天生压缩。压缩率最低,查询速度一般,将数据存放到sequenceFile格式的hive表中,这时数据就会压缩存储。三种压缩格式NONE,RECORD,BLOCK。是可分割的文件格式

rcfile:行列混合存储,数据按行分块 每块按照列存储。该方式会把相近的行和列数据放在一块儿。压缩率最高,查询速度最快,数据加载最慢

orc:列存储。是rcfile的一种优化存储

parquet:列存储。具有很好的压缩性能,可以指定每一列的压缩方式。同时可以减少大量的表扫描和反序列化的时间

存储效率对比

ORC > Parquet > textFile

更多介绍可参考:
https://www.cnblogs.com/sunpengblog/p/11912958.html
https://blog.csdn.net/qq_35260875/article/details/109196553

2、代码

创建表,存储数据格式为ORC,不设置压缩

create table test(
id  int,
content  tring
)
row format delimited fields terminated by ',' 
stored as orc
tblproperties ("orc.compress"="NONE");

三 总结

在实际的项目中,hive表的数据存储格式一般选择:orc或parquet。压缩方式一般选择snappy或lzo

创建一个SNAPPY压缩的ORC存储方式

create table log_orc_snappy(
id int,
url string)
row format delimited fields terminated by ','
stored as orc
tblproperties("orc.compress"="SNAPPY");


 

最后

以上就是聪明吐司为你收集整理的Hive数据压缩_MR数据压缩_存储数据压缩的全部内容,希望文章能够帮你解决Hive数据压缩_MR数据压缩_存储数据压缩所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部