MapReduce学习

目录

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.mzph.cn/web/36805.shtml

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

相关文章

使用supportFragmentManager管理多个fragment切换

android studio创建的项目就没有一个简单点的框架&#xff0c;生成的代码都是繁琐而复杂&#xff0c;并且不实用。 国内的页面一般都是TAB页面的比较多&#xff0c;老外更喜欢侧边菜单。 如果我们使用一个activity来创建程序&#xff0c;来用占位符管理多个fragment切换&…

五、Spring IoCDI ★ ✔

5. Spring IoC&DI 1. IoC & DI ⼊⻔1.1 Spring 是什么&#xff1f;★ &#xff08;Spring 是包含了众多⼯具⽅法的 IoC 容器&#xff09;1.1.1 什么是容器&#xff1f;1.1.2 什么是 IoC&#xff1f;★ &#xff08;IoC: Inversion of Control (控制反转)&#xff09;总…

Python逻辑控制语句 之 判断语句--if、if else 和逻辑运算符结合

逻辑运算符&#xff1a; and or not 1.案例一 需求&#xff1a; 1. 获取⽤户输⼊的⽤户名和密码 2. 判断⽤户名是 admin 并且密码是 123456 时, 在控制台输出: 登录成功! 3. 否则在控制台输出: 登录信息错误! # 需求&#xff1a; # 1. 获取用户输入的用户名和密码 # 2. 判断…

【折腾笔记】兰空图床使用Redis做缓存

前言 最近发现我部署在群晖NAS上的兰空图床程序在高并发的情况下会导致图片加载缓慢或出现图片加载失败的情况&#xff0c;于是我查阅了官方文档资料并进行了一系列的测试&#xff0c;发现兰空图床如果开启了原图保护功能&#xff0c;会非常的吃CPU的性能&#xff0c;尤其是在…

【Python游戏】猫和老鼠

本文收录于 《一起学Python趣味编程》专栏,从零基础开始,分享一些Python编程知识,欢迎关注,谢谢! 文章目录 一、前言二、代码示例三、知识点梳理四、总结一、前言 本文介绍如何使用Python的海龟画图工具turtle,开发猫和老鼠游戏。 什么是Python? Python是由荷兰人吉多范…

【限免】线性调频信号的脉冲压缩及二维分离SAR成像算法【附MATLAB代码】

文章来源&#xff1a;微信公众号&#xff1a;EW Frontier QQ交流群&#xff1a;949444104 程序一 对线性调频信号进行仿真&#xff0c;输出其时频域的相关信息&#xff0c;并模拟回波信号&#xff0c; 对其进行脉冲压缩和加窗处理。 实验记录&#xff1a; 1.线性调频信号时…

从0构建一个录制UI测试工具

很多UI自动化测试工具都具备录制UI自动化测试的能力&#xff0c;例如playwright&#xff0c;可以通过playwright vscode插件完成录制&#xff0c;如下图所示&#xff0c;当选择录制脚本时&#xff0c;会打开一个浏览器&#xff0c;在浏览器中输入被测应用url&#xff0c;用户在…

C++:enum枚举共用体union

enum枚举 C继承C的枚举用法 (1)典型枚举类型定义&#xff0c;枚举变量定义和使用 (2)枚举类型中的枚举值常量不能和其他外部常量名称冲突&#xff1a; 举例1宏定义&#xff0c;举例2另一个枚举 // 定义一个名为Color的枚举类型 enum Color {RED, // 红色&#xff0c;默认值…

昇思25天学习打卡营第11天|SSD目标检测

1. 学习内容复盘 模型简介 SSD&#xff0c;全称Single Shot MultiBox Detector&#xff0c;是Wei Liu在ECCV 2016上提出的一种目标检测算法。使用Nvidia Titan X在VOC 2007测试集上&#xff0c;SSD对于输入尺寸300x300的网络&#xff0c;达到74.3%mAP(mean Average Precision)…

JAVA毕业设计145—基于Java+Springboot+vue+uniapp的驾校预约小程序(源代码+数据库+15000字论文)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvueuniapp的驾校预约小程序(源代码数据库15000字论文)145 一、系统介绍 本项目前后端分离&#xff0c;分为用户、教练、管理员三种角色 1、用户&#xff1a; …

ModuleNotFoundError: No module named ‘_sysconfigdata_x86_64_conda_linux_gnu‘

ModuleNotFoundError: No module named _sysconfigdata_x86_64_conda_linux_gnu 1.软件环境⚙️2.问题描述&#x1f50d;3.解决方法&#x1f421;4.结果预览&#x1f914; 1.软件环境⚙️ Ubuntu 20.04 Python 3.7.0 2.问题描述&#x1f50d; 今天发现更新conda之后&#xff0…

Redisson(分布式锁、限流)

注意Redisson是基于Redis的&#xff0c;所以必须先引入Redis配置&#xff08;参考SpringBoot集成Redis文章&#xff09; 1. 集成Redisson 引入依赖 <!-- 二选一,区别是第一个自动配置&#xff0c;第二个还需要手动配置也就是第二步自定义配置&#xff0c;注意版本号&…

Windows怎么实现虚拟IP

在做高可用架构时&#xff0c;往往需要用到虚拟IP&#xff0c;在linux上面有keepalived来实现虚拟ip的设置。在windows上面该怎么弄&#xff0c;keepalived好像也没有windows版本&#xff0c;我推荐一款浮动IP软件PanguVip&#xff0c;它可以实现windows上面虚拟ip的漂移。设置…

UE5材质之HLSL:深度

UE4/5的Custom节点&#xff1a;在VScode使用HLSL&#xff08;新手入门用&#xff09;_vscode写hlsl-CSDN博客 效果&#xff1a; 材质节点&#xff1a; 自定义节点代码&#xff1a; float3 rayStepViewDir*-1; float4 inputTexTexture2DSample(TexObject,TexObjectSampler,uv)…

JavaSE主要内容(全套超完整)

一、为什么选择Java&#xff08;Java的优势&#xff09; 1、应用面广&#xff1a; 相较于其他语言&#xff0c;Java的应用面可谓是非常广&#xff0c;这得益于他的跨平台性和其性能的稳定性。他在服务器后端&#xff0c;Android应用开发&#xff0c;大数据开发&#xf…

Jmeter性能场景设计

为什么会有性能场景设计呢&#xff1f; 相信有部分同学对场景设计优点模糊&#xff0c;前面博文提到的是场景提取 场景设计&#xff1a;在压测的过程中怎么设置线程数、Ramp-Up时间(秒)、循环次数等等 一、 性能场景分类 场景的概念&#xff1a; a. 单场景 b. 混合场景 c. 容…

开源项目-商城管理系统

哈喽,大家好,今天主要给大家带来一个开源项目-商城管理系统 商城管理系统分前后端两部分。前端主要有商品展示,我的订单,个人中心等内容;后端的主要功能包括产品管理,门店管理,会员管理,订单管理等模块 移动端页面

[OtterCTF 2018]Name Game

Name Game 题目描述&#xff1a;我们知道这个帐号登录到了一个名为Lunar-3的频道。账户名是什么&#xff1f;猜想&#xff1a;既然登陆了游戏&#xff0c;我们尝试直接搜索镜像中的字符串 Lunar-3 。 直接搜索 Lunar-3 先把字符串 重定向到 txt文件里面去然后里面查找 Lunar-3…

什么是机器学习,机器学习与人工智能的区别是什么(一)?

人工智能和计算机游戏领域的先驱阿瑟塞缪尔&#xff08;Arthur Samuel&#xff09;创造了 "机器学习"一词。他将机器学习定义为 “一个让计算机无需明确编程即可学习的研究领域” 。通俗地说&#xff0c;机器学习&#xff08;ML&#xff09;可以解释为根据计算机的经…

【RT摩拳擦掌】RT云端测试之百度天工物接入构建(设备型)

【RT摩拳擦掌】RT云端测试之百度天工物接入构建&#xff08;设备型&#xff09; 一&#xff0c; 文档介绍二&#xff0c; 物接入IOT Hub物影子构建2.1 创建设备型项目2.2 创建物模型2.3 创建物影子 三&#xff0c; MQTT fx客户端连接云端3.1 MQTT fx配置3.2 MQTT fx订阅3.3 MQT…