博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MapReduce Partition解析
阅读量:6871 次
发布时间:2019-06-26

本文共 1605 字,大约阅读时间需要 5 分钟。

Map的结果,会通过partition分发到Reducer上,reducer操作过后会进行输出。输出的文件格式后缀000001就代表1分区。

Mapper处理过后的键值对,是需要送到Reducer那边进行合并,具有相同的key的键值对会送到同一个Reducer上面。哪个key到哪个Reducer的分配过程,是由Partition决定的

里面只有一个方法getPartition()

@Public@Stablepublic abstract class Partitioner
{ public Partitioner() { } public abstract int getPartition(KEY var1, VALUE var2, int var3);}

 

输入(形参)是Map的结果对<key, value>和reducerTask的数目,输出(返回值)则是分配的Reducer(整数编号)。

就是指定某个Mapper输出的键值对到哪一个reducer上去。

系统缺省的Partitioner是HashPartitioner,它的实现是以key的hashcode对reducer的数值取模,得到对应的Reducer。这样就保证了相同的key值,分配到了同一个Reducer上。编号不大于指定的reducerTasks,0,1,2······(n-1)。

job.setPartitionerClass(JournalDataPartitioner.class);
job.setNumReduceTasks(CollectionUtils.isEmpty(branchIds) ? 3 : branchIds.size() + 1);

 partition类

private static class JournalDataPartitioner extends Partitioner
{ @Override public int getPartition(Text key, JournalTrxDataSet value, int arg2) { if (!CollectionUtils.isEmpty(branchIds)){ for (int i = 0; i < branchIds.size(); i++) { if (branchIds.get(i).equals(value.getBranchId())){ log.info(">>>>>> i = {}", i); return i + 1; } } return 0; }else { if ("706010101".equals(value.getBranchId())) { return 1; } else if ("706010106".equals(value.getBranchId())) { return 2; } return 0; } } }

 

转载于:https://www.cnblogs.com/xhy-shine/p/10643014.html

你可能感兴趣的文章
对jquery val 获取input 文本框值进行扩展
查看>>
MySQL (select_paren) union_order_or_limit 行为
查看>>
并发不是并行,它更好!
查看>>
nltk 自己训练模型例子
查看>>
间谍卫星的基础?YOLT——利用卷积神经网络对卫星影像进行多尺度目标检测(Part I)...
查看>>
jstl_开发第一个标签
查看>>
程序员哇,你想在下个情人节或者520脱单么?这个秘籍不能错过
查看>>
去不去O,谁说了算?
查看>>
PHP防SQL注入和XSS攻击
查看>>
在SHAREPOINT共享文档库中启用版本控制功能。
查看>>
Http 代理工具 实战 支持网页与QQ代理
查看>>
又见尾递归
查看>>
安装PyGraphics
查看>>
【COCOS2DX-LUA 脚本开发之四】使用TOLUA++编译PKG,从而创建自定义类让LUA脚本使用...
查看>>
开源大数据周刊-第16期
查看>>
遥感图像分类现状及存在的问题
查看>>
Commons Logging存在的ClassLoader问题详解
查看>>
双向链表的操作
查看>>
Flume-ng 高级功能配置
查看>>
我的友情链接
查看>>