MapReduce Partition解析
Map的结果,会通过partition分发到Reducer上,reducer操作过后会进行输出。输出的文件格式后缀000001就代表1分区。
Mapper处理过后的键值对,是需要送到Reducer那边进行合并,具有相同的key的键值对会送到同一个Reducer上面。哪个key到哪个Reducer的分配过程,是由Partition决定的
里面只有一个方法getPartition()
@Public
@Stable
public abstract class Partitioner<KEY, VALUE> {
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<Text, JournalTrxDataSet> {
@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;
}
}
}
MapReduce Partition解析的更多相关文章
- Mapreduce 框架解析
MapReduce过程解析 一.客户端 Map-Reduce的过程首先是由客户端提交一个任务开始的. public static RunningJob runJob(JobConf job) thro ...
- Hadoop — MapReduce原理解析
1. 概述 Mapreduce是一个分布式运算程序的编程框架,是用户开发"基于hadoop的数据分析应用"的核心框架: Mapreduce核心功能是将用户编写的业务逻辑代码和自带默 ...
- MapReduce编程解析
MapReduce编程模型之案例 wordcount 输入数据 atguigu atguiguss sscls clsjiaobanzhangxuehadoop 输出数据 atguigu 2banzh ...
- Hadoop中Partition解析
1.解析Partition Map的结果,会通过partition分发到Reducer上,Reducer做完Reduce操作后,通过OutputFormat,进行输出,下面我们就来分析参与这个过程的类 ...
- [转] hadoop MapReduce实例解析-非常不错,讲解清晰
来源:http://blog.csdn.net/liuxiaochen123/article/details/8786715?utm_source=tuicool 2013-04-11 10:15 4 ...
- 批处理引擎MapReduce程序设计
批处理引擎MapReduce程序设计 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MapReduce API Hadoop同时提供了新旧两套MapReduce API,新AP ...
- 【Hadoop】mapreduce环形缓冲区
mapreduce过程解析 数据在map中怎么写入磁盘? 数据:经过map逻辑处理过后的数据(key,value)- 磁盘:本地磁盘 环形缓冲区 1.为什么要环形缓冲区? 答:使用环形缓冲区,便于写入 ...
- hadoop jobhistory解析工具汇总
1. White Elephant是LinkedIn开源的一套Hadoop 作业日志收集器和展示器,使用mapreduce作业解析jobhistory日志,得到每个用户使用的资源情况,并通过网页展示. ...
- hadoop下跑mapreduce程序报错
mapreduce真的是门学问,遇到的问题逼着我把它从MRv1摸索到MRv2,从年前就牵挂在心里,连过年回家的旅途上都是心情凝重,今天终于在eclipse控制台看到了job completed suc ...
随机推荐
- day21(1)---python的内存管理
垃圾回收机制: 不能被程序访问到的数据,就称之为垃圾. 引用计数:引用计数是用来记录值的内存地址被记录的次数的 每一次对值地址的引用都可以使得该值的引用计数+1 每一次对值地址的释放都可以使得该值的引 ...
- 基础数据类型:整型int、布尔值bool、字符串str、与for循环
1.整型 int() p2 long 长整型 p3 全部都是整型 2.布尔值 bool() True --- int() int(True) int() --- True bool(int) 注意点: ...
- matlab读取cvs文件的几种方法
matlab读取CVS文件的几种方法: 1,实用csvread()函数 csvread()函数有三种使用方法: 1.M = csvread('filename')2.M = csvread('fi ...
- 如何将Bitcoin比特币区块链数据导入关系数据库
在接触了比特币和区块链后,我一直有一个想法,就是把所有比特币的区块链数据放入到关系数据库(比如SQL Server)中,然后当成一个数据仓库,做做比特币交易数据的各种分析.想法已经很久了,但是一直没有 ...
- Scrapy中选择器的用法
官方文档:https://doc.scrapy.org/en/latest/topics/selectors.html Using selectors Constructing selectors R ...
- Insertion Sort 与 Merge Sort的性能比较(Java)
public static void main(String[] args) { Scanner input = new Scanner(System.in); int n = input.nextI ...
- 爬虫 BeatifulSoup 模块
BeatifulSoup 模块 介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库 安装 pip install beautifulsoup4 解析器下载 ...
- java实现sftp客户端上传文件夹的功能
使用的jar: <dependencies> <dependency> <groupId>jsch</groupId> <artifactId&g ...
- redis的list取出数据方式速度测试
redis测试: package business; import java.io.BufferedReader; import java.io.File; import java.io.FileIn ...
- 走进Java中的持有对象(容器类)之一 容器分类
Java容器可以说是增强程序员编程能力的基本工具,本系列将带您深入理解容器类. 容器的用途 如果对象的数量与生命周期都是固定的,自然我们也就不需要很复杂的数据结构. 我们可以通过创建引用来持有对象,如 ...