TeRiTeRi

  1. 首页
  2. 大数据
  3. Hadoop
  4. 正文

hadoop MapReduce自定义分区

2019年11月24日 2287点热度 0人点赞 1条评论
背景

在Hadoop的MapReduce过程中,每个map task处理完数据后,如果存在自定义Combiner类,会先进行一次本地的reduce操作,然后把数据发送到Partitioner,由Partitioner来决定每条记录应该送往哪个reducer节点,默认使用的是HashPartitioner,其核心代码如下:


MapReduce自定义分区

[infobox title="自定义Partitioner"]

public class FlowPartition extends Partitioner<Text,FlowBean> {
    @Override
    public int getPartition(Text text, FlowBean flowBean, int i) {
        String line = text.toString();
        if (line.startsWith("135")){
            return 0;
        }else if(line.startsWith("136")){
            return 1;
        }else if(line.startsWith("137")){
            return 2;
        }else if(line.startsWith("138")){
            return 3;
        }else if(line.startsWith("139")){
            return 4;
        }else{
            return 5;
        }
    }
}

[/infobox]
[infobox title="作业运行添加分区设置"]


设置reduce数量
job.setNumReduceTasks(2);
作业运行添加分区设置:
job.setPartitionerClass(FlowPartition.class);

更改输入与输出路径,并打包到集群上面去运行
TextInputFormat.addInputPath(job,new Path("hdfs://node01:8020/partition_flow/"));
TextOutputFormat.setOutputPath(job,new Path("hdfs://node01:8020/partition_out"));

[/infobox]

标签: centos Hadoop Java linux
最后更新:2019年11月24日

kamisamak

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

  • dva最棒了

    :hehe:

    2020年10月26日
    回复
  • razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
    取消回复

    COPYRIGHT © 2023 TeRiTeRi. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang