目录
MR解析
Mapper
1)初始化
2)Map操作
3)清理
Mapper类型
步骤1:数据采样。
步骤2:Map阶段。
步骤3:Reduce阶段。
首页 数据库 mysql教程 深入解析MapReduce架构设计与实现原理–读书笔记(4)MR及Partitio

深入解析MapReduce架构设计与实现原理–读书笔记(4)MR及Partitio

Jun 07, 2016 pm 04:32 PM
mapreduce 原理 实现 架构 深入 解析 设计 读书

MR解析 Mapper/Reducer封装了应用程序的数据处理逻辑。 所有存储在底层分布式文件系统上的数据均要解释成key/value的形式。并交给MR中的map/reduce函数处理,产生另外一些key/value。 Mapper 1)初始化 Mapper继承了JobConfigurable接口。该config方法允许通

MR解析

Mapper/Reducer封装了应用程序的数据处理逻辑。
所有存储在底层分布式文件系统上的数据均要解释成key/value的形式。并交给MR中的map/reduce函数处理,产生另外一些key/value。

Mapper

1)初始化

Mapper继承了JobConfigurable接口。该config方法允许通过JobConf参数对Mapper进行初始化。

2)Map操作

MapReduce会通过InputFormat中RecordReader从InputSplit获取一个key/value对,并交给map()函数处理:
void map(K1 key,V2 value,OutputCollector output,Reporter reporter) throws IOException;

3)清理

Mapper通过继承Colseable获得close方法,用户可通过实现该方法对Mapper进行清理。

Mapper类型

ChainMapper 链式作业;IdentityMapper对于输入不进行任何处理,直接输出;InvertMapper 交换key/value位置;
RegexMapper 正则表达式字符串分割;TokenMapper 将字符串分割成若干个token,可用作wordCount的Mapper;
LongSumReducer:以key为组,对long类型的value求累加和。
新的Mapper由接口变为抽象类;不再继承JobConfigurable和Closeable,而是直接在类中添加了setup和cleanup两个方法进行初始化和清理工作。
将参数封装到Context对象中,接口具有良好扩展性。
去掉MapRunnable接口,在Mapper中添加run方法,以方便用户定制map()函数的调用方法。
新API中,Reducer遍历value的迭代器类型变为Iterable

void reduce(KEYIN key,Iteratable values,Context context) throws IOException,InterrupteException{for(VALUEIN value:values){	context.write((KEYOUT) key,(VALUEOUT) value);}}
登录后复制

Partitioner接口的设计与实现

Partitioner的作用是对Mapper产生的中间结果进行分片,以便将同一分组的数据交给同一个Reducer处理,它直接影响Reduce阶段的负载均衡。
只包含一个待实现的方法getPartition。该方法包含3个参数,均由框架自传入,前面2个参数是key/value,第三个参数numPartitions表示每个Mapper的分片数,
也就是Reducer的个数。

HashPartitioner和TotalOrderPartitioner。其中HashPartitioner是默认实现:public int getPartition(K2 key,V2 value,int numReduceTasks){return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks ;}
登录后复制

TotalOrderPartitioner提供了一种基于区间的分片方法,通常用在数据全排序中,归并排序。
在Map阶段,每个MapTask进行局部排序;在Reduce阶段,启动一个ReduceTask进行全局排序。由于作业只能有一个ReduceTask,因此会产生瓶颈。
TotalOrderPartitioner按照大小将数据分成若干个区间,并保证后一个区间的所有数据均大于前一个区间数据。

步骤1:数据采样。

在client端通过采样获取分片的分割点。
采样数据:b,abc,abd,bcd,abcd,efg,hii,afd,rrr,mnk
排序后:abc,abcd,abd,afd,b,bcd,efg,hii,mnk,rrr
如果有4个Reduce Task,则采样数据的四等分点为abd,bcd,mnk

步骤2:Map阶段。

Mapper可采用IdentityMapper直接将输入数据输出,TotalOrderPartitioner将步骤1中获取的分割点保存到trie树中以便快速定位任意一个记录所在的区间,这样每个
Map Task产生R个区间,且区间中间有序。

步骤3:Reduce阶段。

每个Reducer对分配到的区间数据进行局部排序,最终得到全排序数据。
TotalOrderPartitioner有2个典型应用实例;TeraSort和HBase。
HBase内部数据有序,Region之间也有序。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

华为手机如何实现双微信登录? 华为手机如何实现双微信登录? Mar 24, 2024 am 11:27 AM

华为手机如何实现双微信登录?

复古潮流!HMD与喜力联合推出翻盖手机:透明外壳设计 复古潮流!HMD与喜力联合推出翻盖手机:透明外壳设计 Apr 17, 2024 pm 06:50 PM

复古潮流!HMD与喜力联合推出翻盖手机:透明外壳设计

首发899元 中兴5G随身Wi-Fi U50S开售:最高网速500Mbps 首发899元 中兴5G随身Wi-Fi U50S开售:最高网速500Mbps Apr 26, 2024 pm 03:46 PM

首发899元 中兴5G随身Wi-Fi U50S开售:最高网速500Mbps

台电M50 Mini小平板来了:8.7寸IPS屏、5000mAh电池 台电M50 Mini小平板来了:8.7寸IPS屏、5000mAh电池 Apr 04, 2024 am 08:31 AM

台电M50 Mini小平板来了:8.7寸IPS屏、5000mAh电池

荣耀Magic V3首发AI离焦护眼技术:有效缓解近视发展 荣耀Magic V3首发AI离焦护眼技术:有效缓解近视发展 Jul 18, 2024 am 09:27 AM

荣耀Magic V3首发AI离焦护眼技术:有效缓解近视发展

如何在华为手机上实现微信分身功能 如何在华为手机上实现微信分身功能 Mar 24, 2024 pm 06:03 PM

如何在华为手机上实现微信分身功能

Spring Data JPA 的架构和工作原理是什么? Spring Data JPA 的架构和工作原理是什么? Apr 17, 2024 pm 02:48 PM

Spring Data JPA 的架构和工作原理是什么?

Win11新功能解析:跳过登录微软账户的方法 Win11新功能解析:跳过登录微软账户的方法 Mar 27, 2024 pm 05:24 PM

Win11新功能解析:跳过登录微软账户的方法

See all articles