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.mfbz.cn/a/757668.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mysql是什么

mysql是什么 是DBMS软件系统&#xff0c;并不是一个数据库&#xff0c;管理数据库 DBMS相当于用户和数据库之间的桥梁&#xff0c;有超过300种不同的dbms系统 mysql是关系型数据库&#xff0c;关系型数据库存储模型很想excel&#xff0c;用行和列组织数据 sql是一门编程语言…

LUA 语言中subtree 的使用教程

在线编辑器&#xff1a; https://www.runoob.com/try/runcode.php?filenameHelloWorld&typelua 在Lua语言中&#xff0c;"subtree"通常指的是一个子表或者子树&#xff0c;它指的是一个Lua表&#xff08;table&#xff09;中的一个部分&#xff0c;可以是一个单…

自定义注解+AOP形式监控接口调用日志

目的&#xff1a; 通过自定义注解&#xff0c;在需要监控接口调用输出日志的类或方法上&#xff0c;加上自定义注解&#xff0c;实现无侵入式接口监控。 实现&#xff1a; idea结构 1、导入pom <dependency><groupId>org.aspectj</groupId><artifactI…

你的 Python 代码太慢了吗?协程和多线程来拯救!

目录 协程&#xff08;Coroutine&#xff09; 多线程&#xff08;Multithreading&#xff09; 协程与多线程的原理 协程的原理 多线程的原理 实践案例 使用协程案例 使用多线程案例 大家好&#xff0c;在Python编程中&#xff0c;处理并发任务时&#xff0c;我们经常会…

LLM大模型:如何选择合适的 Embedding 模型?

检索增强生成&#xff08;RAG&#xff09;是生成式 AI &#xff08;GenAI&#xff09;中的一类应用&#xff0c;支持使用自己的数据来增强 LLM 模型&#xff08;如 ChatGPT&#xff09;的知识。 RAG 通常会用到三种不的AI模型&#xff0c;即 Embedding 模型、Rerankear模型以及…

数据质量管理-时效性管理

前情提要 根据GB/T 36344-2018《信息技术 数据质量评价指标》的标准文档&#xff0c;当前数据质量评价指标框架中包含6评价指标&#xff0c;在实际的数据治理过程中&#xff0c;存在一个关联性指标。7个指标中存在4个定性指标&#xff0c;3个定量指标&#xff1b; 定性指标&am…

视频号视频怎么保存到手机,视频号视频怎么保存到手机相册里,苹果手机电脑都可以用

随着数字媒体的蓬勃发展&#xff0c;视频已成为我们日常生活中不可或缺的一部分。视频号作为众多视频分享平台中的一员&#xff0c;吸引了大量用户上传和分享各类精彩视频。然而&#xff0c;有时我们可能希望将视频号上的视频下载下来,以下将详细介绍如何将视频号的视频。 方法…

[DASP]玩机!在组织一套音频系统之前,我们先要知道这套系统里面有什么东西。

前言 现在不是搞音频嘛&#xff0c;正好自己买了无源音箱&#xff0c;买了套DSP芯片玩一下 流程 上图是我们组织一套音频系统的流程&#xff0c;首先我们需要知道各个元件是做什么的 1. 音源&#xff08;例如麦克风、音乐播放器等&#xff09;&#xff1a; 产生模拟音频信号…

无忧易售新功能:一键白底转换,升级产品图片质感

在电商领域不断追求卓越与效率的今天&#xff0c;无忧易售ERP推出一键白底转换功能&#xff0c;为卖家们提供前所未有的便捷与高效&#xff0c;改变了商品图片处理的传统模式&#xff0c;革新了卖家们的图片处理体验&#xff0c;让商品展示焕然一新&#xff0c;助力商家在激烈的…

Java--常用类APl(复习总结)

前言: Java是一种强大而灵活的编程语言&#xff0c;具有广泛的应用范围&#xff0c;从桌面应用程序到企业级应用程序都能够使用Java进行开发。在Java的编程过程中&#xff0c;使用标准类库是非常重要的&#xff0c;因为标准类库提供了丰富的类和API&#xff0c;可以简化开发过…

Softmax函数的作用

Softmax 函数主要用于多类别分类问题&#xff0c;它将输入的数值转换为概率分布。 具体来说&#xff0c;对于给定的输入向量 x [x_1, x_2,..., x_n] &#xff0c;Softmax 函数的输出为 y [y_1, y_2,..., y_n] &#xff0c;其中&#xff1a; 这样&#xff0c;Softmax 函数的输…

python selenium 打开网页

selenium工具类 - 文件名 seleniumkit.py 代码如下 # -*- coding:utf-8 _*-from selenium import webdriverimport os import timefrom selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from seleniu…

【Linux】解锁并发:多线程同步技术详解与应用实践

文章目录 前言&#xff1a;1. 同步概念2. 条件变量&#xff1a;实现线程间同步的&#xff01;2.1. 条件变量是什么&#xff1f;2.2. 认识条件变量接口 3. 写一个测试代码——验证线程的同步机制4. 生产消费模型5. 生产消费模型 条件变量6. 线程池7. 可重入 VS 线程安全7.1. 概…

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…

【Python机器学习】分类向量——One-Hot编码(虚拟变量)

为了学习分类特征&#xff0c;以某国成年人收入数据集&#xff08;adult&#xff09;为例&#xff0c;adult数据集的任务是预测一名工人的收入是高于50k还是低于50k&#xff0c;这个数据集的特征包括工人的年龄、雇佣方式、教育水平、性别、每周工作时长、职业等。 这个任务属于…

第二届Godot游戏开发大赛来啦!

第二届Godot游戏开发大赛来啦&#xff01; 我们的开发大赛正式定名为Godot Hub Festival 2024&#xff0c;以后将按照年份命名。 另外&#xff0c;本次比赛将和openKylin开源社区的SIG组们合作举办(因此也可以叫Godot openKylin开发大赛)。比赛定于2024年7月1日正式开始&#x…

基于Java的旅游景区网站系统(springboot+vue)

作者介绍&#xff1a;计算机专业研究生&#xff0c;现企业打工人&#xff0c;从事Java全栈开发 主要内容&#xff1a;技术学习笔记、Java实战项目、项目问题解决记录、AI、简历模板、简历指导、技术交流、论文交流&#xff08;SCI论文两篇&#xff09; 上点关注下点赞 生活越过…

瑞数(rs6)接口以及源码

测试代码截图如下&#xff1a;调用接口即可直接用 需要dd 有想要学习教程的也能够找我。 如有需求&#xff0c;欢迎&#xff0b;我绿泡泡。 期待你的加入&#xff01;

访问外网的安全保障——反向沙箱

反向沙箱作为一种网络安全技术&#xff0c;其核心理念在于通过构建一个隔离且受控的环境&#xff0c;来有效阻止潜在的网络威胁对真实系统的影响。在当今日益复杂的网络环境中&#xff0c;如何借助反向沙箱实现安全上网&#xff0c;已成为众多用户关注的焦点。 随着信息化的发…

服务器数据恢复—异常断电导致RAID6阵列中磁盘出现坏扇区的数据恢复案例

服务器存储数据恢复环境&#xff1a; 一台存储中有一组由12块SAS硬盘组建的RAID6磁盘阵列&#xff0c;划分为一个卷&#xff0c;分配给几台Vmware ESXI主机做共享存储。该卷中存放了大量Windows虚拟机&#xff0c;这些虚拟机系统盘是统一大小&#xff0c;数据盘大小不确定&…