|NO.Z.00035|——————————|BigDataEnd|——|Hadoop&MapReduce.V08|——|Hadoop.v08|MapReduce原理剖析之自定义分区及ReduceTask数|自定义分区案例.v01|

一、MapReduce原理剖析之自定义分区及ReduceTask数量
### --- MapReduce原理剖析之自定义分区及ReduceTask数量

~~~     [MapReduce原理剖析之自定义分区及ReduceTask数量] 
~~~     [MapReduce原理剖析之自定义分区案例]  
### --- MapReduce的分区与reduceTask的数量

~~~     在MapReduce中,通过我们指定分区,会将同一个分区的数据发送到
~~~     同一个reduce当中进行处理(默认是key相同去往同个分区),例如我们为了数据的统计,
~~~     我们可以把一批类似的数据发送到同一个reduce当中去,在同一个reduce当中统计相同类型的数据,
~~~     如何才能保证相同key的数据去往同个reduce呢?只需要保证相同key的数据分发到同个分区即可。
~~~     结合以上原理分析我们知道MR程序shuffle机制默认就是这种规则!!
二、分区源码
### --- 分区源码

~~~     翻阅源码验证以上规则,MR程序默认使用的HashPartitioner,保证了相同的key去往同个分区!!

一、自定义分区
### --- 自定义分区

~~~     实际生产中需求变化多端,默认分区规则往往不能满足需求,
~~~     需要结合业务逻辑来灵活控制分区规则以及分区数量!!
二、如何制定自己需要的分区规则?
### --- 具体步骤

~~~     自定义类继承Partitioner,重写getPartition()方法
~~~     在Driver驱动中,指定使用自定义Partitioner
~~~     在Driver驱动中,要根据自定义Partitioner的逻辑设置相应数量的ReduceTask数量。
### --- 需求 按照不同的appkey把记录输出到不同的分区中
~~~     原始日志格式

001 001577c3 kar_890809 120.196.100.99 1116 954 200
日志id 设备id appkey(合作硬件厂商) 网络ip 自有内容时长(秒) 第三方内 容时长(秒) 网络状态码
~~~     # 输出结果

根据appkey把不同厂商的日志数据分别输出到不同的文件中
一、编程实现案例
### --- 需求分析

~~~     面对业务需求,结合mr的特点,来设计map输出的kv,以及reduce输出的kv数据。
~~~     一个ReduceTask对应一个输出文件,
~~~     因为在shuffle机制中每个reduceTask拉取的都是某一个分区的数据,一个分区对应一个输出文件。
~~~     结合appkey的前缀相同的特点,同时不能使用默认分区规则,而是使用自定义分区器,
~~~     只要appkey前缀相同则数据进入同个分区。
### --- 整体思路

~~~     # Mapper
读取一行文本,按照制表符切分
解析出appkey字段,其余数据封装为PartitionBean对象(实现序列化Writable接口)
设计map()输出的kv,key-->appkey(依靠该字段完成分区),PartitionBean对象作为Value输出
~~~     # Partition
自定义分区器,实现按照appkey字段的前缀来区分所属分区
~~~     # Reduce
reduce()正常输出即可,无需进行聚合操作
~~~     # Driver
在原先设置job属性的同时增加设置使用自定义分区器
注意设置ReduceTask的数量(与分区数量保持一致)

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

 

posted on   yanqi_vip  阅读(20)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示