【大数据】计算引擎MapReduce

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 【大数据】计算引擎MapReduce

1.概述

1.1.前言

本文是作者大数据系列专栏的其中一篇

本文将会聊一下计算引擎MapRedduce,深入浅出快速过一遍MapReduce的核心概念和原理,不涉及具体操作,具体操作将会在下文聊。

1.2.大数据要怎么计算?

大数据集的数据是海量的,动辄几十上百TB,为了能将其存下来都是采用的分布式存储,将整个数据集分散到多个节点上去。要对其做统计之类的计算时,肯定不能数据向计算靠拢,将数据全部读到一个跑计算任务的节点上来进行计算,只能计算向数据靠拢,将计算任务放到存储数据的各个节点上去。并行的对整个大数据集进行计算,最后汇总成一个结果。


1.3.什么是MapReduce?

上面描述的过程要做的工作还是很多的,管理并行的计算任务,将任务分发到各个节点上去,最后还要汇总结果,手动编码实现整个管理过程的话还是很复杂的。mapreduce作为一个并行编程框架,帮我们屏蔽掉了这一系列实现细节,让开发人员可以借助API专注的进行计算逻辑的编写。


mapreduce分为两阶段:map、reduce。


map阶段会将计算任务分发到各个数据存储节点上去跑任务,实现对大数据集的并发处理。


reduce阶段会汇总map阶段各节点上计算任务算出来的结果,聚合成最终的结果。


上述过程不难发现,mapreduce就是个主从架构的:


master节点负责总的调度、slave节点负责具体跑任务。


master:集群内有一个master服务器、也是作业追踪器JobTracker、负责整个作业的调度和处理。


slave:集群内有多个slave服务器,也是执行具体任务的TaskTracker、负责完成具体的任务。


以一个分词统计的mapreduce为例:


0082be64c505432087015361e732e793.png


2.架构

f642425507e14f3f862e818ea69d68dc.png


Client端将任务发给JobTracker,JobTracker负责监控Job的健康状况,控制TaskTracker。JobTracker通过心跳的方式和各个TaskTracker保持联络,TaskTracker将自身的资源使用情况、任务执行进度等信息告知JobTracker。Task Scheduler负责任务的分发规则,决定最终将任务分发给谁。


TaskTracker如何衡量自身的资源使用情况?


tasktracker会将自身所在的机器的内存、CPU等资源视为一个整体,然后将其划分为一份份的slot,根据执行job需要的资源的不同,分为两种slot,map的slot和reduce的slot。taskTracker上报的资源使用情况就是自身两类slot的使用情况。


task分为两种:map task、reduce task,对应着各自执行的是map函数、reduce函数。


3.工作流程

以下是大致过程:


f7107a7ca3dd42e1953f51fee987fb27.png


由于大数据集在存储的时候是分片开来,分布式存储的,所以对于map而言,输入就是数据分片。


注意1:


mapreduce处理的并不一定是单个数据,很可能处理的是整个大数据集,所以mapreduce面对的文件的分片数是不固定的,毕竟每一份文件的大小都不一样,分片数肯定不一样。所以map和分片之间不是一一对应的关系,不是说当前处理的文件有多少个分片就有多少个map,上面只是一个逻辑过程,后面会说map和分片的关系。


注意2:


map和reduce不一定是在一台机器上完成的。如果数据分片所在的服务器是台tasktracker并且有map solt可用,那么map肯定是在那台机器上完成的。如果那台机器不是台tasktracker或者没有map solt可用,那么会选择离那台机器最近的满足可做map任务的机器来处理map任务。也就是说一般map是和数据集呆在一起的(隔得近我们也可理解为趋近于本地),但是reduce可能是被分配到其它机器上完成的,因为reduce阶段需要传输的数据量已经不大了,输入只是个中间结果而已,这时候距离不是问题,效率是核心,谁算的快(reduce slot多)谁来。


以下是详细过程:


3414d47a217b49abaade14d8ead41ac9.jpg


将文件读出来


将文件切割一下(split)


map运算(该有几个map任务?)


算出中间结果(shuffle)


reduce运算


算出最终结果


该有几个map任务?map和分片的数量是一致的吗?map和分片之间是一一对应的吗?


答案是:不是。


开多少map是不固定的,取决于有多少资源(map solt),所以才有了split这一步,split这一步会将数据进行切分,切出来的再交给各个map。每个map只专注于处理自己的要负责的split,这也避免了并发带来的数据安全问题。


4.shuffle

有没有发现mapreduce,map其实很简单,reduce也很简单,但是这个算出中间结果(shuffle)这一步有点绕。接下来我们详细拆解map和reduce和过程看看它是如何完成shuffle的。


4.1.map过程

以下展示的仅仅是一个map过程:


ffbb1f8df0bd4b5087694dd7dde863f4.png


HDFS中的数据集输入,为了加速,对输入数据split,分为多个map来并发处理,一个map一个split。处理结果存在缓存中,溢写到磁盘上。溢写的时候进行分区、排序、合并,其中合并很重要:


合并:

4.2.reduce过程

一个reduce接收的输入是来自多个map的,所以首先是将多个map传过来的结果归并起,再交给reduce来使用。下面是完整过程:

假设来自多个map的数据合起来的数据集是:

先进行排序:

进行归并:



相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
1月前
|
分布式计算 大数据 分布式数据库
"揭秘HBase MapReduce高效数据处理秘诀:四步实战攻略,让你轻松玩转大数据分析!"
【8月更文挑战第17天】大数据时代,HBase以高性能、可扩展性成为关键的数据存储解决方案。结合MapReduce分布式计算框架,能高效处理HBase中的大规模数据。本文通过实例展示如何配置HBase集群、编写Map和Reduce函数,以及运行MapReduce作业来计算HBase某列的平均值。此过程不仅限于简单的统计分析,还可扩展至更复杂的数据处理任务,为企业提供强有力的大数据技术支持。
40 1
|
4月前
|
存储 分布式计算 算法
【底层服务/编程功底系列】「大数据算法体系」带你深入分析MapReduce算法 — Shuffle的执行过程
【底层服务/编程功底系列】「大数据算法体系」带你深入分析MapReduce算法 — Shuffle的执行过程
72 0
|
21天前
|
分布式计算 大数据 Hadoop
MapReduce:大数据处理的基石
【8月更文挑战第31天】
34 0
|
21天前
|
机器学习/深度学习 分布式计算 算法
MaxCompute 的 MapReduce 与机器学习
【8月更文第31天】随着大数据时代的到来,如何有效地处理和分析海量数据成为了一个重要的课题。MapReduce 是一种编程模型,用于处理和生成大型数据集,其核心思想是将计算任务分解为可以并行处理的小任务。阿里云的 MaxCompute 是一个面向离线数据仓库的计算服务,提供了 MapReduce 接口来处理大规模数据集。本文将探讨如何利用 MaxCompute 的 MapReduce 功能来执行复杂的计算任务,特别是应用于机器学习场景。
32 0
|
1月前
|
存储 分布式计算 算法
"揭秘!MapReduce如何玩转压缩文件,让大数据处理秒变‘瘦身达人’,效率飙升,存储不再是烦恼!"
【8月更文挑战第17天】MapReduce作为Hadoop的核心组件,在处理大规模数据集时展现出卓越效能。通过压缩技术减少I/O操作和网络传输的数据量,不仅提升数据处理速度,还节省存储空间。支持Gzip等多种压缩算法,可根据需求选择。示例代码展示了如何配置Map输出压缩,并使用GzipCodec进行压缩。尽管压缩带来CPU负担,但在多数情况下收益大于成本,特别是Hadoop能够自动处理压缩文件,简化开发流程。
29 0
|
3月前
|
存储 分布式计算 并行计算
【大数据】计算引擎:Spark核心概念
【大数据】计算引擎:Spark核心概念
85 0
|
3月前
|
分布式计算 自然语言处理 大数据
【大数据】MapReduce JAVA API编程实践及适用场景介绍
【大数据】MapReduce JAVA API编程实践及适用场景介绍
78 0
|
4月前
|
分布式计算 数据可视化 Hadoop
大数据实战——基于Hadoop的Mapreduce编程实践案例的设计与实现
大数据实战——基于Hadoop的Mapreduce编程实践案例的设计与实现
758 0
|
4月前
|
分布式计算 资源调度 Hadoop
java与大数据:Hadoop与MapReduce
java与大数据:Hadoop与MapReduce
47 0
|
4月前
|
分布式计算 Hadoop
Hadoop系列 mapreduce 原理分析
Hadoop系列 mapreduce 原理分析
67 1