【分布式 论文】之 1. MapReduce——Simplified Data Processing on Large Clusters

news/2024/5/19 16:29:21/文章来源:https://blog.csdn.net/Aibiabcheng/article/details/130037606

文章目录

  • 1. 需求 / 现存问题
  • 2. 总述
  • 3. 实现
    • 3.1 概述


1. 需求 / 现存问题

输入数据通常很大,为了在合理的时间内完成计算,必须将计算分布到数百或数千台机器上。

如何并行化计算、分发数据和处理故障等问题使得原本简单的计算变得晦涩难懂,需要大量复杂的代码来处理这些问题。

2. 总述

提出了一种新的抽象化方法,使我们能够表达我们试图执行的简单计算,同时隐藏了并行化、容错、数据分发和负载平衡等混乱的细节。

  • 大多数的计算都涉及对输入中的每个逻辑“记录”应用一个map操作,以计算一组中间键/值对;
  • 然后对所有共享相同键的值应用reduce操作,以适当地组合导出的数据。
  • 使用基于函数式编程模型的用户指定map和reduce操作的方法,使我们能够轻松地并行化大型计算,并将重新执行作为容错的主要机制

这篇文章最终提供了简单而强大的接口,用户可以实现这个接口来应用于自己的业务。

3. 实现

MapReduce接受一组输入键值对,并输出一组键值对。将其表示为两个函数:Map和Reduce,均由用户编写。

  • Map:接收一个输入键/值对,并生成一组中间键/值对。MapReduce库将所有与相同中间键I相关联的中间值组合在一起,并将它们传递给Reduce函数。
  • Reduce:接受一个中间键I和该键对应的一组值,并将这些值合并在一起以形成可能更小的一组值。通常,每次Reduce调用只会生成零个或一个输出值。中间值通过迭代器提供给用户的Reduce函数,这使得我们能够处理太大而无法放入内存的值列表。

举个例子——倒排索引:

  • Map函数:解析每个文档,并发出一个<单词序列,文档ID>对。
  • Reduce函数:接受给定单词的所有对,对相应的文档ID进行排序,并发出一个<word, list(文档ID)>对。

所有输出对的集合形成一个简单的倒排索引。很容易扩大这个计算来跟踪单词的位置。

3.1 概述

  • Map调用:
    • Map调用分布在多台机器上。
    • 将输入数据自动划分为M个块,
    • 输入的块可以由不同的机器并行处理。
  • Reduce调用:是通过使用分区函数(例如,hash(key) mod R)将中间键空间划分为R块来分配的。分区的数量®和分区函数由用户指定。

MapReduce操作的总体流程如图:
在这里插入图片描述

  • (1)用户程序中的MapReduce库首先将输入文件分割成M块,通常为16MB到64MB(用户可以通过一个可选参数进行控制)。然后在一组机器上启动程序的许多副本。
  • (2)程序的一个副本是特殊的——主副本(master)。其余的worker是由master分配任务的worker。有M个map任务和R个reduce任务需要分配。master会挑选空闲的worker,给每个worker分配一个map任务或者reduce任务。
  • (3)被分配一个map任务的worker读取相应的输入块的内容。它从输入数据中解析键/值对,并将每个键/值对传递给用户定义的Map函数。Map函数产生的中间键/值对被缓冲在内存中。
  • (4)周期性地将缓冲对写入本地磁盘,通过分区函数将缓冲对划分为R个区域。将这些缓冲对在本地磁盘上的位置传递回master,master负责将这些位置转发给reduce worker。
  • (5)当master通知reduce worker这些位置时,它使用rpc(远程过程调用)从map worker的本地磁盘读取缓冲数据。当reduce worker读取了所有中间数据后,它会根据中间键对数据进行排序,这样 所有相同键的occurrences(这里的occurrences,博主认为可以是映射为相同的key的任何形式的数据)都会被分组到一起。并且这里的排序过程是有必要的,因为通常有许多不同的键映射到同一个reduce任务。如果中间数据的数量太大而无法装入内存,则使用外部排序。
  • (6)reduce worker遍历排序的中间数据,对于遇到的每个唯一的中间键,它将键和相应的中间值集传递给用户的reduce函数。Reduce函数的输出被追加到这个Reduce分区的最终输出文件中。
  • (7)当所有map任务和reduce任务完成后,master将唤醒用户程序。此时,用户程序中的MapReduce调用返回到用户代码。

成功完成后,MapReduce执行的输出存储在R文件中以供使用(每个reduce任务会有一个输出文件,文件名由用户指定)。通常,用户不需要将这些R输出文件合并到一个文件中——他们通常将这些文件作为输入传递给另一个MapReduce调用,或者从另一个分布式应用程序中使用它们(该应用程序能够处理划分为多个文件的输入)。

后续追更……

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

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

相关文章

chatGPA的主要功能-chatGPT深度分析

ChatGPT功能介绍 ChatGPT是基于深度学习技术的自然语言处理算法&#xff0c;其主要用途是生成自然语言文本&#xff0c;能够应用于多个自然语言处理任务。以下是其主要功能介绍&#xff1a; 文本生成&#xff1a;ChatGPT能够生成高质量的自然语言文本&#xff0c;可以应用于大…

Mybatis-plus学习2

一、Mybatis-plus分页操作 1.配置拦截器即可 //分页插件Beanpublic PaginationInterceptor paginationInterceptor(){return new PaginationInterceptor();} 2.直接使用Page对象 //测试分页查询Testpublic void testPage(){//参数一&#xff1a;当前页//参数二&#xff1a;页面…

关键词采集软件在SEO优化中的应用与效果

搜索引擎的优化被广泛认为是提高网站排名和在线可见性的重要方法之一。SEO人员需要进行大量的工作以确保网站的内容和标签可以被搜索引擎正确地解析和索引。在这项任务中&#xff0c;使用搜索引擎关键词采集软件可以帮助SEO人员完成许多繁琐的任务并简化他们的工作流程。在本文…

【C语言】数组指针-c语言的任督二脉

视频链接:bilibili 关于指针需要注意的地方 只有以下两种情况数组名表示的是整个数组 1.sizeof(数组名) 2.&数组名 除此之外数组名表示的都是首元素地址 一、字符指针 是一个指向字符的指针 int main() {char ch w;char* p &ch;//char* ch2 "abcdef"…

【TreeSet】| 深度剥析Java SE 源码合集Ⅳ

目录一. &#x1f981; 前言二. &#x1f981; 剥析流程2.1 类图2.2 属性2.3 构造方法2.4 添加单个元素2.5 移除单个元素2.6 查找单个元素2.7 查找接近的元素2.8 获得首尾的元素2.9 清空2.10 克隆2.11 序列化2.12 反序列化2.13 获得迭代器2.14 转换成 Set/Collection2.15 查找范…

Python 进阶指南(编程轻松进阶):二、环境配置和命令行

原文&#xff1a;http://inventwithpython.com/beyond/chapter2.html 环境配置是配置你的计算机环境&#xff0c;以便你写代码的过程。这包括安装任何必要的工具&#xff0c;配置它们&#xff0c;以及处理安装过程中的任何问题。没有一键配置这种傻瓜式操作过程&#xff0c;因为…

分享一个智能的问答工具,刷题和学习的好帮手

使用了这个问答工具后&#xff0c;感觉前后端都要被替代了&#xff0c;太强了。 由于本人之前很想体验&#xff0c;但是一直难搞&#xff0c;最近发现了一个免梯子的&#xff0c;重要事情说一遍&#xff0c;免梯子&#xff01;是我最近发现的最好用&#xff0c;最快的&#xff…

OpenCV实战——多尺度FAST特征检测

OpenCV实战——多尺度FAST特征检测0. 前言1. BRISK 特征检测器1.1 BRISK 检测关键点1.2 多尺度关键点快速检测2. ORB 特征检测算法3. 完整代码相关链接0. 前言 FAST 是用于快速检测图像中关键点的方法&#xff0c;而 SURF 和 SIFT 算法的设计重点是尺度不变性。为了同时实现快…

【软件设计师10】软件工程

软件工程 1. 瀑布模型SDLC - 结构化 优点&#xff1a;结构化方法模型&#xff0c;每个阶段分工明确&#xff1b;出现问题可以向上层回溯 缺点&#xff1a;需求阶段难以把控&#xff0c;在项目初期&#xff0c;软件的需求几乎是不明确的&#xff0c;等开发完用户往往再提出问…

微信小程序 | 网易云+ChatGPT实现一个智能音乐推荐小程序

文章目录* 效果预览** 分析用户的输入产生推荐** 分析用户的选择标签进行推荐一、需求背景二、项目原理及架构2.1 实现原理&#xff08;1&#xff09; 基于用户的喜欢歌手推荐&#xff08;2&#xff09;基于用户的兴趣标签推荐&#xff08;3&#xff09;改进上一步推荐的结果2.…

IM即时通讯-N-如何保证消息的可靠性展示

结论先行 客户端如何在推拉结合的模式下保证消息的可靠性展示&#xff1f; 原则&#xff1a; server拉取的消息一定是连续的原则&#xff1a; 端侧记录的消息的连续段有两个作用&#xff1a; 1. 记录消息的连续性&#xff0c; 即起始中间没有断层&#xff0c; 2. 消息连续&am…

【数据结构】树与二叉树的基本概念及性质

目录 一、树的基本概念 1️⃣树的定义 2️⃣基本术语 3️⃣树的性质 二、二叉树的概念 1️⃣二叉树的定义 2️⃣特殊二叉树 3️⃣二叉树的性质 参考资料 一、树的基本概念 1️⃣树的定义 数据结构中的树是什么❓ 树是 个结点的有限集。有且仅有一个特定的称为根(上图A结点…

零基础教学必会篇(详解字符函数和字符串函数)(完结版)

各位csdn的友友们好&#xff0c;上次阿博给大家讲了一些简单的字符串函数的功能和模拟实现&#xff0c;今天就和阿博一起再上一个台阶继续拿捏它们&#x1f60a;&#x1f60a;&#x1f60a; 文章目录1.strstr的功能介绍2.strstr函数的模拟实现3.strtok的功能介绍4.strerror和pe…

零基础学习Java 06

目录 String String构造方法 字符串查找 字符串截取 字符串替换 字符串拆分 字符串修改 String String类在java.lang包下&#xff0c;所以使用的时候不需要导包。 String构造方法 字符串查找 char charAt(int index)&#xff0c;输入位置index&#xff0c;找单个字符 …

MAE论文笔记+Pytroch实现

Masked Autoencoders Are Scalable Vision Learners&#xff0c; 2021 近期在梳理Transformer在CV领域的相关论文&#xff0c;落脚点在于如何去使用Pytroch实现如ViT和MAE等。通过阅读源码&#xff0c;发现不少论文的源码都直接调用timm来实现ViT。故在此需要简单介绍一下timm…

Linux 中的 /dev/random 和 /dev/urandom 是什么?

在Linux系统中&#xff0c;/dev/random和/dev/urandom是两个特殊的设备文件&#xff0c;用于生成随机数。在本文中&#xff0c;我们将深入探讨这两个设备文件的区别&#xff0c;以及它们在Linux系统中的作用。 /dev/random /dev/random是一个随机数生成器设备文件&#xff0c;…

windows10下编译zlib库

系列文章目录 文章目录系列文章目录前言一、问题原因二、准备具体操作编译zlib工程前言 我使用CMake编译zlib源码&#xff0c;出现警告&#xff1a;CMake Deprecation Warning at CMakeLists.txt:1 (cmake_minimum_required): Compatibility with CMake < 2.8.12 will be r…

五、基础初始化(init_sequence)

初始化序列数组 # < lib_arm\board.c > init_fnc_t *init_sequence[] { board_init, /* basic board dependent setup */ timer_init, /* initialize timer */ env_init, /* initialize environment */ init_baudrate, /* initialze baudrate settings */ serial_…

VUE3 学习笔记(七)动态样式 class 实现

目录 一、绑定 HTML class 1. 绑定对象 2. 绑定数组 3. 在组件上使用 二、绑定内联样式 1. 绑定对象 2. 绑定数组 3. 自动前缀 4. 样式多值 数据绑定的一个常见需求场景是操纵元素的 CSS class 列表和内联样式。因为 class 和 style 都是 attribute&#xff0c;我们可…

一道小学题,解答了我与学霸的差距

目录一、背景二、题目三、过程1.形式转换2.个位数相加只能向前进一位嘛&#xff1f;进两位可以吗&#xff1f;进三位呢&#xff1f;3.十位数上要填写的内容&#xff0c;可以是0嘛&#xff1f;你想到了吗&#xff1f;4.如何下意识的去做结构化&#xff1f;四、总结五、升华一、背…