Hadoop之MapReduce实现原理-基础篇

这篇具有很好参考价值的文章主要介绍了Hadoop之MapReduce实现原理-基础篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Hadoop之MapReduce实现原理-基础篇

一、基础篇

1. MR设计目标

MR诞生于搜索领域,主要是为了解决海量数据处理扩展性差的问题,它的实现时基于谷歌MR的设计思想,包括简化编程接口、提高系统容错性等。

  1. 易于编程:用户无需关注数据切片、数据传输、节点间通信等,只需要关注业务逻辑的实现,简化了开发过程且提高了开发效率。
  2. 良好的拓展性:当积累的数据量大的时候可以通过添加机器实现集群能力的扩容。
  3. 高容错性:机器存在故障的时候,能够通过计算迁移或者数据迁移等策略提高集群的可用性与容错性。

2. MR编程模型

MR由两个阶段组成:MAP阶段和Reduce阶段,开发者只需要编写Map()方法和reduce()方法即可完成分布式程序的设计。
map():以key/value作为输入,产生另一种key/value作为输出写出到本地磁盘,reduce()会自动将这部分中间数据按照key值进行聚集,且key值相同的数据被同一交给reduce()函数处理。
reduce():以key及对应的value列表作为输入,合并相同key的value后产生另一组key/value作为输出并写入到hdfs。
流程入下图所示:
WordCount程序运行过程

3. MR基本架构

MR采用了Master/Slave架构,如下图所示,主要包含Client、JobTracker、TaskTracker、Task几个组件
image.png

  1. Client:

用户编写的MR通过Client提交到JobTracker端,也可以通过Client查看任务列表和当前运行状态,在Hadoop中作业(Job)表示MR程序,一个MR程序对应多个作业,每个作业会被分解成多个MR任务(Task)。

  1. JobTracker:

JobTracker主要负责资源监控和作业调度,JobTracker监控所有TaskTracker与作业的状态,一旦发现失败情况,立即将对应的任务转移到其他节点,JobTracker也会跟踪任务的执行进度、资源使用量等信息,并将这些信息告诉任务调度器,调度器会在资源出现空闲时,选择合适和任务使用这些资源。

  1. TaskTracker:

TaskTracker会通过Heartbeat将本节点上的资源使用情况和任务的运行进度汇报给JobTracker,并带回JobTracker发送过来的命令并执行响应的操作(启动新任务、杀死任务等)。TaskTracker使用slot等量划分本节点上的资源,一个Task只有获得slot后才有机会运行,TaskTracker通过slot数目限定Task的并发度。

  1. Task:

Task分为MapTask和ReduceTask,HDFS是以固定大小的block为单位存储数据,而MR是以split为单位处理数据,block是物理概念,split是逻辑概念,split只包含一些元数据信息,比如数据起始位置、数据长度、数据所在节点等,split的划分方法是用户自己决定的,但是split的数目决定了MapTask的数目,每个split会交由一个MapTask处理。
split和block的关系如下:
split和block的对应关系

1. MapTask执行过程

  1. MapTask先将对应的split迭代解析成一个个key/value对。
  2. 然后依次调用自定义map()方法,最终将临时结果存放到本地磁盘上。
  3. 临时数据会被分成若干了partition,每个partition对应一个reduceTask处理。

image.png

2. ReduceTask执行过程

  1. 从远程节点上读取mapTask的中间结果(称为shuffle阶段)。
  2. 按照key对key/value进行排序(称为sort阶段)。
  3. 依次读取<key,value list>调用用户自定义的reduce()函数处理,并将结果写入到hdfs上(称为reduce阶段)。

image.png

4. MR作业的生命周期

假设提交一个作业,提交命令如下:

$HADOOP_HOME/bin/hadoop jar xxx.jar \
 -D mapred.job.name="xxx" \
 -D mapred.map.tasks=3 \
 -D mapred.reduce.tasks=2 \
 -D input=/test/input \
 -D output=/test/output

作业运行图如下:
MR作业的生命周期
过程解析(5个步骤):

  1. 作业提交与初始化

用户提交作业后,首先会有JobClient将作业相关信息,比如jar包、作业配置文件、分片元数据文件等上传到HDFS上,其中分片元数据文件记录了每个输入分片的逻辑位置信息,然后由JobClient通过RPC通知JobTracker,JobTracker收到请求后,由作业调度器对作业进行初始化:为作业创建一个JobInProgress对象以跟踪作业运行状况,而JobInProgress会为每一个Task创建一个TaskInProgress对象跟踪每个任务的运行状态,TaskInProgress需要管理多个“Task运行尝试”。

  1. 任务调度与监控

任务调度和监控的功能是由JobTracker完成,TaskTracker周期性的通过Heartbeat向JobTracker汇报本节点的资源使用情况,一旦出现空闲资源,JobTracker将会按照一定的策略选择一个合适的任务使用该空闲资源,这由任务调度器完成,任务调度器是双层架构,即先选择作业,然后从该作业中选择任务,选择任务时需要重点考虑数据本地性,此外,JobTracker跟踪作业的整个运行过程,并为作业的成功运行提供全方位的保障,首先,当TaskTracker或者Task失败时,转移计算任务,其次,当某个Task任务远落后于同一作业的其他Task时,为之启动一个相同Task,并选取计算快的Task结果作为最终结果。

  1. 任务运行环境准备

运行环境准备包括JVN启动和资源隔离,TaskTracker为每个Task启动一个独立的JVM以避免不同Task在运行过程中相互影响,同时,TaskTracker使用了操作系统进程实现资源隔离以防止Task滥用资源。

  1. 任务执行

TaskTracker为Task准备好运行环境后,便会启动Task,在运行过程中,每个Task的最新进度首先由Task通过RPC汇报给TaskTracker,再由TaskTracker汇报给JobTracker。

  1. 作业完成

待所有Task执行完毕后,整个作业执行成功。文章来源地址https://www.toymoban.com/news/detail-449942.html

到了这里,关于Hadoop之MapReduce实现原理-基础篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mysql数据库面试题基础知识,Hadoop之MapReduce04,腾讯java面试流程

    该方法的执行过程比较复杂,我们慢慢来分析,首先来看下简化的时序图 3.1waitForCompletion public boolean waitForCompletion(boolean verbose ) throws IOException, InterruptedException, ClassNotFoundException { // 判断任务的状态,如果是DEFINE就提交 if (state == JobState.DEFINE) { submit(); } if (verbose) { // 监听并且

    2024年04月14日
    浏览(46)
  • 大数据基础篇--MapReduce工作原理

    理解什么是map,什么是reduce,为什么叫mapreduce MapReduce可以分成Map和Reduce两部分理解。 Map详解 1.Map:映射过程,把一组数据按照某种Map函数映射成新的数据。我们将这句话拆分提炼出重要信息,也就是说,map主要是:映射、变换、过滤的过程。一条数据进入map会被处理成多条

    2024年02月04日
    浏览(29)
  • MapReduce基础原理、MR与MPP区别

    MapReduce(MR)本质上是一种用于数据处理的编程模型; MapReduce用于海量数据的计算 , HDFS用于海量数据的存储 (Hadoop Distributed File System,Hadoop分布式文件系统)。 Hadoop MapReduce 是一个编程框架,Hadoop环境中,可运行用各种语言编写的MapReduce程序,用于创建在大型商用硬件集群

    2024年02月14日
    浏览(27)
  • 大数据实战——基于Hadoop的Mapreduce编程实践案例的设计与实现

    图1:MaxCompute MapReduce各个阶段思路设计 设计思路分析分为六个模块:input输入数据、splitting拆分、Mapping映射、Shuffing派发、Reducing缩减、Final result输出。 输入数据:直接读入文本不进行分片,数据项本身作为单个Map Worker的输入。 Map阶段:Map处理输入,每获取一个数字,将数

    2024年02月05日
    浏览(39)
  • 【Hadoop】二、Hadoop MapReduce与Hadoop YARN

    md笔记 1、Hadoop MapReduce 1.1、理解MapReduce思想 MapReduce的思想核心是“ 先分再合,分而治之 ”。 所谓“分而治之”就是把一个复杂的问题,按照一定的“分解”方法分为等价的规模较小的若干部分,然后逐个解决,分别找出各部分的结果,然后把各部分的结果组成整个问题的最

    2024年02月05日
    浏览(47)
  • 【Hadoop】MapReduce详解

    🦄 个人主页 ——🎐开着拖拉机回家_大数据运维-CSDN博客 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁🍁 🪁🍁🪁🍁🪁🍁🪁 🪁🍁🪁🍁🪁🍁🪁🍁🪁🍁🪁🍁 感谢点赞和关注 ,每天进步一点点!加油! 目录 一、MapReduce概述 1. 1 MapReduce 介绍 1.2 MapReduce 定义 1.3 MapReduce优缺点 1.2.1.优

    2024年02月05日
    浏览(40)
  • Hadoop 2:MapReduce

    理解MapReduce思想 MapReduce的思想核心是“先分再合,分而治之”。 所谓“分而治之”就是把一个复杂的问题,按照一定的“分解”方法分为等价的规模较小的若干部分,然后逐个解决,分别找出各部分的结果,然后把各部分的结果组成整个问题的最终结果。 这种思想来源于日

    2024年02月06日
    浏览(34)
  • 【Hadoop】- MapReduce概述[5]

    目录 前言 一、分布式计算框架 - MapReduce 二、MapReduce执行原理 MapReduce是一种 分布式计算框架 ,由Google开发。它的设计目标是将大规模数据集的处理和生成任务分布到一个由廉价计算机组成的集群中。 在MapReduce模型中,输入数据被分割成若干小块,并在集群中的多个节点上并

    2024年04月25日
    浏览(25)
  • Hadoop MapReduce解析

    Hadoop MapReduce是一个用于处理大量数据的编程模型和一个相应的实现框架。MapReduce作业通常分为两个阶段:Map阶段和Reduce阶段。 Map阶段 在Map阶段,你编写的Map函数会对输入数据进行处理。每个输入数据片段(例如一行文本)都会被Map函数处理,并产生中间键值对。 以单词计数

    2024年04月14日
    浏览(24)
  • hadoop之MapReduce简介

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

    2024年02月04日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包