通常在hadoop集群上运行一个MapReduce会有以下步骤:
input->Map->shuffle->reduce->output
假如我们采用了数据压缩linux运维最佳实践,在map阶段形成的数据大小都会降低,会降低c盘的IO,同时还能否减低网路的IO。
1.压缩算法比较
Linux操作系统中常见的压缩格式是bzip2、gzip、lzo、snappy这四种,这四种压缩方式的比较如下:
压缩比:bizp2>gzip>lzo(snappy)bzip2最节约空间
解压速率:lzo(snappy)>gzip>bzip2lzo解压速率是最快的
解压速率消耗CPU资源,压缩比消耗c盘空间,这三者要权衡一下,假若压缩比太大,这么解压速率就慢,花费CPU就多。gzip是以.gz扩充名结尾的文件使用的压缩算法,通常开源软件的压缩包多采用这些格式。snappy是google开源下来的压缩算法,它致力提供高速压缩速率和合理的压缩率,所以现今实际应用中多使用snappy压缩算法。之前安装的CDH集群默认使用的就是snappy压缩算法。
2.Hadoop压缩算法
hadoop集群中使用压缩算法的要求有以下4点:
1.hadoop的执行job的速率的困局是c盘IO和网路IO,借助压缩可以降低这种IO;
2.压缩就能增加网路传输的数据量;
3.压缩后job整体的执行性能提高了;
4.压缩算法要才能支持可分割的。因为hadoop中的job是分Map和Reduce进行处理的,一般一个Map处理一个block,这时侯就须要每位block才能单独进行压缩,这样每位job在进行任务处理的时侯就可以不受影响的单独进行解压。因而不影响job执行的效率。
3.Hadoop压缩数据流程
hadoop中有三个阶段可以用到压缩,分别是Map,Shuffle和Reduce红旗linux操作系统,其中Map阶段首先对输入的数据进行压缩,之后在Map的job中进行解压并对数据进行业务处理,将结果写入c盘的时侯进行数据的压缩linux zip命令压缩,Shuffle的过程上将c盘中压缩的文件内容读取下来,然后传递给Reduce,Reduce中对数据再进行解压并做业务处理,整个过程都估算完毕后再用压缩对输出进行压缩。其数据流程可以用下边的流程表示:
压缩的输入文件->(解压数据)->Maps->压缩输出->SpilltoDisk(Shuffle)->解压输入->Reduces->压缩输出->压缩的输出文件
晓得在那个阶段可以使用压缩算法的情况下linux zip命令压缩,就可以有针对性的对MapReduce进行调优处理。
4.压缩参数设置
我们可以通过Jobhistory查看每位job运行的时侯参数配置,与压缩有关的参数如下:
press和press
这两个参数可以设置为true或false来控制是否使用压缩算法。
可以通过下边两个参数来配置压缩算法:
press.codec和press.codec
hadoop支持多种压缩算法,常用的算法对应的类有下边两个:
press.SnappyCodec和press.lzo.LzoCodec
分别对应的是snappy和lzo压缩算法,其中在2013年之前常用lzo压缩算法,目前这常常使用snappy算法。
在Map阶段启用snappy压缩的参数设置为:
press=true
press.codec=press.SnappyCodec
在Reduce阶段启用lzo压缩的参数设置为:
press=true
press.codec=press.lzo.LzoCodec
5.Hive中启用压缩
首先要确认hive-site.xml文件中的hive.execution.engine参数设置的是mr,表示hive有的操作的执行引擎是MapReduce,这样在Hive执行查询、插入等操作的时侯才能启动相应的MapReduce。
之后在hive中的mapred-site.xml中查找参数:press,假如该参数设置为true,这么该hive就是启用压缩的。在hive顾客端中也可以使用setpress命令查看压缩参数的设置值。