设为首页 加入收藏

TOP

hadoop之shuffle------>分区机制Partitioner
2019-05-07 12:35:48 】 浏览:37
Tags:hadoop shuffle------> 分区 机制 Partitioner
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hongchenlingtian/article/details/53614098

一 、需求

用一个具体需求实例来说明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上


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Hadoop中的快速排序算法 下一篇hadoop体系框架的简单总结

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目