数据调优与压缩机制

MR调优策略
    1.减少数据的传输量
    2.尽量使用内存
    3.减少磁盘I/O的次数
    4.增大任务并行数
    5.除此之外还有根据自己集群及网络的实际情况来调优。

Map Side Join--解决join时数据倾斜问题
    如何解决数据倾斜是一个常谈的话题,不同的框架有不同的处理方案,如果是MR框架的话,我们可以利用DistributedCache(Hadoop内置的分布式缓存机制)来实现。
    DistributedCache 是一个提供给Map/Reduce框架的工具,用来缓存指定的文件。当我们使用了这个机制后,MR框架底层会将指定的文件拷贝到slave节点上的缓存中。
    使用DistributedCache机制,尤其在做join操作时,可以大大的提高作业的运行效率,并且可以额避免产生数据倾斜。
        将Join操作中的小表进行缓存,这样每个Map Task在执行时,都是可以在Map Task运行所在的节点的缓冲区拿到小表数据,从而在Map阶段就可以完成Join操作。这样一来,就不需要引入Reducer组件,也就不会产生数据倾斜的问题。

压缩机制
    1 gzip压缩
        优点:压缩率比较高,而且压缩/解压速度也比较快;hadoop本身支持,在应用中处理gzip格式的文件就和直接处理文本一样;有hadoop native库;大部分linux系统都自带gzip命令,使用方便。
        缺点:不支持split。
    2 bzip2压缩
        优点:支持split;具有很高的压缩率,比gzip压缩率都高;hadoop本身支持,但不支持native;在linux系统下自带bzip2命令,使用方便。
        缺点:压缩/解压速度慢;不支持native。
        应用场景
            适合对速度要求不高,但需要较高的压缩率的时候,可以作为mapreduce作业的输出格式;或者输出之后的数据比较大,处理之后的数据需要压缩存档减少磁盘空间并且以后数据用得比较少的情况;或者对单个很大的文本文件想压缩减少存储空间,同时又需要支持split,而且兼容之前的应用程序(即应用程序不需要修改)的情况。
            当每个文件压缩之后在128M以内的(1个块大小内),都可以考虑用gzip压缩格式。譬如说一天或者一个小时的日志压缩成一个gzip文件,运行mapreduce程序的时候通过多个gzip文件达到并发。hive程序,streaming程序,和java写的mapreduce程序完全和文本处理一样,压缩之后原来的程序不需要做任何修改。

原文地址:https://www.cnblogs.com/Striverchen/p/10557838.html