Hadoop和Hive配置压缩

版权声明:此博客为个人维护,内容均来自原创及互连网转载,若需转载需注明出处。 https://blog.csdn.net/weixin_37677769/article/details/82924595

压缩

对于大数据来说BIGDATA 就是Storage + Compute(存储和计算)
compressed(压缩): raw ==> reduce (原始数据减小)
decompressed(解压):compressed data ==> raw (压缩数据变成原来的)

好处:
整个流程:hdfs ==> map ==> shuffle ==> reduce

省空间,传输快,省IO(网络IO,磁盘IO)

缺点:
占用:CPU + 时间(压缩解压缩占用的时间并不是太多,和整个流程比起来,主要是CPU)
TradeOff(权衡,所有的优化都是权衡,没有十全十美的)
如果cpu负载高,计算,文件读取什么的都会慢,会阻塞job
压缩技术:
Lossless  (无损)  (一般都是无损,即便是用户行为数据)
	compressed  + decompressed
	Run Length Encoding
	Huffman Encoding
Lossy   (有损)
	JPEG MP3  MPEG(图片,音频什么的可以允许有损失)
压缩工具简介

1.gzip
压缩比高,压缩解压的速度也比较快。
2.lzo
合理的压缩比,压缩解压速度也比较快。对lzo文件建索引,之后才能split
3.snappy
合理的压缩比,高速压缩速度,支持hadoop native库
4.bzip2
支持split,很高的压缩比。但是压缩/解压速度慢。CPU占用较其他压缩方式高

压缩比的比较:
压缩比
占用时间比较:
压缩速度

选择压缩方式,要根据实际情况活用。比如:
Flume:适用带split的lzo,速度快
冷数据:压缩比高的(bzip2)

Hadoop配置

使用hadoop自带的查询语句查询可用的压缩方式

[hadoop@hadoop002 ~]$ hadoop checknative
18/10/02 11:06:07 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native
18/10/02 11:06:07 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
Native library checking:
hadoop:  true /opt/software/hadoop-2.6.0-cdh5.7.0/lib/native/libhadoop.so.1.0.0
zlib:    true /lib64/libz.so.1
snappy:  true /usr/lib64/libsnappy.so.1
lz4:     true revision:10301
bzip2:   true /lib64/libbz2.so.1
openssl: true /usr/lib64/libcrypto.so

这些压缩如果是false,在本机就不能使用。一般自己编译的hadoop都是true,直接下载官网编译好的应该是false。

根据官网,core-default.xml可以知道需要配置:
core-site.xml

<property>
	<name>io.compression.codecs</name>
	<value>
	org.apache.hadoop.io.compress.GzipCodec,
	org.apache.hadoop.io.compress.DefaultCodec,
	org.apache.hadoop.io.compress.BZip2Codec,
	org.apache.hadoop.io.compress.SnappyCodec
	</value>
</property>	

mapred-site.xml
在这个配置文件中,分为总的输出和中间的输出(map),可根据实际情况配置,需要修改时可自行修改。

<property>
	<name>mapreduce.output.fileoutputformat.compress</name>
	<value>true</value>
</property>

<property>
	<name>mapreduce.output.fileoutputformat.compress.codec</name>
	<value>org.apache.hadoop.io.compress.BZip2Codec</value>
</property>	


总的输出
mapreduce.output.fileoutputformat.compress
mapreduce.output.fileoutputformat.compress.codec
map的输出
mapreduce.map.output.compress
mapreduce.map.output.compress.codec

测试:默认jar包在hadoop根目录下的share/hadoop/mapreduce2下面

hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar wordcount /input.txt /wc/wordcount

在hdfs的/wc/wordcount文件夹下面可以看到后缀为bz2的结果。(这里的路径都是hdfs上的路径)

Hive配置

打开hive,创建一张表,执行本地导入操作
load data local inpath “xxx.txt” overwrite into table tablename;
然后输入

SET hive.exec.compress.output=true;
SET mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.BZip2Codec;

create table page_views_bzip2
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"
as select * from page_views;

SET xxx=yyy;(改回原配置)
这个SET配置可以配置到hive-site.xml中,但是这样的话所有的都会使用bzip2压缩
什么时候用什么时候配置比较灵活。在设置之前,需要先查看一下当前的配置,改完执行完后最好再改回来,防止别人习惯的配置被改掉。
然后去hive默认的存储地址:hdfs文件系统的/user/hive/warehouse下面查看:

[hadoop@hadoop002 ~]$ hadoop fs -ls /user/hive/warehouse
Found 1 items
drwx------   - hadoop hadoop          0 2018-10-01 22:51 /user/hive/warehouse/page_views_bzip2

找到了创建的新表page_views_bzip2,查看文件内部:

[hadoop@hadoop002 ~]$ hadoop fs -ls /user/hive/warehouse/page_views_bzip2
Found 1 items
-rwx------   3 hadoop hadoop    3888864 2018-10-01 22:51 /user/hive/warehouse/page_views_bzip2/000000_0.bz2

发现文件后缀是.bz2,这正是bzip2压缩文件的后缀。查看文件大小:

[hadoop@hadoop002 ~]$ hadoop fs -ls -h /user/hive/warehouse/page_views_bzip2/000000_0.bz2
-rwx------   3 hadoop hadoop      3.7 M 2018-10-01 22:51 /user/hive/warehouse/page_views_bzip2/000000_0.bz2
[hadoop@hadoop002 ~]$ hadoop fs -du -h /user/hive/warehouse/page_views_bzip2/000000_0.bz2
3.7 M  11.1 M  /user/hive/warehouse/page_views_bzip2/000000_0.bz2

会发现大小为3.7M,而原文件大小为18.1M。
hadoop fs -du -h命令得到的3.7M为单个文件大小,11.1M为总的副本大小,我的副本为三份,所以是3.7*3=11.1M。

猜你喜欢

转载自blog.csdn.net/weixin_37677769/article/details/82924595