离线计算组件篇-MapReduce-原理浅析

2022-12-03  本文已影响0人  CoderInsight

12. map task工作机制

Shuffle 阶段是从 Map 输出开始,也就是从第(3)步一直到Reduce的Merge阶段,那么在面试的中问道shuffer阶段就可以从这几方面进行讲解。

13. reduce task工作机制

(1). reduce流程

(2). 设置ReduceTask并行度(个数)

(3). 实验:测试ReduceTask多少合适

MapTask = 16
ReduceTask 1 5 10 15 16 20 25 30 45 60
总时间 892 146 110 92 88 100 128 101 145 104

14,MapReduce 的 Combiner

每一个map都可能会产生大量的本地输出,Combiner的作用就是对map端的输出先做一次合并,以减少在map和reduce节点之间的数据传输量,以提高网络IO性能,是MapReduce的一种优化手段之一。

具体实现步骤:

1、自定义一个combiner继承Reducer,重写reduce方法

2、在job中设置: job.setCombinerClass(CustomCombiner.class)

注意:

combiner能够应用的前提是不能影响最终的业务逻辑,而且,combiner的输出kv应该跟reducer的输入kv类型要对应起来。

15.shuffle中数据压缩

1、hadoop当中支持的压缩算法

文件压缩有两大好处,节约磁盘空间,加速数据在网络和磁盘上的传输

前面我们的hadoop的版本经过我们重新编译之后,我们可以看到我们的hadoop已经支持所有的压缩格式了,剩下的问题就是我们该如何选择使用这些压缩格式来对我们的MapReduce程序进行压缩

我们可以使用bin/hadoop checknative 来查看我们编译之后的hadoop支持的各种压缩,如果出现openssl为false,那么就在线安装一下依赖包
bin/hadoop checknative
yum install openssl-devel
压缩格式 工具 算法 文件扩展名 是否可切分
DEFLATE DEFLATE .deflate
Gzip gzip DEFLATE .gz
bzip2 bzip2 bzip2 bz2
LZO lzop LZO .lzo
LZ4 LZ4 .lz4
Snappy Snappy .snappy
压缩格式 对应使用的java类
DEFLATE org.apache.hadoop.io.compress.DeFaultCodec
gzip org.apache.hadoop.io.compress.GZipCodec
bzip2 org.apache.hadoop.io.compress.BZip2Codec
LZO com.hadoop.compression.lzo.LzopCodec
LZ4 org.apache.hadoop.io.compress.Lz4Codec
Snappy org.apache.hadoop.io.compress.SnappyCodec
压缩算法 原始文件大小 压缩后的文件大小 压缩速度 解压缩速度
gzip 8.3GB 1.8GB 17.5MB/s 58MB/s
bzip2 8.3GB 1.1GB 2.4MB/s 9.5MB/s
LZO-bset 8.3GB 2GB 4MB/s 60.6MB/s
LZO 8.3GB 2.9GB 135 MB/s 410 MB/s
snappy 8.3GB 1.8GB 172MB/s 409MB/s

常用的压缩算法主要有LZO和snappy等

2.如何开启我们的压缩:

方式一:在代码中进行设置压缩

// 1,初始化配置文件对象
Configuration configuration = new Configuration();
// 2,配置开启Map阶段数据压缩
configuration.set("mapreduce.map.output.compress","true");
// 3,配置Map阶段压缩的格式
configuration.set("mapreduce.map.output.compress.codec","org.apache.hadoop.io.compress.SnappyCodec");
// 4,配置开启reduce阶段数据压缩
configuration.set("mapreduce.output.fileoutputformat.compress","true");
// 5,配置Reduce阶段数据压缩格式(默认格式是DefaultCodec)
configuration.set("mapreduce.output.fileoutputformat.compress.codec","org.apache.hadoop.io.compress.SnappyCodec");
// 6,如果数据是SequenceFile格式,执行SequenceFile数据的压缩格式(默认是Record,其他可选值:BLOCK)
configuration.set("mapreduce.output.fileoutputformat.compress.type","RECORD");

方式二:修改mapred-site.xml进行MapReduce压缩

<property>
    <name>mapreduce.map.output.compress</name>
    <value>true</value>
</property>
<property>
    <name>mapreduce.map.output.compress.codec</name>
    <value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
<property>       
    <name>mapreduce.output.fileoutputformat.compress</name>
    <value>true</value>
</property>
<property>        
    <name>mapreduce.output.fileoutputformat.compress.type</name>
    <value>RECORD</value>
</property>
<property>        
    <name>mapreduce.output.fileoutputformat.compress.codec</name>
    <value>org.apache.hadoop.io.compress.SnappyCodec</value> 
</property
上一篇 下一篇

猜你喜欢

热点阅读