快捷搜索:  汽车  科技

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)可以看到现在value中是空的没有配置可以看到找到这个配置文件 对应的这个配置选项首先我们看如果在输入端 采用压缩怎么配置 首先要在core-site.xml文件中 配置io.compression.codes​

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(1)

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(2)

然后我们再来看看如何是hadoop MapReduce中使用压缩

为了支持多种压缩 解压算法那 hadoop引入了编码 解码器

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(3)

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(4)

首先我们看如果在输入端 采用压缩怎么配置 首先

要在core-site.xml文件中 配置io.compression.codes

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(5)

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(6)

可以看到找到这个配置文件 对应的这个配置选项

可以看到现在value中是空的没有配置

说明map的输入端默认不使用压缩

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(7)

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(8)

value既然是空的那么 如何配置呢?配置什么参数呢?

可以在我们搭建的hadoop集群中 使用hadoop checknative 这个命令

而已看到 显示 zlib astd snappy lz4 bzip2 这些压缩命令..这些都可以填入刚刚的

value中.

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(9)

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(10)

然后我们再看mapper输出端采用压缩 怎么实现

可以看到 这个配置需要在mapred-site.xml

配置mapreduce.map.output.compress

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(11)

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(12)

在配置文件中找到

这个配置可以看到默认是fasle 如果使用需要改成true

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(13)

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(14)

改成true了以后 表示开启了 mapper输出的 压缩

然后再去 配置使用什么压缩算法

就是这个

mapreduce.map.output.compress.codec

可以看到默认是

org.apache.hadoop.io.compress.DefaultCodec

默认采用的是这个压缩算法

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(15)

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(16)

然后我们再去看reducer输出的时候采用压缩的配置

可以看到要在mapred-site.xml文件中配置

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(17)

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(18)

找到这个配置

mapreduce.output.fileoutputformat.compress

可以看到默认是false对吧 要用 的话需要打开

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(19)

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(20)

然后我们再去看这个默认配置的是

org.apache.hadoop.io.compress.DefaultCodec 也是用的默认的解码器对吧.

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(21)

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(22)

可以看到上面是配置 那么如果我们想在代码中使用怎么用呢?

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(23)

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(24)

这里我们用以前的wordcount这个源码来进行演示

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(25)

可以看到需要添加上上面这段代码就可以了

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(26)

可以看到通过在Configuration conf = ....下面添加

conf.setBoolean("mapreduce.map.output.compress" true); 这里设置来开启map端输出时候的压缩

然后使用

conf.setClass("mapreduce.map.output.compress.codec" BZip2Codec.class CompressionCodec.class);

通过这个来设置map输出的压缩算法 这样就可以了.

然后我们去执行一下 这个时候map输出的时候 就会使用压缩算法把数据压缩以后再传输到reduce了.

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(27)

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(28)

然后我们去检查一下 输出目录 可以看到output888 有输出了

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(29)

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(30)

这个时候就是说 map处理完的数据会通过压缩算法bzip2 压缩然后再传输给reduce

reduce根据配置 会把压缩后的数据 从maptask拉取过来以后 自动解压缩处理

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(31)

我们看看结果

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(32)

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(33)

打开以后可以看到 跟以前我们不使用压缩是一样的效果对吧

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(34)

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(35)

说明什么 说明map处理完了以后 把数据压缩 然后传给reduce 压缩算法我们指定了以后 也指定了

压缩的时机 也就是在map处理数据以后 采用压缩算法 压缩数据 以后传给reduce 这个时候

reduce拉取以后会自动解压 根据设置的压缩算法.

所以我们就看不出来 使用了压缩 但实际上已经用了.

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(36)

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(37)

然后我们再看 在reduce输出阶段使用压缩怎么弄

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(38)

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(39)

可以看到我们还是在driver驱动类中 在

设置FileOutputFormat.setOutputPath以后

然后设置

FileOutputFormat.setCompressOutput(job true);

开启 reduce输出时压缩

然后 设置reduce输出压缩的压缩方式

FileOutputFormat.setOutputCompressorClass(job BZip2Codec.class)

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(40)

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(41)

然后再执行可以看到这个时候 输出的时候

reduce输出的时候 就被利用我们设置的压缩算法压缩了

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(42)

可以看到结果也没问题

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(43)

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(44)

然后我们再去试试 reduce输出的时候 我们设置

Gzip这种压缩算法

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(45)

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(46)

可以看到再执行 去看结果

结果变成.gz结尾的了吧 我们使用gzip压缩算法对吧.

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(47)

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(48)

可以看到也没问题对吧 但压缩算法用Gzip了

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(49)

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(50)

然后我们再修改成DefaultCodec.class再去执行

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(51)

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(52)

可以看到这个时候的后缀 变成了这种压缩的出来的了

deflate对吧

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(53)

hadoop mapreduce 工作原理(大数据之-Hadoop3.xMapReduce数据压缩)(54)

然后我们再去试试 我们在map输出的时候压缩 这时候 我们采用

conf.setClass("mapreduce.map.output.compress.codec" SnappyCodec.class CompressionCodec.class)

来进行压缩

然后我们执行可以看到报错了对吧 为什么?

因为snappy需要 结合 centos7.5以上 然后和hadoop 3.x 一块使用才可以 这个是版本问题..

猜您喜欢: