search
HomeDatabaseMysql Tutorial深入解析MapReduce架构设计与实现原理–读书笔记(4)MR及Partitio
深入解析MapReduce架构设计与实现原理–读书笔记(4)MR及PartitioJun 07, 2016 pm 04:32 PM
mapreduceprincipleaccomplishArchitecturego deepparsedesignread

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之间也有序。

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Python编程解析百度地图API文档中的坐标转换功能Python编程解析百度地图API文档中的坐标转换功能Aug 01, 2023 am 08:57 AM

Python编程解析百度地图API文档中的坐标转换功能导读:随着互联网的快速发展,地图定位功能已经成为现代人生活中不可或缺的一部分。而百度地图作为国内最受欢迎的地图服务之一,提供了一系列的API供开发者使用。本文将通过Python编程,解析百度地图API文档中的坐标转换功能,并给出相应的代码示例。一、引言在开发中,我们有时会涉及到坐标的转换问题。百度地图AP

PHP8.0中的XML解析库PHP8.0中的XML解析库May 14, 2023 am 08:19 AM

随着PHP8.0的发布,许多新特性都被引入和更新了,其中包括XML解析库。PHP8.0中的XML解析库提供了更快的解析速度和更好的可读性,这对于PHP开发者来说是一个重要的提升。在本文中,我们将探讨PHP8.0中的XML解析库的新特性以及如何使用它。什么是XML解析库?XML解析库是一种软件库,用于解析和处理XML文档。XML是一种用于将数据存储为结构化文档

PHP 爬虫实战之获取网页源码和内容解析PHP 爬虫实战之获取网页源码和内容解析Jun 13, 2023 am 10:46 AM

PHP爬虫是一种自动化获取网页信息的程序,它可以获取网页代码、抓取数据并存储到本地或数据库中。使用爬虫可以快速获取大量的数据,为后续的数据分析和处理提供巨大的帮助。本文将介绍如何使用PHP实现一个简单的爬虫,以获取网页源码和内容解析。一、获取网页源码在开始之前,我们应该先了解一下HTTP协议和HTML的基本结构。HTTP是HyperText

深入了解HTTP状态码100:它代表什么意思?深入了解HTTP状态码100:它代表什么意思?Feb 20, 2024 pm 04:15 PM

深入了解HTTP状态码100:它代表什么意思?HTTP协议是现代互联网应用中最为常用的协议之一,它定义了浏览器和Web服务器之间进行通信所需的标准规范。在HTTP请求和响应的过程中,服务器会向浏览器返回各种类型的状态码,以反映请求的处理情况。其中,HTTP状态码100是一种特殊的状态码,用来表示"继续"。HTTP状态码由三位数字组成,每个状态码都有特定的含义

深入了解Linux ldconfig深入了解Linux ldconfigMar 14, 2024 pm 03:39 PM

Linuxldconfig是一个用于动态链接库管理的工具,可以帮助系统在运行时找到并加载共享库。它主要用于更新系统的动态链接器运行时连接库缓存,以保证程序可以正确链接到共享库。ldconfig主要用于两个方面:一是添加、删除共享库路径,并更新相关信息到配置文件中;二是根据配置文件中的路径重新生成动态连接库链接器的缓存。接下来将介绍如何使用ldconf

如何在PHP编程中使用XML?如何在PHP编程中使用XML?Jun 12, 2023 am 08:21 AM

XML是一种具备强大扩展性和可读性的数据交互格式,适用于各种编程语言。PHP也提供了丰富的XML解析和创建库,使其在处理XML数据方面非常方便。本文将向您介绍如何在PHP编程中使用XML。PHP中处理XML的基本函数在PHP中,有一些基本的XML处理函数,可以帮助您解析XML文件。以下是其中几个常见的函数:simplexml_load_file():该函数

什么是嵌入式Linux?深入了解什么是嵌入式Linux?深入了解Mar 20, 2024 pm 01:54 PM

标题:探究嵌入式Linux:什么是嵌入式Linux及其应用嵌入式系统通常指的是专为特定应用领域设计的计算机系统,它们通常用于嵌入在设备或系统中,以执行特定的功能或任务。嵌入式Linux则是在嵌入式系统中运行的Linux操作系统的版本。Linux作为一个开源的操作系统,广泛应用于嵌入式设备中,提供了稳定性、灵活性和强大的功能。1.嵌入式Linux的特点(1)

解析win7哪个系统好用解析win7哪个系统好用Jul 19, 2023 am 11:53 AM

  虽说如今市面上使用win10系统的用户越来越多,但这依然不影响win7系统拥有一批粉丝,毕竟很多人已经习惯win7的操作界面,那么问题来了,在众多的win7系统中,到底哪个版本最好最流畅呢?下面跟小编一起来看看吧。  win7哪个系统好用:  1.首先我们要知道一点,win7系统目前拥有简易版、家庭普通版、家庭高级版、专业版、企业版和旗舰版,这是我们目前主要还在使用的六个版本。  win7家庭普通版  这套系统算是windows7的简单版本,也只为用户提供基础的windows界面和功能,能够

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Tools

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.