我们看到map可以接受和输出压缩和未压缩的数据。我正在接受cloudera培训,老师提到减少任务输入必须以键值的形式进行,因此不能处理压缩数据。
是这样吗?如果是这样的话,当从shuffler/partitioner传输bug数据以减少任务时,我如何处理网络延迟。
谢谢你的帮助。
如果Mapper
可以输出压缩数据,那么Reducer
当然可以接受压缩数据。这对两者都是透明的,因此输出会自动压缩和解压缩。
我想他/她一定是在说Hadoop必须为您解压缩压缩的输入,因为Reducer
不期望压缩的数据必须自己解压缩。
Reducer
s还可以输出压缩数据,这是单独控制的。您可以控制编解码器。您还可以自动读取压缩数据作为Mapper
的输入。
不过也有一些问题:例如,gzip
压缩文件不能被Mapper
分割,这对并行性不利。但是bzip
压缩文件在某些情况下可以被拆分。
可以。只需将此添加到驱动程序类的主方法:
Configuration conf = new Configuration();
conf.setBoolean("mapred.compress.map.output", true);
conf.setClass("mapred.map.output.compression.codec", SnappyCodec.class, CompressionCodec.class);