hadoop之shuffle------>分区机制Partitioner

一 、需求

   用一个具体需求实例来说明Partitioner分区机制

例如: 将下列手机号进行分区,135,136,137,138,139等开头的手机号放到一个文件,150,159等开头的手机号放到一个文件,182,183等开头的手机号放到一个文件,其他手机号放到一个文件


手机号      上行流量 下行流量 总流量
13480253104 180 180 360
13502468823 7335 110349 117684
13560436666 1116 954 2070
13560439658 2034 5892 7926
13602846565 1938 2910 4848
13660577991 6960 690 7650
13719199419 240 0 240
13726230503 2481 24681 27162
13726238888 2481 24681 27162
13760778710 120 120 240
13826544101 264 0 264
13922314466 3008 3720 6728
13925057413 11058 48243 59301
13926251106 240 0 240
13926435656 132 1512 1644
15013685858 3659 3538 7197
15920133257 3156 2936 6092
15989002119 1938 180 2118
18211575961 1527 2106 3633
18320173382 9531 2412 11943
84138413 4116 1432 5548

二 、分区分析

1.执行位置:

      Partitioner在Map之后,Reduce之前执行,接收Map的输出k2,v2,然后按照业务逻辑进行分区

2.实现分区的步骤:


2.1 先分析一下具体的业务逻辑,确定大概有多少个分区,本需求明显需要分成4个区
2.2 首先书写一个类,它要继承org.apache.hadoop.mapreduce.Partitioner这个类
2.3 重写public int getPartition这个方法,根据具体逻辑,读数据库或者配置返回相同的数字
2.4 在main方法中设置Partioner的类,job.setPartitionerClass(DataPartitioner.class);

2.5 设置Reducer的数量,job.setNumReduceTasks(4);


三 、代码实现

  1.在main方法中设置Partioner的类和Reducer的数量

  

  2.写一个类,它要继承Partitioner这个类


四 、结果实现


 发现分成四个文件,每个文件对应一个Reducer

四 、Partitioner原理解析


        如图,假设有三台机器,每台机器上有一个NodeManager,DataNode,启动一个YarnChild(资源好,可以启动多个YarnChild)实现Map(红色),现在要分成两个Reducer(黑色)上去计算。实际上在YarnChild上每个Map会先进行Partitioner分区处理,将数据分好区,通过getPartition得到区的号码,是0区的会跑到0的那个Reducer上,是1区的会跑到1的那个Reducer上


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值