hadoop学习笔记---Partition分析
来源:互联网 发布:vsftpd 修改默认端口 编辑:程序博客网 时间:2024/06/07 06:51
Partition主要作用就是将map的结果发送到相应的reduce。这就对partition有两个要求:
1)均衡负载,尽量的将工作均匀的分配给不同的reduce。
2)效率,分配速度一定要快。
1. Partitioner是partitioner的基类,如果需要定制partitioner也需要继承该类。
2. HashPartitioner是mapreduce的默认partitioner。计算方法是
which reducer=(key.hashCode() & Integer.MAX_VALUE) % numReduceTasks,得到当前的目的reducer。
3. BinaryPatitioner继承于Partitioner< BinaryComparable ,V>,是Partitioner的偏特化子类。该类提供leftOffset和rightOffset,在计算which reducer时仅对键值K的[rightOffset,leftOffset]这个区间取hash。
Which reducer=(hash & Integer.MAX_VALUE) % numReduceTasks
4. KeyFieldBasedPartitioner也是基于hash的个partitioner。和BinaryPatitioner不同,它提供了多个区间用于计算hash。当区间数为0时KeyFieldBasedPartitioner退化成HashPartitioner。
5. TotalOrderPartitioner这个类可以实现输出的全排序。不同于以上3个partitioner,这个类并不是基于hash的。在下一节里详细的介绍totalorderpartitioner。
TotalOrderPartitioner
每一个reducer的输出在默认的情况下都是有顺序的,但是reducer之间在输入是无序的情况下也是无序的。如果要实现输出是全排序的那就会用到TotalOrderPartitioner。
要使用TotalOrderPartitioner,得给TotalOrderPartitioner提供一个partition file。这个文件要求Key (这些key就是所谓的划分)的数量和当前reducer的数量-1相同并且是从小到大排列。对于为什么要用到这样一个文件,以及这个文件的具体细节待会 还会提到。
TotalOrderPartitioner对不同Key的数据类型提供了两种方案:
1) 对于非BinaryComparable(参考附录A)类型的Key,TotalOrderPartitioner采用二分发查找当前的K所在的index。
例如reducer的数量为5,partition file 提供的4个划分为【2,4,6,8】。如果当前的一个key value pair 是<4,”good”>利用二分法查找到index=1,index+1=2那么这个key value pair将会发送到第二个reducer。如果一个key value pair为<4.5, “good”>那么二分法查找将返回-3,同样对-3加1然后取反就是这个key value pair 将要去的reducer。
对于一些数值型的数据来说,利用二分法查找复杂度是o(log (reducer count)),速度比较快。
2) 对于BinaryComparable类型的Key(也可以直接理解为字符串)。字符串按照字典顺序也是可以进行排序的。这样的话也可以给定一些划分,让不同的字符串key分配到不同的reducer里。这里的处理和数值类型的比较相近。
例如reducer的数量为5,partition file 提供了4个划分为【“abc”, “bce”, “eaa”, ”fhc”】那么“ab”这个字符串将会被分配到第一个reducer里,因为它小于第一个划分“abc”。
- hadoop学习笔记---Partition分析
- nutch-1.7-学习笔记(2)-org.apache.nutch.crawl.Generator.java-关于Hadoop的partition
- nutch-1.7-学习笔记(2)-org.apache.nutch.crawl.Generator.java-关于Hadoop的partition
- Hadoop学习笔记-WordCount源码分析
- Hadoop数据分析平台学习笔记1
- hadoop学习笔记(九)——hadoop日志分析系统
- hadoop Partition
- Hadoop源代码分析(mapreduce.lib.partition/reduce/output)
- Hadoop源代码分析(mapreduce.lib.partition/reduce/output)
- Hadoop源代码分析(mapreduce.lib.partition/reduce/output)
- Hadoop第10天-03.Map过程分析-combiner-partition
- Kafka 学习笔记(十一)关于Partition
- Partition分析
- Hadoop学习笔记(六)启动Shell分析
- Hadoop学习笔记(八)MapReduce深入分析
- Hadoop学习笔记(九)HDFS架构分析
- Hadoop学习笔记—20.网站日志分析项目案例
- 大数据学习笔记:启动脚本分析,hadoop.cmd
- 搭建服务器
- 显示费多少公司反对感豆腐干风格反对感和
- 解决方案-在Mac系统中,Eclipse无法导入含有中文路径的工程
- TIME_WAIT重用与RFC1337
- cocos2d-x 3.0学习——入门、创建菜单
- hadoop学习笔记---Partition分析
- 常用mysql
- Android 开发代码复用
- Hibernate主键生成策略总结
- android中requestFocus 以及与setFocusable的区别
- POJWho Gets the Most Candies?
- Import Prject时Gradle project sync failed
- Linux, tcpdump命令详解
- 狗狗先天遗传性格如何改变