分布式MapReduce原理详解

大数据技术原理与应用4MapReduce、数据仓库Hive、Hadoop再探讨 第7讲 MapReduce 7.1 MapReduce概述 7.2 MapReduce的体系结构 7.3 MapReduce工作流程 7.4 Shuffle过程原理 7.5 MapReduce应用程序执行过程 7.6 实例分析:WordCount 7.7 MapReduce的具体应用 7.8 MapReduce编程实践 第8讲 数据仓库Hive 8.1 数据仓库概念 8.2 Hive简介 8... 阅读详情

MapReduce原理

一、什么是MapReduce?

       MapReduce是一个基于 java 的并行分布式计算框架,使用它来编写的数据处理应用可以运行在大型的商用硬件集群上来处理大型数据集中的可并行化问题,数据处理可以发生在存储在文件系统(非结构化)或数据库(结构化)中的数据上。MapReduce 可以利用数据的位置,在存储的位置附近处理数据,以最大限度地减少通信开销。
        框架通过编组分布式服务器,并行运行各种任务,管理系统各部分之间的所有通信和数据传输;其还能自动完成计算任务的并行化处理,自动划分计算数据和计算任务,在集群节点上自动分配和执行任务以及收集计算结果,将数据分布存储、数据通信、容错处理等并行计算涉及到的很多系统底层的复杂细节交由系统负责处理,减少开发人员的负担。

MapReduce框架通常由三个操作(或步骤)组成:

  1. Map:每个工作节点将map 函数应用于本地数据,并将输出写入临时存储。主节点确保仅处理冗余输入数据的一个副本。
  2. Shuffle:工作节点根据输出键(由 map 函数生成)重新分配数据,对数据映射排序、分组、拷贝,目的是属于一个键的所有数据都位于同一个工作节点上。
  3. Reduce:工作节点现在并行处理每个键的每组输出数据。

MapReduce

map任务处理

首先HDFS block块按照字节来切割,
block=split切片=map task(split比block大几KB或小几kb,因为切割时候按照字节来切,可能会将完整的字符串切割在不同block块)

1. shufflewriter
  1. 读取HDFS中的文件。每一行解析成一个<k,v>。每一个键值对调用一次map函数。
  2. 覆盖map(),接收1.1产生的<k,v>,进行处理,转换为新的<k,v>输出。
  3. 处理所有相关的键值对,然后将map task处理后的数据进行分区,分区的目的就是为了让这一条知道将来被哪一个reduce task处理,分区是由分区器进行的,默认的分区器是HashPartitioner,分区的策略是根据key的HashCode与reduce task NUM 取模(第一次排序)
  4. 进行buffer之后的每一条记录是由三部分组成(分区号,key,value)
    map task一条一条的往buffer中去写数据,一旦写入到80mb,此时他会将这80m的内存封锁,封锁后会对内存中的数据进行combiner(小聚合),对不同分区中的数据进行排序(按照k,分区号)、分组。将相同分区的数据放在一起,并且分区内的数据是有序的。(第二次排序)
  5. 以上的combiner以及排序完成后就开始溢写数据到磁盘上,此时的磁盘文件就是一个根据分区号分好区的,并且内部是有序的文件,每进行一次溢写就会产生一个磁盘小文件。combiner——>sort——>spill
  6. map task 计算完毕后,会将磁盘上的小文件合并成一个大文件,在合并的是偶会使用归并排序的算法,将各个小文件合并成一个有序的大文件(第三次排序)
    每一个map task都会经过以上所说所有一切,也就是每一个map task都会产生一个有分区的并且分区内部有序的大文件
2. shuffle read
  1. 去map端读取相应的分区数据,将分区数据写入到内存中,内存满了就会溢写,溢写之前会排序,当把所有数据取过来后,会将溢写产生的磁盘小文件合并 然后排序。形成有序的大文件(第四次排序)
    为什么要产生一个有序的大文件?
    就是为了提高分组的分组效率,四次排序都是为了提高分组效率

Reduce任务处理

  1. 多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点上。
  2. 对多个map的输出进行合并、排序。覆盖reduce函数,接收的是分组后的数据,实现自己的业务逻辑,处理后,产生新的<k,v>输出。
  3. 对reduce输出的<k,v>写到HDFS中。

相关技术点

  • map task
  •         在进行map计算之前,mapreduce会根据输入文件计算输入分片(input split),每个输入分片(input split)针对一个map任务,输入分片(input split)存储的并非数据本身,而是一个分片长度和一个记录数据的位置的数组。
    Hadoop 2.x默认的block大小是128MB,Hadoop 1.x默认的block大小是64MB,可以在hdfs-site.xml中设置dfs.block.size,注意单位是byte。

  • Partition
  •         Partition是分割map每个节点的结果,按照key分别映射给不同的reduce,也是可以自定义的。这里其实可以理解归类。Partitioner接口可以根据key或value、以及reduce的数量来决定当前的map输出结果由哪个reduce处理。(默认方式是,计算key的哈希值,再对reduce数量取模。比如,计算得到的值是0,则指定第一个reduce处理)

  • combine
  •         combine分为map端和reduce端,作用是把同一个key的键值对合并在一起,可以自定义的。
    combine函数把一个map函数产生的<key,value>对(多个key,value)合并成一个新的<key2,value2>.将新的<key2,value2>作为输入到reduce函数中

  • Spill
  •         map输出时使用的内存缓冲区有大小限制,默认是100MB。当输出结果很多时,内存就会被填满,因此需要将缓冲区的数据写入磁盘,然后重新使用这块缓冲区。这个从内存往磁盘写数据的过程被称为Spill(溢出写)。
            map溢出写由单独一个线程负责,不影响往缓冲区写map结果的线程。所以在溢出写的过程中,map输出结果会继续被写入内存。当缓冲区的数据达到阈值(默认是80%,由属性 io.sort.spill.percent 设定),溢出写线程启动,对这80%的内存进行溢出写操作。
    在溢出写把map结果写到磁盘之前,需要进行两个重要的操作:sort(排序)和combine(合并)。
            msort是把这80%的map结果按照key排序。
            另外,因为一个map的输出结果会由不同的reduce处理(不同的key通过partition操作计算出来的值不同),所以要将属于同一个reduce处理的输出结果进行combine操作。

  • Merge
    每次溢出写都会在磁盘上生成一个溢出写文件,如果map输出结果很大,那么将会生成多个溢出写文件。(当map任务完成时,会把内存缓冲区中最后的结果也写到一个溢出写文件中)。为了方便后续阶段reduce来获取输出结果,这些溢出写文件将会被合并成一个文件,这就是merge操作。
MapReduce基本原理(详解!) 目录一、概念理解二、MapReduce计算模型三、Map shuffle(1)Partition(2)Collector(3)Sort(4)Spill(5)Merge四、Reduce shuffle(1)Copy(2)Merge Sort 一、概念理解 MapReduce是面向大数据并行处理的计算模型、框架和平台,它隐含了以下三层含义: 1)MapReduce是一个基于集群的高性能并行计算平台。它允许用市场上普通的商用服务器构成一个包含数十、数百至数千个节点的分布和并行计算集群。 2)MapReduce是一 阅读详情

相关推荐

MapReduce超详解

MapReduce超详解

m0_51388399的博客 2034

MapReduce shuffle过程详解

一、MapReduce计算模型 我们知道MapReduce计算模型主要由三个阶段构成:Map、shuffle、Reduce。 Map是映射,负责数据的过滤分法,将原始数据转化为键值对;Reduce是合并,将具有相同key值的value进行处理后再输出新的键值对作为最终结果。为了让Reduce可以并行处理Map的结果,必须对Map的输出进行一定的排序与分割,然后再交给对应的Reduce,而这个将Map输出进行进一...

weixin_42265234的博客 1809

【脚本篇】---spyglass lint脚本

【代码】【脚本篇】---spyglass lint脚本。

冬瓜 6355

MapReduce原理剖析

MapReduce是一种分布式计算模型,是Google提出来的,主要用于搜索领域,解决海量数据的计算问 题. MapReduce是分布式运行的,由两个阶段组成:Map和Reduce, Map阶段是一个独立的程序,在很多个节点同时运行,每个节点处理一部分数据。 Reduce阶段也是一个独立的程序,可以在一个或者多个节点同时运行,每个节点处理一部分数据在这我们先把reduce理解为一个单独的聚合程序即可。 在这map就是对数据进行局部汇总,reduce就是对局部数据进行最终汇总。 结合到我们前面分析的统计黑桃的

简单随风的博客 5048

【原创,解决CLodop安装后无法调用的问题】已经安装过CLodop,但是网页上仍然提示“clodop云打印服务(localhost本地)未安装启动,点击这里执行安装....”

在某些国内web网站中,需要安装一个名为“CLodop”的插件;但在实际使用过程中,即使安装了CLodop插件,网页试图调用它时还是会提示“clodop云打印服务(localhost本地)未安装启动,点击这里执行安装...”,且无法完成相关打印任务 本文属原创博客,分析了解决CLodop无法被调用的问题,并附上了原理和解决方法,本质上是和跨域请求以及CORS类安全组策略相关

link_in_csdn的博客 2万+

Flink实战项目——城市交通实时监控平台

本项目是与公安交通管理综合应用平台、机动车缉查布控系统等对接的,并且基于交通部门现有的数据平台上,进行的数据实时分析项目。

yangwei2048的博客 836

大数据基础篇--MapReduce工作原理

mapreduce

qq_43709558的博客 1万+

新手小白如何学习编程

学习目标推荐第一门语言优势网站 / APP 开发(前端)JavaScript浏览器原生支持,能快速做出可视化效果后端 / 服务器 / 数据分析Python语法简洁像英语,库多、应用广(入门友好)游戏开发先用电竞入门,再转专业引擎硬件 / 嵌入式(比如单片机)C 语言贴近硬件,行业标准办公自动化(Excel / 文档处理)Python快速解决重复工作(比如批量改文件)👉新手首选推荐。

2501_94331842的博客 2232

MapReduce的原理分析

MapReduce的思想核心是“分而治之,先分再合”,适用于大量复杂任务处理场景(大规模数据处理场景)。map阶段(分):如果任何可以拆分并且没有依赖,那么就把复杂的任务拆分成小任务,拆分成小任务之后,可以并行计算,提高处理效率。reduce阶段(合):把map阶段的各个局部结果进行全局汇总,得到最终的结果生活中的MapReduce案例:统计图书馆的书籍总数“Map”:你数1号书架,我数2号书架。我们人越多,数书就更快。“Reduce”:我们到一起,把所有人的统计数加在一起。

weixin_44852067的博客 3198

Mamba-YOLO训练前必看:从环境配置到数据集调整的完整流程

本文详细介绍了Mamba-YOLO目标检测框架的完整训练流程,包括环境配置、数据集优化和模型调参。从硬件准备到依赖安装,再到数据增强和超参数调整,提供了一系列实用技巧和常见问题解决方案,帮助开发者高效训练Mamba-YOLO模型,避免常见踩坑记录。

tech5的博客 826

肖特基二极管的反向恢复过程

本博客简述肖特基二极管反向恢复过程。

记得诚 1万+

MapReduce 工作原理

MapReduce的工作原理

m0_72168501的博客 4856

2026工控高薪:C#上位机面试15题(含答案)

基础岗(10-15K):考察串口/Modbus/PLC通信基础;资深岗(20-30K):考察工业级优化(抗干扰/断线重连)、物联网(MQTT)、跨协议整合;架构岗(30K+):考察上位机架构设计、边缘计算、项目落地避坑。我整理了2026年近20场高薪岗位(月薪20K+)的面试高频题,筛选出15道核心题,每题标注“考察点+实战答案”——答案拒绝纯理论,全部结合车间现场、PLC通信、物联网落地等真实场景,帮你避开“背答案但不落地”的面试坑。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1273

【机器学习实战】第15章 大数据与 MapReduce

第15章 大数据与MapReduce 大数据 概述 大数据: 收集到的数据已经远远超出了我们的处理能力。 大数据 场景 假如你为一家网络购物商店工作,很多用户访问该网站,其中�有些人会购买商品,有些人则随意浏览后就离开。 对于你来说,可能很想识别那些有购物意愿的用户。 那么问...

chimoren0700的博客 416

YOLO11全网首发:CVPR2026 MixerCSeg | DEGConv方向引导边缘门控,破解细长裂缝检测难题

DEGConv通过方向先验嵌入、边缘增强卷积和动态门控三大机制,针对性解决了YOLO在处理裂缝类细长、多方向、低对比度目标时的特征提取不足问题,显著提升了裂缝检测的精度与鲁棒性。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 560

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

大数据:Hadoop(MapReduce)

MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。

2302_80219214的博客 768

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

MapReduce数据格式详解

MapReduce数据处理的核心概念是键值对(Key-Value Pair)格式,所有数据都以<Key, Value>形式流转。

m0_57356943的博客 409

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

mapreducer--1

什么是mapreducer?优点和缺点? Mapreduce 分布式编程框架 1.优点 1.易于编程(实现一些接口) 良好扩展性(简单增加机器) 高容错性 离线处理 缺点: 不擅长实时计算 不擅长流式计算 不擅长DAG计算(有向图)因为造成大量磁盘io 2.mapreducer编程思想 MapReduce采用"分而治之"的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然...

u010160949的博客 323

Hadoop 分布式集群实战 1—— 集群搭建与在线扩容

本文围绕 Hadoop 分布式框架部署实践展开,先梳理 HDFS、YARN、MapReduce 核心架构与运行流程;再依次介绍单机伪分布式、多节点完全分布式两种部署模式,完成基础集群环境搭建,并演示集群在线扩容操作,实现在不停服的前提下扩展存储与计算资源。

2302_80853486的博客 372

大数据运维---大数据分布式集群

简单说:Hadoop 是一套开源的分布式大数据处理框架,专门用来在大量普通服务器上,存储和计算超大规模数据,单机搞不定的事,它靠一堆机器一起干。一句话来说就是Hadoop = 分布式存储 + 分布式资源管理 + 分布式计算,是大数据领域最基础、最经典的一套技术体系。3、需要高可靠、可扩展的大数据存储与批处理。但对新手来说,运行环境搭建不成功的概率。还很高,所以,在正式开始搭建集群前做好集群规。1、数据太大,一台服务器存不下、算不动。5、A给B发送一个信息,B说没有收到?分配任务,协调谁干什么、用多少资源。

2401_89360870的博客 373

PowerJob Python任务开发终极指南:跨语言分布式调度实战教程

想要在企业级应用中轻松调度Python脚本任务吗?PowerJob作为一款强大的分布式任务调度中间件,为开发者提供了完美的Python任务调度解决方案。本教程将带你深入了解如何在PowerJob中高效开发Python任务,实现跨语言分布式调度的完整流程。💪 [![PowerJob分布式任务调度框架](https://raw.gitcode.com/gh_mirrors/po/PowerJob/

gitblog_01090的博客 448

MIT 6.5840 Lab1通关实录:用Go实现MapReduce的踩坑与调试技巧

本文分享了MIT 6.5840分布式系统课程Lab1的实战经验,详细解析了如何用Go语言实现MapReduce框架。文章聚焦于核心调试技巧与工程实践,包括如何设计任务状态机、实现稳定的RPC通信、通过test-mr.sh测试以及处理竞态条件和容错机制,帮助开发者高效完成实验并深入理解分布式系统原理。

c2d3e4f的博客 457

【MapReduce分布式并行编程模型】

在2005年前后,CPU领域的“摩尔定律”逐渐失效,为了提高程序的运行性能,人们就不能把过多的希望寄托在提升CPU性能上来,因此人们开始着眼于分布式并行编程模型来提高程序的性能,MapReduce就是由谷歌公司率先提出的分布式并行编程模型。补充:传统的程序都是以单指令、单数据流的方式顺序执行,这虽然符合人们日常的思维逻辑,但是程序的性能受到了很大的限制。分布式并行程序可以运行由大量计算机构成的集群上,从而可以充分利用集群的并行计算的能力,同时通过向集群中增加新的计算节点就可以很容易的实现算力的扩充。

Lucky.Mr.Li的博客 475

MapReduce框架原理

MapReduce是一种分布式计算框架,最初由Google设计和实现,用于处理大规模数据集的并行计算。它的核心思想是将大规模数据集分解成多个小的子任务,并在分布式计算环境中并行地进行处理和计算。MapReduce框架的设计目标是简化并行计算的编程模型,使开发人员能够更轻松地编写并行计算任务,而不用关心底层的分布式细节。

阿莫夕林的博客 4969

MAPREDUCE详解

1. MAPREDUCE原理篇(1) Mapreduce是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析应用”的核心框架; Mapreduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个hadoop集群上; 1.1 为什么要MAPREDUCE (1)海量数据在单机上处理因为硬件资源限制,无法胜任 (2)而一旦将单机版程序扩展到集群来分布式运行,将极大增加程序的复杂度和开发难度 (3)引入mapreduce框架后,开发人员

woaini886353的博客 1万+

Hadoop MapReduce八大步骤以及Yarn工作原理详解

Hadoop是市面上使用最多的大数据分布式文件存储系统和分布式处理系统, 其中分为两大块分别是hdfs和MapReduce, hdfs是分布式文件存储系统, 借鉴了Google的GFS论文. MapReduce是分布式计算处理系统, 借鉴了Google的MapReduce论文. 本文着重来梳理下新版也就是2.3后的Hadoop的MapReduce部分, 也就是Yarn框架, 以及MapReduce...

面向星辰大海 1万+
上一篇: 大数据相关知识点总结汇总
下一篇: Hadoop1.x版本和Hadoop2.x版本架构原理
thyyyyyyy
博客等级 码龄8年 16粉丝 15原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值