Hadoop执行多个reduce

在Hadoop中默认运行一个reduce,所有reduce任务会放到一个单一的reduce中去执行。

比较好的配置reduce数量是根据集群中所有的reduce任务槽的数目,一般认为集群节点中运行reduce任务节点及机器数目的2倍,因为每个节点上默认使用2个任务槽。

reduce任务的具体数量是由

Mapred.Reduce.Tasks属性设置。

在本地环境中进行任务处理的时候,即构建本地测试环境时,必须有0个或者1个reduce。

使用多个reduce任务进行处理的时候,必须使用集群才行,需要将文件打成jar包。

job.setNumReduceTasks(3);            //设置同时3个reduce

分区后的reduce,默认只是依次使用3个reduce。

job.setNumReduceTasks(1);            //设置1个reduce

job.setPartitionerClass(HashPartitioner.class);            //设置分片方法

partitioner类就是为了确定Map处理后的文件需要使用哪个Reduce进行处理,默认使用HashPartitioner,对其所对应的键进行哈希操作,用来决定该记录使用哪个分区进行处理。

eg.自定义HashPartitioner类

class MyPartitioner extends Partitioner{

    @Override

    public int getPartition(Object key, Object value, int numPartitioners){

        if(values.toString().startsWith("GoodWord"))

            return 1;

        if(values.toString().startsWith("hello"))

            return 2;

        else return 0;

    }

}

对输入的值进行处理,根据输入的不同,返回不同的分类。

以“GoodWord”开头的全部用reduce1处理,

以“hello”开头的全部用reduce2处理,

else全部用reduce0处理。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容