hadoop排序 -- 全排序
目录
一、关于Reducer全排序
1.1、 什么叫全排序
1.2、 分区的标准是什么
二、全排序的三种方式
2.1、 一个Reducer
2.2、 自定义分区函数
2.3、 采样
一、关于Reducer全排序
1.1、什么叫全排序?
在所有的分区(Reducer)中,KEY都是有序的:
- 正确举例:如Reducer分区1中的key是1、3、4,分区2中的key是5、8、9
- 错误举例:如Reducer分区1中的key是1、3、4,分区2中的key是、7、9
1.2、数据分区的标准是什么?
默认的分区方式是根据mapper后的key的hash值,除以Reducer的分区数量,取其余数判定;例:
- 某key的hash值是999,此时有3个分区(Reducer),则999 % 3 = 0;则该key和其对应value会分在第一个区(同理,当余数为1,2时会分在对应的另外两个区)。
注意:若key的类型是Text类(或IntWritable等)的,则计算的是Text类型的key的hash值,而非通过Text获取到的String(或int等)类型的hash值。
也可自定义分区的判定方式,见下2.2、自定义分区函数
二、全排序的三种方式
- 一个Reduce
- 自定义分区函数
- 采样
2.1、一个Reduce
只有一个Reduce分区,自然是全排序效果
2.2、自定义分区函数
- 创建一个继承Partitioner的类,如:Partition
- 重写其”getPartition“方法,作为判断分区的依据
- 在main的job中将其加入:job.setPartitionerClass(Partition.class);
以随机分区为例,伪代码如下:
public class Partition extends Partitioner <Text,IntWritable>{
@Override
public int getPartition(Text text, IntWritable intWritable, int numPartitions) {
Random r = new Random();
//根据分区的数量(numPartitions),获取一个随机值返回,返回的值作为Key判断分区的依据
int i = r.nextInt(numPartitions);
return i;
}
}
public class RandomAPP {
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
......
//放判断放入分区的方式(随机放入)
job.setPartitionerClass(Partition.class);
......
//等待执行MapperReducer
job.waitForCompletion(true);
}
}
2.3、采样:TotalOrderPartition
- RandomSampler:随机采样 ,性能差,适合乱序数据
- IntervalSampler:间隔采样 ,性能较好,适合有序数据
- SplitSampler:切片采样 ,性能较好,适合有序数据
以随机采样为例,伪代码如下:
注:以下需要放在App中设置配置文件的后面
//在App中指定分区函数类
job.setPartitionerClass(TotalOrderPartition.class); //设置文件的写入路径
TotalOrderPartition.setPartitionFile(job.getConfiguration(),new Path("E:/par.dat")); /**
* 初始化采样器
* RandomSampler 采用随机采样的方式
* freq 每个Key被选中的概率 freq x key > 分区数
* numSamples 需要的样本数 numSamples > 分区数
* maxSplitsSampled 文件最大切片数 maxSplitsSampled > 当前切片数
*/
InputSampler.RandomSampler = new InputSampler.RandomSampler(freq, numsamples,maxsplitsSampled ); //写入采样数据
InputSampler.writePartitionFile(job,sampler);
Over
hadoop排序 -- 全排序的更多相关文章
- Hadoop学习笔记: 全排序
在Hadoop中实现全排序有如下三种方法: 1. 只使用一个reducer 2. 自定义partitioner 3. 使用TotalOrderPartitioner 其中第一种方法显然违背了mapre ...
- Hadoop的partitioner、全排序
按数值排序 示例:按气温字段对天气数据集排序问题:不能将气温视为Text对象并以字典顺序排序正统做法:用顺序文件存储数据,其IntWritable键代表气温,其Text值就是数据行常用简单做法:首先, ...
- MapReduce --全排序
MapReduce全排序的方法1: 每个map任务对自己的输入数据进行排序,但是无法做到全局排序,需要将数据传递到reduce,然后通过reduce进行一次总的排序,但是这样做的要求是只能有一个red ...
- 2 weekend110的hadoop的自定义排序实现 + mr程序中自定义分组的实现
我想得到按流量来排序,而且还是倒序,怎么达到实现呢? 达到下面这种效果, 默认是根据key来排, 我想根据value里的某个排, 解决思路:将value里的某个,放到key里去,然后来排 下面,开始w ...
- Hadoop之WritableComprale 排序
Hadoop之WritableComprale 排序 Hadoop只对key进行排序 排序是 MapReduce 框架中最重要的操作之一.Map Task 和 Reduce Task 均会对数据(按照 ...
- [大数据相关] Hive中的全排序:order by,sort by, distribute by
写mapreduce程序时,如果reduce个数>1,想要实现全排序需要控制好map的输出,详见Hadoop简单实现全排序. 现在学了hive,写sql大家都很熟悉,如果一个order by解决 ...
- Hadoop中的排序和连接
MapReduce的全排序 主要是为了保证分区排序,即第一个分区的最后一个Key值小于第二个分区的第一个Key值 与普通的排序仅仅多一个自定义分区类MyPartitioner见自己所写的实验 (设置一 ...
- hive中的全排序
写mapreduce程序时,如果reduce个数>1,想要实现全排序需要控制好map的输出 现在学了Hive,写sql大家都很熟悉,如果一个order by解决了全排序还用那么麻烦写mapred ...
- C#字符串全排序
排列:从n个元素中任取m个元素,并按照一定的顺序进行排列,称为排列: 全排列:当n==m时,称为全排列: 比如:集合{ 1,2,3}的全排列为: { 1 2 3} { 1 3 2 } { 2 1 3 ...
随机推荐
- August 05th 2017 Week 31st Saturday
All endings are beginnings, we just don't know it at the time. 所有的结局都是新的开始,只是当时我们不知道而已. Several mont ...
- 枚举类型与位域枚举Enum
一.概述 定义一个值类型,其中包含固定值集合.枚举类型变量可以是此集合中的任意一个或多个值.枚举使用enum关键字来声明,与类同级.枚举本身可以有修饰符,但枚举的成员始终是公共的,不能有访问修饰符.枚 ...
- markdown编辑器安装
打算使用MarkDown了,打算整理自己的知识了. 多年以前,喜欢将自己看到好东西,转载在博客.或者将遇到过的问题以及解决方案,记录在博客.06毕业后为了生活折腾,Tom网上的博客无暇东顾,等稳定闲下 ...
- PhoneGap 白名单安全机制 navigator.app 加载外部页面返回以及退出介绍
一. Phonegap 白名单安全机制 Phonegap应用的页面大多存在于本地,但有时需要加载外部的Web页面到应用内置的浏览器 视图中已完成特定的应用功能,出于安全性考虑,PhoneGap 设立了 ...
- Spring Security 自定义配置(1)
@Configuration @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapte ...
- 2018-2019-2 网络对抗技术 20165322 Exp2 后门原理与实践
2018-2019-2 网络对抗技术 20165322 Exp2 后门原理与实践 目录 实验准备 后门概念 常用后门工具 实验内容与步骤 使用netcat获取主机操作Shell,cron启动 使用so ...
- 给trac的ticket添加提交时字段验证
我们在项目管理中使用了trac系统,并且对于ticket添加了以下自定义字段并且对它们的格式都有一定要求: svn版本号:格式为 r1234.多个版本号之间使用半角逗号隔开.如:r1234,r5678 ...
- [19/04/22-星期一] GOF23_创建型模式(单例模式)
一.概念 <Design Patterns: Elements of Reusable Object-Oriented Software>(即后述<设计模式>一书),由 Eri ...
- [Python 多线程] Barrier (十一)
Barrier 栅栏,也叫屏障.可以想象成路障.道闸. Python 3.2引入的新功能. 构造方法: threading.Barrier(parties, action=None, timeout= ...
- Python 多线程 线程安全、daemon简介 (四)
线程安全 只能在Winodws下的ipython中演示,Python命令行.Pycharm.Mac下的ipython都演示不出效果 import threading def worker(): for ...