大数据中的压缩

压缩的场景

在这里插入图片描述
这张图大概说了日志文件采集到hdfs,经过处理引擎,通过各个维度统计分析操作,输出到db的流程。

这里关于压缩和解压的步骤有:
压缩:数据采集,数据处理后
解压:hdfs到处理引擎

为什么压缩

压缩带来好处:减小网络传输,节省存储空间
缺点:耗cpu

压缩支持切片?

如果压缩文件不支持split,那么就只能以一个map task处理。注意这里的split只是争对计算而言。存储是可以切分的。

在这里插入图片描述Lzo压缩如果有一个index文件,记录从哪里拆开。所以也是可以分片的。

常用压缩方式对比

这是常用压缩和其文件的后缀
在这里插入图片描述Lzo压缩会多生成一个index文件,记录从哪里拆开

压缩前后大小对比

压缩比差不多都是0.5
在这里插入图片描述

压缩解压的耗时对比

在这里插入图片描述
压缩越小,往往时间越长。这是需要根据场景选择合适的压缩方式。

压缩依赖的包

在这里插入图片描述

如何选择压缩方式?

在这里插入图片描述
这是一张计算过程中的压缩和解压缩

在这里插入图片描述
第一阶段就是采集数据到hdfs,因为为了后面的map,这里选择可分片的压缩或者使用可分片的文件结构。

第二阶段是map阶段,要求压缩速度快,便于紧跟reduce。

第三阶段是reduce阶段之后,如果输出的数据是作为下个作业的输入,就要考虑分片。如果是归档(存储),就考虑高压缩比。

查看hadoop支持的压缩方式

当集群启动的时候,会首先进入安全模式。当系统处于安全模式时会检查数据块的完整性。这时,不允许客户端进行任何修改文件的操作,包括上传文件,删除文件,重命名,创建文件夹等操作。

都是false是因为没有编译,编译方法请见另一篇博客。

[hadoop@hadoop000 bin]$ hadoop checknative
18/11/30 09:31:50 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Native library checking:
hadoop:  false 
zlib:    false 
snappy:  false 
lz4:     false 
bzip2:   false 
openssl: false

也可以通过复制编译好的native文件。
native路径

/home/hadoop/app/hadoop-2.6.0-cdh5.7.0/lib/native

解决后:

 [hadoop@hadoop000 hadoop-2.6.0-cdh5.7.0]$ hadoop checknative
18/12/02 18:12:04 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native
18/12/02 18:12:04 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
Native library checking:
hadoop:  true /home/hadoop/app/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:99
bzip2:   true /lib64/libbz2.so.1
openssl: true /usr/lib64/libcrypto.so

配置hadoop的压缩方式

core-site.xml添加

想要集群支持的codec都配进来

<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,
		</value>
	</property>

mapred-site.xml添加

true是启用压缩,第二个是具体使用哪个,这个对应上文的第三阶段。

<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>

hive的压缩设置

先建个表

create table page_views(
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' 

传个数据

load data local inpath '/home/hadoop/data/page_views.dat' overwrite into table page_views;

大小

[hadoop@hadoop000 data]$ hdfs dfs -ls /user/hive/warehouse/page_views
Found 1 items
-rwxr-xr-x   1 hadoop supergroup   19014993 2018-12-02 18:40 /user/hive/warehouse/page_views/page_views.dat
[hadoop@hadoop000 data]$ hdfs dfs -du /user/hive/warehouse/page_views
19014993  19014993  /user/hive/warehouse/page_views/page_views.dat
[hadoop@hadoop000 data]$ hdfs dfs -du -h /user/hive/warehouse/page_views
18.1 M  18.1 M  /user/hive/warehouse/page_views/page_views.dat

启用压缩

hive (default)> set hive.exec.compress.output;
hive.exec.compress.output=false
hive (default)> set hive.exec.compress.output=true;

查看默认的压缩方式并设置

hive (default)> set mapreduce.output.fileoutputformat.compress.codec;

hive (default)> set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.BZip2Codec;

建表2

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

显著的结果

[hadoop@hadoop000 data]$ hdfs dfs -du -h /user/hive/warehouse
18.1 M  18.1 M  /user/hive/warehouse/page_views
3.6 M   3.6 M   /user/hive/warehouse/page_views_bzip2

猜你喜欢

转载自blog.csdn.net/qq_36459386/article/details/84717621