2.MapReduce论文总结

news/2024/10/14 4:25:41

一. 介绍

  1. 很多业务逻辑很简单,主要难点是数据量太大,可使用分布式处理提高速度。
  2. 传统分布式程序,计算逻辑和分布式任务分发、故障恢复混在一起,原本简单的计算逻辑变得模糊不清,难以处理。
  3. MapReduce将两者分离,任务分发,容错,恢复等逻辑由模型完成,程序员只需要专注计算逻辑。大大了简化代码架构,减轻开发人员工作难度。

二. 模型概述

  1. Map/Reduce函数由用户编写
  2. Map函数负责处理输入的k/v对,生成中间态k/v对
  3. 之后发送出去,按照Key值进行分组,不同Key值的数据发送到不同的Reduce中
  4. Reduce函数接收中间态的值并进行聚合,最终输出自己负责的Key值的结果

示例

// key: document name
// value: document contents
map(String key, String value):for each word w in value:EmitIntermediate(word,"1");// key: a word
// values: a list of counts
reduce(String key, Iterator values):int result = 0;for each v in values:result += ParseInt(v);Emit(AsString(result));
  • map函数对一行字符串进行分解,生成(word,1)的KV对
  • reduce函数累加每一个单词的出现计数,等到所有数据处理完毕,就可以得到结果

三. 实现

将输入的数组分割为M份

通过一个分区函数将中间态的值划分为R组(例如: hash(key) mod R

1 执行概述

执行概述.png
  1. 将输入文件拆分为M份,通常每份大小为16MB至64MB(可配置)
  2. 在集群中的一组机器上启动多个程序的副本,只有一个master。剩下的都是worker,workermaster分配任务
  3. 现有M个map任务和R个reduce任务。master选择空闲的worker,分配mapreduce任务
  4. map worker从输入数据中解析K/V对,并将kv对传递给用户自定义的map函数。从而产生中间态K/V对,然后缓存在内存中。
  5. 缓存中的K\V对会被周期性地写入本地磁盘,通过分区函数将其划分到R个区域中。这些缓存所在的磁盘的位置会被发送给master,master将这些位置信息转发给reduce worker。
  6. reduce worker获得位置信息后,会通过RPC从map worker的本地磁盘读取缓冲数据。当reduce worker读完所有的中间数据后,它会根据key值进行排序,从而将key值相同的数组放在同一组。排序是必需的,因为通常会有很多不同的key映射到同一个reduce任务。如果中间数据量太大,无法放入内存中,则可使用外部排序。
  7. reduce worker遍历已排序的中间数据,对于每个Key,它将该Key和与之对应的中间值集合传递给用户的reduce函数。Reduce函数产生结果,写入到这个Reduce的结果输出文件中。
  8. 当所有map和reduce任务都完成后,master唤醒用户程序。此时,用户程序中对MapReduce调用,就会获得结果。

成功完成后,结果会被存放在R个输出文件中(每个reduce任务对应一个输出文件,文件名由用户指定)。通常不需要将这R个输出文件合并为一个文件 — 通常这些文件会作为输入传递给下一阶段的MapReduce。

2.Master的数据结构

Master中维护一些信息:

  • 每个任务的状态
  • 所有worker机器的标识
  • map生成的R个中间态文件所在的位置和大小

master会将map生成的中间态文件位置和大小信息以增量的方式持续推送给运行中的reduce Worker。

3. 容错

Worker Failure

Master 周期性ping worker,一段时间没有响应:

  • 标记此worker失败,该worker负责的任务都会被重置为初始状态,调度去其他worker重新执行

  • 已完成的map任务在故障后需重新执行,因为map的输出存储在故障机器的本地磁盘,无法访问。而已完成的reduce任务不需要重复执行,因为它们的输出存储在全局文件系统中

  • 通知reduce任务,A断线了,之后从B读取数据

Master Failure

  • 重启

4. Locality

网络传输耗时,减少网络传输,优先将map任务分配到距离输入数据主机物理距离较近的地方。

5. Task Granularity(任务粒度)

  • M和R的值都应远大于worker机器的数量

6.Backup Tasks(备份执行)

解决掉队者问题,一台机器花费了异常长的时间去完成最后的几个map或reduce任务

当MapReduce只剩最后几个任务时,调度剩余任务到多个节点同时执行,最后无论是主节点还是备份节点执行完成,任务都将被视为完成

四.每个组件的任务

1.Master

1.1 执行需要的参数

  1. 要处理的任务类型
  2. 待处理的文件列表

1.2 分发任务

分发任务给可处理对应任务的worker, 记录发给worker对应的文件名

监听

监听worker状态,如果2S没完成,就标记为Dead,重新分发这个文件到其他空闲worker

执行完成

执行完成后,worker将消息传回Master,Master进行接收,然后按Key进行分发,如果是旧Key就发给对应的Reduce worker,反之就采用轮询,将对应任务发给下一个Reduce worker

心跳

worker每10S和Master进行心跳连接

2. Worker

2.1 启动时参数

  1. Master地址

2.2 心跳

每10S和Master进行一次心跳

2.3 接收Master任务

  1. 任务类型

  2. 要处理的文件名

  3. 输出结果

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

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

相关文章

Lab1 记录

一、非并行版本分析 1.非并行版本MapReduce流程通过第一个参数,传入Map和Reduce 函数 之后的参数为待处理文件名 读取文件 调用Map函数,对文件内容进行处理,生成KV对 对KV对进行sort 按照Key进行分组,然后对每组数据调用Reduce 将结果写入文件二、Lab思路 概述:Worker向Co…

JMeter:性能测试利器全解析

目录JMeter:性能测试利器全解析一、JMeter 的基础概念(一)什么是 JMeter(二)主要功能特点二、使用 JMeter 测试 Web 应用的步骤(一)安装与启动(二)创建测试计划(三)配置 Web 应用测试场景(四)运行测试(五)分析测试结果三、案例分析(一)案例背景(二)测试步骤…

ZBlogPHP迁移网站错误提示:Permission denied(请确保你的网站有写入权限777)

解决方案:设置你的网站目录为777 写入权限即可【注意:如果755可能会不行,最好直接使用777搞定】扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、网站改版、BUG修复、问题…

zblog网站提示MySQL数据库无法连接

前天搭建好的博客网站,在睡了一觉之后,网站竟然出现故障无法正常运行了,在此期间,没有进行任何的操作。就连主页都无法进入,页面一直提示“MySQL 数据库无法连接”。不管怎样刷新页面,还是重启服务器,都毫无作用。 最终,从中午 1 点一直忙活到凌晨 2 点,还好皇天不负有…

20-学习卷积核

import torch import torch.nn as nnX = torch.rand((6, 8)) Y = torch.rand((6, 7))# (批量⼤⼩、通道、⾼度、宽度) X = X.reshape((1, 1, 6, 8)) Y = Y.reshape((1, 1, 6, 7)) lr = 3e-2# 构造卷积层 PyTorch 会使用默认的初始化方法,例如 Xavier 初始化或 Kaim 初始化…

这下罄竹难书了

/ /由四个金牌命制的联赛模拟试卷,使我校高二高三竞赛班取得了一试最高 84 分,加试最高 160 分的好成绩! 一试 一、填空题如图是一个 \(4\times 4\) 的正方形方格表,则最少需要 \(\text{_____}\) 条直线,才能使得每个方格都被至少一条直线穿过。设复数 \(z\) 满足:\(\fra…

解决Z-blog数据库链接错误?

你是否也曾遇到过在登录 Z-blog 博客时,系统显示“错误原因: 数据库连接错误”这样的状况呢?频繁出现此种情况对于 SEO 优化而言是极为不利的。那么,究竟应当如何解决 Z-blog 数据库链接错误的问题呢?首先,我们得深入剖析为何会产生这样的状况,其原因主要有两点。不管是…

Java中stream的详细用法

原文地址:https://www.cnblogs.com/Ao0216/p/15319553.html 一、概述 Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询…