一、上次回顾
- ETL是只有map没有reduce的,MapReduce开发的Java代码我们只需要把项目跑出来即可;处理完的结果是hdfs上的一个location,刷新分区信息,就能够查询得到。
二、压缩在Hadoop项目中的使用场景
Mapreduce --> ETL --> HDFS(普通的文本格式)
- 我们在HDFS上使用的是纯文本格式,数据未经任何压缩,在生产上肯定是不行的;假设生产上一天的数据量是500G,以三副本为例的话,1500G,会占用很多个block,这样是不行的;所以在ETL --> HDFS的时候可以把压缩(compression)加进去。
ETL --> Compression --> HDFS
- 以Windows进行举例,使用右键进行压缩,采用ZIP\RAR方式压缩,压缩方式还分为很多种(较快、很快、标准)
压缩带来的好处:
1、节省磁盘利用率
2、加快网络传输
带来的坏处:
1、多了一步操作压缩和解压,对于压缩、解压是需要耗费CPU的
假设大桥.mp4,1.5G,对文件进行压缩后是0.8G;现在需要把它拷贝到移动硬盘,肯定是0.8G的文件传输起来较快.
压缩不仅仅减少磁盘的空间,还能加速网络的传输,结合MapReduce的流程,压缩往往发生在Shuffle阶段,Shuffle过程会分到一个Reduce中去。
总结:在大数据中任何一种调优方式都不是万能的,需要结合生产实际情况来看。在生产场景中:集群整体负载高的话,就不能使用压缩和解压;集群负载低的话可以开压缩。
压缩就是磁盘和CPU的一个取舍。
压缩使用场景
压缩场景:
1、input:Flume Sink HDFS <==> Spark/Mapreduce
2、output:Spark/Mapreduce ==> Sink Hadoop
3、temp:Sink DISK
2.1、常用压缩格式介绍
1、Windows上的压缩:
2、同样在Linux上也有压缩:
检查自己机器上的Hadoop是否支持压缩:下载Hadoop源码添加仓库一个命令执行到底就能okay?
[hadoop@sz5i5j-01 hadoop]$ bin/hadoop checknative
20/05/11 12:46:53 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native
20/05/11 12:46:53 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 /lib64/libsnappy.so.1
lz4: true revision:99
bzip2: true /lib64/libbz2.so.1
openssl: true /lib64/libcrypto.so
面试必问必考:
1、常用压缩格式对比:
No Compress | Snappy | LZ4 | LZO | GZIP | BZIP2 |
---|---|---|---|---|---|
1403M | 701M | 693M | 684M | 447M | 390M |
2、常用压缩速度对比:
Time | BZIP2 | GZIP | LZO | LZ4 | Snappy |
---|---|---|---|---|---|
压缩时间 | 142 | 85 | 7.6 | 6.45 | 6.41 |
解压时间 | 62 | 21 | 11.1 | 2.36 | 19.84 |
总结:压缩速度压缩比肯定是成反比的,一般选择压缩速度与压缩时间相近的进行选择;LZO、LZ4、Snappy如上是都可以进行选择的。
压缩在Hadoop中的应用 - 常用Codec
压缩格式 | 配置参数 |
---|---|
zlib | org.apache.hadoop.io.compress.DefaultCodec |
gzip2 | org.apache.hadoop.io.compress.GzipCodec |
bzip2 | org.apache.hadoop.io.compress.BZ |