分布式批处理:MapReduce初探

news2024/11/23 4:34:49

大家好,我是方圆。《数据密集型应用系统设计》第十章中有介绍到 MapReduce 相关的内容,当时觉得看得意犹未尽,所以便找了一些资料又看了一下。随着深入发现能扩展的东西实在太多,考虑时间有限,准备先把 MapReduce 基础相关的知识和其中的思想总结和记录下来,如果之后有机会接触到大数据相关的工作再做深入的研究。

1. 什么是MapReduce?

MapReduce 是一个编程模型(框架),它采用 “分治” 的处理模式:首先将数据进行分块,之后对数据进行处理,包括 Map阶段Reduce阶段

Map阶段是对输入的数据进行整合,通过定义的输入格式获取文件信息和类型,并且确定读取方式,最终将读取的内容以 键值对 的形式保存。

Reduce阶段则是对Map阶段生成的数据进行二次处理,从而获得我们想要的计算结果。

这样理解起来比较抽象,我们通过一个简单的栗子来描述下 MapReduce 的执行过程:

比如,现在我们安排学生数图书馆中所有的书,A同学数1号书架上的书,B同学数2号书架上的书… 这样人越多的话,数书的速度就越快,这个过程就对应的是 Map阶段;之后我们将所有同学数书的结果值加在一起,这就对应了 Reduce阶段

2. MapReduce作业执行流程

我们将 MapReduce 执行的任务称为 job。通常使用 job 把输入的数据分割成若干的独立数据块,并分布在不同的节点上。然后通过分散在不同节点上的 map 任务以完全并行的形式进行处理,之后 MapReduce 对 map 的处理结果进行收集,然后将结果输送给 reduce 进行下一步处理。它的执行流程图如下

MapReduce处理流程.jpg

  1. MapReduce 框架首先将输入文件划分为 M 片,每片通常为 16MB 到 64MB 大小,随后会启动集群中服务器的进程

  2. 集群中的进程分为 Master进程Worker进程。Master 会挑选空闲的 Worker,一次分配一个 map 任务或者一个 reduce 任务,而 Worker 进程则负责执行任务

  3. 被分配到 map 任务的 Worker 读取对应分片的输入,从输入中解析出键值对,并分别将其传给用户定义的 map 函数。map 函数会在每条输入记录上调用一次,完成后返回的中间键值对会被暂时缓存在内存里。对于每个输入记录,它可以生成任意数量的键值对,并且不会保留从一个输入记录到下一个记录的任何状态,因此对每个记录的处理都是独立的

  4. Worker 内存中缓存的键值对,会被分片函数分成 R 个分片,并周期性地写进本地磁盘。这些键值对在磁盘上的位置会被发送给 Master,Master 负责将位置发送给被分配到 reduce 任务的 Worker

  5. 当一个 Reduce Worker 接收到 Master 发送的这些位置,它会向保存这些内容的 Map Worker 发送 RPC 请求来读取这些内容。当一个 Reduce Worker 读取完所有的中间数据,就会将其根据 key 进行排序,这样所有相同 key 的数据就会聚合在一起。这种排序是必要的,因为通常许多不同的 key 会由同一个 reduce 任务处理。如果数据过大,可能会使用外部排序

  6. Reduce Worker 遍历有序的中间数据,对遇到的所有 key,都会将 key 和对应的值集合传给用户定义的 reduce 函数。reduce 函数的输出会被追加到一个最终的输出文件(每个 reduce 分片一个)

  7. 当所有的 map 任务和 reduce 任务都完成后,MapReduce 的任务也就完成了

运行结束后,MapReduce 的运行结果保存在 R 个输出文件中,通常这些文件会被用作下一个 Mapreduce 任务的输入,组成 工作流(一个作业的输出成为下一个作业的输入) 的形式。不过,在工作流中的一项作业只有在先前的作业完后成才能开始,所以需要 Master 来处理作业间的依赖问题,这样才能使得系统更加高效。

过程中的 map 函数和 reduce 函数是需要我们自定义实现的。在大多数情况下,map 任务的代码在将要运行的服务器节点上并不存在,所以 Master 首先会将代码复制到适当的服务器上,然后启动 map 任务开始读取输入文件。因为 “移动计算比移动数据更划算” ,一个应用请求的计算,尤其是在海量级别的数据时候,离它的数据越近就越高效,因为这样能降低网络阻塞的影响,提高系统数据的吞吐量。

3. 从MapReduce到批处理系统

批处理系统区别于在线服务系统,后者每收到一个客户的请求都会尽快处理并返回一个响应,而批处理系统则是读取一些输入数据并产生一些输出数据,这往往需要一段时间(从几分钟到几天),通常情况不会有用户等待作业完成,所以批处理系统又被称为 离线系统,而且你可以反复的运行它们,因为它们不会对输入进行修改(只读)。

基于 MapReduce 实现的系统,如 HDFS(Hadoop File System) 就是典型的批处理系统,它提出时就是为了能够通过使用 大量普通的服务器 搭建集群来实现大数据的并行处理,其最优先考虑的是数据的扩展性和系统的可用性。

批处理系统常被应用在广告行业,通过统计点击率的信息,调整相应广告的投放能力;也可以用来分析既定网站在某一时间段内的用户数,以此来判断服务器合适的维护时间。这个操作涉及浏览全部服务器上的日志文件,并对其信息进行提取和处理,繁重且复杂,但是如果应用了 Hadoop 这种大数据处理系统就能化繁为简。


巨人的肩膀

  • 《数据密集型应用系统设计》:第十章

  • 《MapReduce 2.0源码分析与编程实战》:第一、二、四章

  • MapReduce 论文阅读

  • 深入浅出大数据:到底什么是Hadoop?

  • Hadoop分布式文件系统:架构和设计

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

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

相关文章

基于smardaten无代码快速开发智慧城管系统

0️⃣需求背景 现代城市管理的面临着一系列问题:如执法人员不足、信息化手段应用少和时间处理不及时等,开发一个智慧城管回访系统的需求与日俱增… 通过引入智慧城管回访系统,可以提高城市管理的科学性、智能化和透明度,为城市发…

【软考网络管理员】2023年软考网管初级常见知识考点(14)- linux命令及目录相关详解

涉及知识点 Linux 目录结构, Linux 常用命令, Linux 下的文件基本属性, Linux 的启动与关闭 软考网络管理员常考知识点,软考网络管理员网络安全,网络管理员考点汇总。 原创于:CSDN博主-《拄杖盲学轻声码》…

HTML5 游戏开发实战 | 推箱子

经典的推箱子是一个来自日本的古老游戏,目的是在训练玩家的逻辑思考能力。在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙地利用有限的空间和通道,合理…

java9新特性之-String存储结构变更--集合工厂方法-- InputStream 加强--增强的 Stream API讲解

String存储结构变更 Motivation The current implementation of the String class stores characters in a char array, using two bytes (sixteen bits) for each character. Data gathered from many different applications indicates that strings are a major component o…

Ubuntu22.04编译安装FFmpeg

FFmpeg介绍 概述 FFmpeg是一款用C语言编写的跨平台免费开源多媒体处理工具,该软件可实现音视频的采集、编解码、转码、过滤以及流媒体相关操作等功能。 同时,FFmpeg也为其他多种语言和操作系统提供了开发组件,包括Java、Python、C等和Wind…

【吴恩达deeplearning.ai】基于LangChain开发大语言应用模型(下)

以下内容均整理来自deeplearning.ai的同名课程 Location 课程访问地址 DLAI - Learning Platform Beta (deeplearning.ai) LangChain for LLM Application Development 基于LangChain开发大语言应用模型(上) 一、LangChain: Q&A over Documents基于文…

SpringMVC原理分析 | Controller配置、RestFul风格

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Controller配置 控制器Controller 控制器复杂提供访问应用程序的行为,通常通过接口定义或注释定义的两种方法实现控制器负责解析用户的请求并将其转换为一…

ModaHub AI模型开源社区——Milvus向量数据库存储相关概念

目录 存储相关概念 分区和数据段 数据段(segment) 分区(partition) 集合、分区和数据段的关系 元数据 常见问题 存储相关概念 分区和数据段 建立集合时,Milvus 根据参数 index_file_size 控制数据段的大小。另…

R+VIC 模型融合实践技术应用及未来气候变化模型预测

目前,无论是工程实践或是科学研究中都存在很多著名的水文模型如SWAT/HSPF/HEC-HMS等。虽然,这些软件有各自的优点;但是,由于适用的尺度主要的是中小流域,所以在预测气候变化对水文过程影响等方面都有所不足。 VIC模型…

“未来之光:揭秘创新科技下的挂灯魅力“

写在前面: 高度信息化当下时代,对电脑及数字设备的需求与日俱增无处不在,随之而来的视觉疲劳和眼睛问题也攀升到了前所未有的高度。传统台灯对于长时间使用电脑的人群来说是完全无法解决这些问题的。一款ScreenBar Halo 屏幕挂灯,…

【Java】Java核心要点总结 71:ThreadPoolExecutor

文章目录 1)为什么需要线程池?2)线程池内部怎么保证线程安全?3)创建线程的方式 newSingleThreadExecutor底层4) ThreadPoolExecutor参数使用5) 线程池的工作机制6)拒绝策略分四种7)队列有哪些? 参考: 1)为什么需要线程池? 重复利…

设计模式之备忘录模式笔记

设计模式之备忘录模式笔记 说明Memento(备忘录)目录白箱备忘录模式备忘录模式示例类图游戏角色类备忘录角色类备忘录对象管理对象测试类 黑箱备忘录模式备忘录模式示例类图备忘录接口游戏角色类备忘录对象管理对象测试类 说明 记录下学习设计模式-备忘录模式的写法。JDK使用版…

JDBC小记——连接池

目录 连接池介绍 常用连接池 DBCP连接池 硬编码方式 配置文件方式 C3P0连接池 C3P0和DBCP的区别 硬编码方式 配置文件方式 Druid连接池 硬编码方式 配置文件方式 DBUtils 连接池介绍 由于建立数据库连接是一种非常耗时、耗资源的行为,所以预先通过连接…

在vite+vue3项目中配置使用css预处理器(less/sass)以及路径别名

一、在vite项目中使用css预处理器 vite已经将这些预处理器的loader内置了,我们不用再像在webpack项目中那样,需要下载和配置一堆相关的loader,我们只需要下载less,sass依赖,就能直接在项目中使用啦 使用npm或者yarn来…

Springboot-- 注解字段校验,并统一设置返回值

Springboot-- 注解字段校验&#xff0c;并统一设置返回值 引包&#xff1a;import org.springframework.validation.annotation.Validated; <!--web--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-star…

配置鼠标右键菜单功能 :一键csv转excel

配置右键菜单功能 &#xff1a;一键csv转excel 无需点开文件&#xff0c;双击即可以生成新的excel文件 步骤&#xff1a; 1、配置Python&#xff0c;安装依赖库 pip install openpyxl pip install pandas2、创建Python文件 csv_to_excel.py # -*- coding:utf-8 -*- impor…

【计算机组成原理】函数栈帧

目录 一、源代码理论分析 二、主函数的创建 三、c语言代码的汇编 注&#xff1a;不同编译器环境的函数栈帧存在一定差异&#xff0c;本文使用VS2019 一、源代码理论分析 源代码&#xff1a; int Add(int x, int y) {int z 0;z x y;return z; }int main() {int a 10;…

u盘安装centos 7

1.下载 通过阿里云站点&#xff1a;http://mirrors.aliyun.com/centos/7/isos/x86_64/&#xff0c;下载iso文件。 2.制作启动u盘镜像 2.1 下载制作工具 下载u启动 http://uqidong.als98.cn/ 。 2.2 制作镜像 准备u盘&#xff0c;插入机器&#xff0c;运行u启动。 注意…

机器学习之基于PCA的人脸识别

目录 PCA人脸数据降维 matlab代码实现 思路分析 PCA人脸重构 matlab代码实现 思路分析 PCA人脸可视化 matlab代码实现 思路分析&#xff1a; PCA人脸识别 matlab代码实现 思路分析 PCA人脸数据降维 matlab代码实现 picturesdir(C:\Users\Yezi\Desktop\机…

数字逻辑与模拟电子技术-部分知识点(2)——模电部分-半导体三极管、基本线性运放电路、正弦波振荡电路

目录 半导体三极管 三极管的放大的条件 基本放大电路计算 基本线性运放电路 同相放大电路 反相放大电路 加法器放大电路 正弦波振荡电路 正弦波振荡的条件 半导体三极管 三极管的放大的条件 主要是依靠它的发射极电流能够通过基区传输&#xff0c;然后到达集电极而实现…