MapReduce学习与理解
MapReduce为google分布式三驾马车之一。分别为《The Google File System》、《MapReduce: Simplified Data Processing on Large Clusters》、《Bigtable: A Distributed Storage System for Structured Data》。三遍论文奠定了分布式存储和计算的基础。本篇文章来说说mapreduce.
一、MapReduce介绍
mapreduce将复杂的、在大规模集群的并行运算抽象到两个函数:Map和Reduce。核心思想是“分而治之”。由传输<key,value>类型的键值对到Map,map则对这些数据根据map函数做相应的处理,输出为<key,List<value>>的键值对,再到reduce中对value做最后的统计。这样说有点抽象。我在另一篇文章中看见一个很形象的例子:
我们的目的是做辣椒酱,但是有很多种类比如:洋葱辣椒酱、番茄辣椒酱、青椒辣椒酱等,在输入到map的过程就是将大量的原粮(包含洋葱、番茄、青椒等的混合)放入map中,而map会根据这些品种,分类、并且将其分割完成。那么此时的输出就是<洋葱,List<洋葱瓣>>、<番茄、List<番茄块>>等,此时再作为reduce的输入,reduce则负责最终的搅拌过程,最终输出为各种辣椒酱。这个例子就很形象。
1.Map和Reduce函数表
| 函数 | 输入 | 输出 | 说明 |
| Map | <k1,v1>: <1,hello world> <2,hello Jack> | List(<k2,v2>): <hello,1> <world,1> <hello,1> <Jack,1> | 1.将输入的数据进一步解析成<key,value>对,输入Map函数中进行处理 2.经过map函数输出为一批键值对。此时为中间结果 |
| Reduece | <k2,List<v2>> <hello,{1,1}> <world,1> <Jack,1> | <k3,v3> <hello,2> <world,1> <Jack,1> | reduce得到map输出的中间结果,合并计算到最后的结果 |
在这个表中是以单词划分为例,可能会疑惑为什么map的输出为LIst的键值对,而reduce的输入却是<k2,List>,这就涉及到MapReduece的管理系统,别急继续往下看。
二、MapReduce体系结构

1.client
用户编写的MapReduce程序通过Client提交到JobTracker端,用户可以通过Client提供的接口查看作业运行状态
2.JobTracker(也就是Master)
JobTracker负责资源监控和作业调度JobTrack监控所有的TaskTracker与Job的健康情况,通过心跳机制来检测,一旦发生问题则重新将map中处理的任务重新去完成,因为map完成的任务会存放在他本地的磁盘中,无法得到。那么Master会重新安排其他的Map去做。而reduce失败之后,完成的任务不会再重新进行,它会存放在HDFS中。JobTracker会跟踪任务的执行进度、资源使用量等问题,并将这些信息告诉任务调度器(TaskScheduler),TaskScheduler就会调度任务。
3.TaskTracker
TaskTracker会周期性地通过“心跳”将本地节点上的情况告诉给JobTracker,同时执行相应的操作。TaskTracker使用“slot”等量划分本节点上资源量(CPU、内存等)。一个Task获取到slot后才有机会运行,而Hadoop调度器的作用就是将各个TaskTracker上空闲的slot分配给Task使用。slot分为Map slot和Reduce slot 两种分别提供给MapTask和Reduce Task使用。
4.Task
Task分为Map Task 和 Reduce Task两种,均由TaskTracker启动
5.TaskScheduler则负责任务的分发以及错误发生后未完成的task的重新分发。
2.1MapReduce各个执行阶段
其中Shuffile则负责将将map的输出,经过分区、排序、合并过程输出一个分区有序的文件。比如每个URL为key的键值对,将他们的value合并起来组成一个,统一由某个reduce来进行处理,并且也是有序的。这就解决了前面所说的问题。
MapReduce应用程序执行过程:

这里参考大佬的博客:MapReduce基本原理及应用 - 黎先生 - 博客园 (cnblogs.com)
同时最好可以读一遍原论文,它不管是整个框架,还是容错的考虑都是有提到的,可以更加深入的了解整个MapReduce:rfeet.qrk (mit.edu)
相关文章:
MapReduce学习与理解
MapReduce为google分布式三驾马车之一。分别为《The Google File System》、《MapReduce: Simplified Data Processing on Large Clusters》、《Bigtable: A Distributed Storage System for Structured Data》。三遍论文奠定了分布式存储和计算的基础。本篇文章来说说mapreduc…...
Animal objDog = new Dog()和 Dog objDog = new Dog()的区别
文章目录 1、Animal objDog new Dog()和 Dog objDog new Dog()的区别1. **对象类型(引用类型)**2. **调用和可用成员**3. **示例代码来说明**使用示例总结 2、Animal objDog new Dog();不能调用dog的方法和属性是为什么?原因解析解决方法小…...
springboot引入netty
配置类 import cn.hutool.core.thread.ThreadUtil; import io.netty.bootstrap.ServerBootstrap; import io.netty.buffer.PooledByteBufAllocator; import io.netty.channel.*; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChanne…...
PWM基础与信号控制
1. 什么是PWM? PWM(Pulse Width Modulation,脉宽调制)是一种通过改变信号的占空比来控制电压输出的技术。简单来说,PWM信号由一系列高低电平组成,通过调节高电平持续的时间比例,可以控制信号的…...
nvm,一款nodejs版本管理工具
背景 在工作中,我们可能同时在进行2个或者多个不同的项目开发,每个项目的需求不同,进而不同项目必须依赖不同版本的NodeJS运行环境,这种情况下,对于维护多个版本的node将会是一件非常麻烦的事情,nvm就是为…...
数据处理与统计分析篇-day11-RFM模型案例
会员价值度模型介绍 会员价值度用来评估用户的价值情况,是区分会员价值的重要模型和参考依据,也是衡量不同营销效果的关键指标之一。 价值度模型一般基于交易行为产生,衡量的是有实体转化价值的行为。常用的价值度模型是RFM RFM模型是根据…...
【PostgreSQL】PostgreSQL数据库允许其他IP连接到数据库(Windows Linux)
要让PostgreSQL数据库允许其他IP连接到数据库,需要进行以下几个步骤的配置: 1. 修改postgresql.conf文件 首先,需要修改PostgreSQL的主配置文件postgresql.conf,允许数据库监听所有IP的连接请求。 1.1 找到postgresql.conf文件…...
通义千问:让我的编程工作效率翻倍的秘密武器
在日益繁忙的工作环境中,选择合适的编程工具已成为提升开发者工作效率的关键。不同的工具能够帮助我们简化代码编写、自动化任务、提升调试速度,甚至让团队协作更加顺畅。在这篇博客中,我将分享一个让我工作效率翻倍的编程工具——通义千问大…...
2.Seata 1.5.2 集成Springcloud-alibaba
一.Seata-server搭建已完成前提下 详见 Seata-server搭建 二.Springcloud 项目集成Seata 项目整体测试业务逻辑是创建订单后(为了演示分布式事务,不做前置库存校验),再去扣减库存。库存不够的时候,创建的订单信息数…...
python 图像绘制问题: 使用turtle库绘制蟒蛇
turtle (海龟)库是turtle绘图体系的python实现。 1969年诞生,主要用于程序设计入门。 import turtle turtle.setup(650, 350, 200, 200) # 设置窗体(宽,高,窗体左上角x坐标,y坐标) turtl…...
大模型分布式训练并行技术(七)-自动并行
近年来,随着Transformer、MOE架构的提出,使得深度学习模型轻松突破上万亿规模参数,传统的单机单卡模式已经无法满足超大模型进行训练的要求。因此,我们需要基于单机多卡、甚至是多机多卡进行分布式大模型的训练。 而利用AI集群&a…...
网络安全等级保护 | 规范企业网络系统安全使用 | 天锐股份助力等保制度落地
在当今数字化高速发展的时代,网络安全对于企业的重要性日益凸显。而近年来,数据泄露、网络攻击等安全事件频发,给企业和个人带来了前所未有的挑战。在这一背景下,网络安全等级保护制度(简称“等保”)作为国…...
Springboot使用redis,以及解决redis缓存穿透,击穿,雪崩等问题
1.Redis面试题-缓存穿透,缓存击穿,缓存雪崩 1 穿透: 两边都不存在(皇帝的新装) (返回空值)(互斥锁)(黑名单) (布隆过滤器) 2 击穿:一个或多个热…...
pve 命令开启关闭虚拟机
命令 #查看集群资源状况 #pvesh get /cluster/resources #取得虚拟机当前状态 #pvesh get /nodes/<节点id>/qemu/<虚拟机id>/status/current #pvesh get /nodes/www/qemu/107/status/current#关闭虚拟机 #pvesh create /nodes/<节点id>/qemu/<虚拟机id&…...
【达梦数据库】临时表的使用测试
目录 背景问题复现问题原因解决方法 背景 用户在使用临时表的过程中,执行commit提交命令之后,临时表的数据被清空,无法被接下来的存储过程复用。 问题复现 -----------------------------提交删除行----------------------------- --创建临…...
【GUI设计】基于Matlab的图像去噪GUI系统(8),matlab实现
博主简介: 如需获取设计的完整源代码或者有matlab图像代码项目需求/合作,可联系主页个人简介提供的联系方式或者文末的二维码。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本次案例是基于Matlab的图像去噪GUI系统&am…...
【计算机科学导论】
计算机科学的本质就是解决问题,我们计算机由输入设备,处理设备和输出设备组成。 处理设备看做一个大黑盒,目的就是接收处理数据,然后发送到输出设备。计算机中存储数据就是2进制,0和1,0代表关,…...
【C++】I/O流的使用介绍
文章目录 什么是 I/O 流?C I/O 流的基本类型常用的 I/O 操作1. 标准输入输出2. 文件输入输出3. 字符串流 什么是 I/O 流? 在 C 中,I/O 流是数据的输入和输出通道。流的本质是一个字节序列,提供了抽象的方式来读写数据。C 使用流对…...
深度学习:(八)深层神经网络参数与流程
深层神经网络 符号规定 L L L :表示神经网络的层数; l l l :表示第几层; n [ l ] n^{[~l~]} n[ l ] :表示第 l l l 层的节点数; a [ l ] a^{[~l~]} a[ l ] :表示第 l l l 层中的激活函数&…...
`pattern = r“(\d+)(CNY|JPY|HKD|EUR|GBP|fen|cents|sen|eurocents|pence)“
pattern r"(\d)(CNY|JPY|HKD|EUR|GBP|fen|cents|sen|eurocents|pence)" 是一个正则表达式,用于匹配特定格式的字符串。 正则表达式解析 整体结构: r"...":前缀 r 表示这是一个原始字符串(Raw String&#x…...
从零学习Kafka:数据存储
下载好之后,进行解压并进入到对应的目录。tar -xzf kafka_2.13-4.1.1.tgz cd kafka_2.13-4.1.1接着我们执行下面两条命令进行一些必要的配置。KAFKA_CLUSTER_ID"$(bin/kafka-storage.sh random-uuid)"bin/kafka-storage.sh format --standalone -t $KAFKA…...
wangEditor 5移动端兼容性深度解析:终极跨平台富文本编辑实战指南
wangEditor 5移动端兼容性深度解析:终极跨平台富文本编辑实战指南 【免费下载链接】wangEditor wangEditor —— 开源 Web 富文本编辑器 项目地址: https://gitcode.com/gh_mirrors/wa/wangEditor 在移动优先的时代,富文本编辑器的移动端兼容性已…...
无人机飞控必看:MPU6050互补滤波实战对比测试(DMP vs Mahony)
MPU6050姿态解算实战:Mahony互补滤波与DMP深度对比 去年调试四轴飞行器时,我曾连续72小时盯着屏幕上的姿态角曲线发呆——为什么明明静止的飞控板,Roll角却以每小时5度的速度缓慢偏移?这个困扰无数开发者的经典问题,最…...
实战指南:构建高性能离线语音识别系统的完整方案
实战指南:构建高性能离线语音识别系统的完整方案 【免费下载链接】whisper-base.en 项目地址: https://ai.gitcode.com/hf_mirrors/openai/whisper-base.en 在数据隐私日益受到重视的今天,本地化语音识别技术为处理敏感语音内容提供了安全可靠的…...
如何3分钟免费为Figma安装中文界面插件:设计师效率提升完整指南
如何3分钟免费为Figma安装中文界面插件:设计师效率提升完整指南 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 作为一名中文设计师,你是否曾在使用Figma时因为英…...
R数据可视化进阶|利用Scatterplot3d包打造交互式3D散点图
1. 为什么需要3D散点图可视化 在数据分析工作中,我们经常需要同时观察三个变量之间的关系。传统的2D散点图只能展示两个变量之间的相关性,当我们需要分析三个变量之间的复杂关系时,3D散点图就成为了必不可少的工具。比如在分析鸢尾花数据集时…...
Qwen3-0.6B-FP8与ComfyUI工作流结合:可视化AI应用搭建
Qwen3-0.6B-FP8与ComfyUI工作流结合:可视化AI应用搭建 最近在折腾AI应用的时候,我发现了一个挺有意思的组合:把轻量级的文本生成模型Qwen3-0.6B-FP8,接到ComfyUI这个可视化工作流工具里。听起来可能有点技术,但实际做…...
别再手动录单了!手把手教你用U9C OpenAPI打通钉钉审批流(含完整配置流程)
别再手动录单了!手把手教你用U9C OpenAPI打通钉钉审批流(含完整配置流程) 当财务部的张经理第17次因为手工录入错误被审计部门退回单据时,他摔掉键盘的冲动都有了。这场景在很多企业司空见惯——U9C系统承载着核心业务数据&#…...
如何快速掌握DLSS版本管理:专业用户的5个高效秘诀
如何快速掌握DLSS版本管理:专业用户的5个高效秘诀 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper DLSS Swapper是一款能够让你轻松下载、管理和切换游戏DLSS、FSR和XeSS DLL文件的强大工具。通过这个开源项…...
Python从入门到精通(第11章):函数进阶:作用域与闭包
Python从入门到精通(第11章):函数进阶:作用域与闭包 开头导语 这是本系列第11章。前面你已经掌握函数的基本定义和调用方式,这一章在此基础上向前一步,解决三个实际问题:变量名冲突时 Python 到…...
