MapReduce学习

news2024/11/26 22:40:00

目录

7.3 MapReduce工作流程

 7.3.1 工作流程概述

 7.3.2 MapReduce各个执行阶段

 7.3.3 Shuffle过程详解

1. Shuffle过程简介(过程分为Map端的操作和Reduce端的操作)

2、Map端的Shuffle过程:

3、在Reduce端的Shuffle过程

7.4  实例分析:WordCount

7.5 MapReduce的具体应用

小结


7.3 MapReduce工作流程

大规模数据集的处理包括:分布式存储和分布式计算两个核心环节。

1)谷歌使用GFS实现分布式数据存储,用MapReduce实现分布式计算;

2Hadoop使用HDFS实现分布式数据存储,用Hadoop MapReduce实现分布式计算。

 7.3.1 工作流程概述

 7.3.2 MapReduce各个执行阶段

HDFS 以固定大小的block 为基本单位存储数据,而对于MapReduce 而言,其处理单位是splitsplit 是一个逻辑概念,它只包含一些元数据信息,比如数据起始位置、数据长度、数据所在节点等。划分方法完全由用户自己决定。

Map 任务的数量: Hadoop 为每个 split 创建一个 Map 任务, split 的多少决定了 Map 任务的数目。大多数情况下,理想的分片大小是一个 HDFS Reduce 任务的数量
优的 Reduce 任务个数取决于集群中可用的 reduce 任务槽 (slot) 的数目 通常设置比 reduce 任务槽数目稍微小一些的 Reduce 任务个数(这样可以预留一些系统资源处理可能发生的错误

 7.3.3 Shuffle过程详解

ShuffleMapReduce整个工作流程的核心环节。

1. Shuffle过程简介(过程分为Map端的操作和Reduce端的操作)

Shuffle是对Map任务输出结果进行分区、排序、合并、归并等处理并交给Reduce的过程

2Map端的Shuffle过程:

1)输入数据和执行map任务

输入数据一般保存在分布式文件系统的数据块中,比如HDFS中。Map任务接收<keyvalue>作为输入,然后转换为多个<keyvalue>输出。

2)写入缓存

每个Map任务分配一个缓存,Map的输出先放入缓存,累计后,一次性批量写入磁盘,减小对磁盘的I/O开销。多次写入需要多次寻址,一次写入需一次寻址即可。

3)溢写(分区、排序和合并)

MapReduce的缓存容量有限,默认100MB,一旦占满,就启动溢写(单独后台线程,不影响缓存写入),一次性写入磁盘,并清空缓存。但为让缓存一直有可用空间,可设置溢写比例,比如0.8100内存,80M时就启动溢写过程,剩下的20MMap继续写入。

3)溢写(分区、排序和合并)

分区:缓存中的数据写入磁盘前,先分区。缓存中的数据是<key,value>键值对,通过Partitioner接口对这些键值对进行分区,默认的分区方式:采用hash函数对key进行哈希后再用Reduce任务的数量进行取模,表示为hashkeymod R,这样就可以把Map的输出结果均匀的分配给Reduce任务区并行处理。也允许用户通过重载Partitioner接口来定义分区方式

3)溢写(分区、排序和合并)

排序(默认):每个分区内的键值对,后台线程会根据key,进行内存排序(Sort)。

合并(可选):用户事先没有定义Combiner函数,就不用进行合并操作。如果定义了,会执行合并操作,从而减少了需要溢写到磁盘的数据量。“合并”是指具有相同key<keyvalue>value加起来。如:<a,1> , <a,1> => <a,2> 发生在Map端,有别与ReduceCombiner的输出是Reduce的输入,Combiner不能改变Reduce任务最终的计算结果。

4)文件归并

Map任务全部结束前,系统会对所有溢写文件进行归并(Merge),生成一个大的溢写文件(键值对都经过分区和排序)。

“归并”指对于具有相同key的键值对归并成一个新的键值对。如<a,1> , <a,1> => <a, <1,1>>。若干个相同key键值对<k1,v1>,<k1,v2>…<k1,vn>会被归并为一个新的键值对<k1,<v1,v2,v3,…vn>>

进行归并时,如磁盘生成的溢写文件数量超过参数min.num.spills.for.combine的值时(默认是3,用户可以修改这个值),就可再次运行Combiner,对数据进行合并,减少磁盘的数据量。如果写磁盘中只有一两个溢写文件,就不会运行Combiner,因为执行合并操作本身也有代价

经过(1)、(2)、(3)、(4),MapShuffle过程全部完成,最终形成一个大文件(被分区的),不同分区被送到不同的Reduce任务进行并行处理,JobTracker会一直进行Map任务检测,当一个任务完成,会立刻通知Reduce及时领取数据,开始ReduceShuffle过程。

合并(Combine)和归并(Merge)的区别:

两个键值对<“a”,1><“a”,1>,如果合并,会得到<“a”,2>,如果归并,会得到<“a”,<1,1>>

3Reduce端的Shuffle过程

1领取数据Map端的Shuffle结束后,所有Map的输出结果都保存在Map机器的本地磁盘上,文件都是被分区的,不同的分区会被发送到不同的Reduce任务进行并行处理每个Reduce任务会不断地通过RPCJobTracker询问Map任务是否已经完成;JobTracker检测到一个Map任务完成后,就会通知相关的Reduce任务来"领取"数据;Reduce收到通知,就会从Map任务所在机器把属于自己的分区数据领取到本地磁盘。一般是Reduce任务使用多个线程通过是多个Map机器领回数据

2归并数据Map端领取的数据会被存放在Reduce端的缓存中,如果缓存被占满,就会溢写到磁盘。缓存数据来自不同Map机器,会存在很多合并(Combiner)的键值对,当溢写启动时,相同key的键值对会被归并,如用户定义Combiner,则归并后的数据可以执行合并操作,减少写入磁盘数据量。一次溢写,生成一个溢写文件,溢写结束,磁盘上存在多个溢写文件。   Map端数据都被领回时,多个溢写文件会被归并成一个大文件,归并时会进行排序。如果数据量很少就不需要进行溢写,直接在内存中执行归并操作

了解把磁盘多个溢写文件归并成一个大文件可能需要执行多轮归并操作,每轮归并操作可以归并文件数量是由参数io.sort.factor的值来控制的(默认是10,可以修改)。假设磁盘中生成50个溢写文件,每轮可以归并10个溢写文件,则需要经过5轮归并,得到5个归并后的大文件。

2)把数据输入给Reduce任务:Reduce任务会执行Reduce函数中定义的各种映射,输出最终结果,保存在分布式文件系统中(比如GFSHDFS

了解磁盘多轮归并后得到若干个大文件,不会归并成一个新的大文件,而是直接输入给Reduce任务,可减少磁盘读写开销

7.4  实例分析:WordCount

程序

WordCount

输入

一个包含大量单词的文本文件

输出

文件中每个单词及其出现次数(频数),并按照单词字母顺序排序,每个单词和其频数占一行,单词和频数之间有间隔

实例:

输入

输出

Hello World

Hello Hadoop

Hello MapReduce

Hadoop 1

Hello 3

MapReduce 1

World 1

7.5 MapReduce的具体应用

MapReduce可以很好地应用于各种计算问题

Ø 关系代数运算(选择、投影、并、交、差、连接)
Ø 分组与聚合运算
Ø 矩阵 - 向量乘法
Ø 矩阵 乘法

小结

本章介绍了 MapReduce 编程模型的相关知识。 MapReduce 将复杂的、运行于大规模集群上的并行计算过程高度地抽象到了两个函数: Map Reduce ,并极大地方便了分布式编程工作,编程人员在不会分布式并行编程的情况下,也可以很容易将自己的程序运行在分布式系统上,完成海量数据集的计算
②MapReduce执行的全过程包括以下几个主要阶段:从分布式文件系统读入数据、执行Map任务输出中间结果、通过 Shuffle阶段把中间结果分区排序整理后发送给Reduce任务、执行Reduce任务得到最终结果并写入分布式文件系统。在这几个阶段中,Shuffle阶段非常关键,必须深刻理解这个阶段的详细执行过程
MapReduce 具有广泛的应用,比如关系代数运算、分组与聚合运算、矩阵 - 向量乘法、矩阵乘法等
本章最后以一个单词统计程序为实例,详细演示了如何编写 MapReduce 程序代码以及如何运行 程序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1875091.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Drag Select Compose:实现多平台图片多选功能的利器

Drag Select Compose:实现多平台图片多选功能的利器 在现代移动应用开发中,图片多选功能是一个常见且实用的需求。而实现这种功能可能涉及到复杂的手势处理和状态管理。今天,我将介绍一款强大的Compose多平台库——Drag Select Compose,它能够轻松实现类似于Google Photos…

[推荐]有安全一点的网贷大数据信用查询网站吗?

在互联网金融日益发展的今天&#xff0c;网贷大数据查询网站成为了许多人申贷前的必备工具。随着使用这些网站的人群越来越多&#xff0c;安全问题也逐渐浮出水面。最近&#xff0c;就有许多用户反馈自己的个人信息在网贷大数据查询网站上被泄露。为了解决这一问题&#xff0c;…

日立EX-PROII+系列全新升级,智慧随心控畅享新生活

随着科技的进步&#xff0c;各种智能家电也开始走入人们的生活&#xff0c;而在这个领域&#xff0c;日立用技术创新生活&#xff0c;不断为新时代注入活力&#xff0c;推出日立 EX-PROII系列家用净化中央空调&#xff0c;贯彻“小身材&#xff0c;大能量”核心设计理念&#x…

STM32第十一课:ADC采集光照

文章目录 需求一、ADC概要二、实现流程1.开时钟&#xff0c;分频&#xff0c;配IO2.配置ADC工作模式3.配置通道4.复位校准5.数值的获取 三、需求的实现总结 需求 通过ADC转换实现光照亮度的数字化测量&#xff0c;最后将实时测量的结果打印在串口上。 一、ADC概要 ADC全称是A…

小柴冲刺软考中级嵌入式系统设计师系列一、计算机系统基础知识(1)嵌入式计算机系统概述

flechazohttps://www.zhihu.com/people/jiu_sheng 小柴冲刺嵌入式系统设计师系列总目录https://blog.csdn.net/qianshang52013/article/details/139975720?spm1001.2014.3001.5501 根据IEEE&#xff08;国际电气电子工程师协会&#xff09;的定义&#xff0c;嵌入式系统是&q…

lvs+上一章的内容

书接上回这次加了个keepalived 一、集群与分布式 1.1 集群介绍 **集群&#xff08;Cluster&#xff09;**是将多台计算机组合成一个系统&#xff0c;以解决特定问题的计算机集合。集群系统可以分为以下三种类型&#xff1a; **LB&#xff08;Load Balancing&#xff0c;负载…

rtthread stm32h743的使用(十一)spi设备使用

我们要在rtthread studio 开发环境中建立stm32h743xih6芯片的工程。我们使用一块stm32h743及fpga的核心板完成相关实验&#xff0c;核心板如图&#xff1a; 1.建立新工程&#xff0c;选择相应的芯片型号及debug引脚及调试器 2.编译下载&#xff0c;可以看到串口打印正常 3.…

SOAP vs REST介绍

SOAP&#xff08;简单对象访问协议&#xff09; 定义&#xff1a;SOAP是一种基于XML的通信协议&#xff0c;用于在网络中交换结构化信息&#xff0c;特别是在分布式环境和需要中介&#xff08;如网关或防火墙&#xff09;的环境中。它通过HTTP、SMTP等多种传输协议传输信息&…

APP项目测试 之 APP功能测试

1. APP测试流程 需求评审——计划编写——用例设计——用例执行——缺陷管理——测试报告 2. APP测试内容 功能测试 专项测试 性能测试 3.注册测试点扩充 4.登录测试点扩充 5.购物车测试点扩充 6.搜索测试点扩充 7.支付测试点扩充 8.评论测试点扩充 未完待续。…

Java校园跑腿小程序校园代买帮忙外卖源码社区外卖源码

&#x1f525;校园跑腿与外卖源码揭秘&#x1f525; &#x1f680; 引言&#xff1a;为何需要校园跑腿与外卖源码&#xff1f; 在快节奏的校园生活里&#xff0c;学生们对于便捷、高效的服务需求日益增长。校园跑腿和外卖服务成为了解决这一需求的热门选择。然而&#xff0c;…

新版周易测算系统源码 去授权完美运行

已经去掉授权可以完美运行 更新了三个模板市面上都是几千几千的卖 更新了三套首页新ui 自己后台切换就行 源码大小&#xff1a;338M 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/89447857 更多资源下载&#xff1a;关注我.

深入解析Android的Sound Trigger中间件架构

深入解析Android的Sound Trigger中间件架构 在现代移动设备中,应用程序对声音事件的检测需求越来越多,如热词检测和背景音乐识别等。为了实现低功耗和隐私敏感的声音事件检测,Android引入了Sound Trigger中间件。本文将详细介绍Sound Trigger的架构、工作原理以及其在不同层…

JavaWeb——MySQL:事务的简单学习

前面学习完了数据库增删查改的SQL语言&#xff0c;约束&#xff0c;数据库设计&#xff0c;以及多表查询&#xff0c;再学完事务就达到初级工程师的水平了。 6. 事务 6.1 概念 事务类似于编程语言的方法&#xff0c;包含一组SQL指令。 事务是不可分割的&#xff1b; 该指令步…

十四、Maven(2)

&#x1f33b;&#x1f33b;目录 一、maven项目的目录结构&#xff1f;---约定二、在创建maven项目的时候三、依赖四、依赖的传递性五、依赖的排除性六、继承---项目结构的设计七、聚合---项目的设计方式 一、maven项目的目录结构&#xff1f;—约定 Maven是自动化构建工具&am…

java用pdf.js在线预览pdf文件(jeecg框架)

最近在jeecg框架的后台要做一个pdf在线预览的页面功能&#xff0c;可是每次点预览都是下载&#xff0c;所以就要解决这个问题&#xff0c;现在解决了&#xff0c;记录一下&#xff0c;防止后面踩坑。 先放代码&#xff1a; 下面是点“预览”按钮的点击事件&#xff0c;代码放…

算法基础-----【动态规划】

动态规划(待完善) 动规五部曲分别为&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式&#xff08;状态转移公式&#xff09;dp数组如何初始化确定遍历顺序举例推导dp数组、 动态规划的核心就是递归剪枝&#xff08;存储键值&#xff0c;…

TS_开发一个项目

目录 一、编译一个TS文件 1.安装TypeScript 2.创建TS文件 3.编译文件 4.用Webpack打包TS ①下载依赖 ②创建文件 ③启动项目 TypeScript是微软开发的一个开源的编程语言&#xff0c;通过在JavaScript的基础上添加静态类型定义构建而成。TypeScript通过TypeScript编译器或…

simulink开发stm32,使用中断模块,无法产生中断,其中包括使用timer模块,以及ADC都无法产生中断,需要注意的地方

1&#xff0c;其中包括使用timer模块&#xff0c;以及ADC都无法产生中断&#xff0c;需要注意的地方 原来是需要在配置文件里开启一下timer的中断&#xff0c;其他模块自动加载ioc就可以了&#xff0c;这个timer需要注意力&#xff0c;需要自己勾选一下 如下图&#xff1a; 看…

Android简介-历史、API等级与体系结构

1. Android简介 Android是一种基于Linux内核的自由及开放源代码的操作系统。最初是由安迪鲁宾(Andy Rubin)开发的一款相机操作系统。2005年8月被Google收购。2007年11月&#xff0c;Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。…

【漏洞复现】I doc view——任意文件读取

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 I doc view 在线文档预览是一个用于查看、编辑、管理文档的工具…