Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Hadoop阅读笔记(四)——一幅图看透MapReduce机制

Hadoop阅读笔记(四)——一幅图看透MapReduce机制

作者头像
JackieZheng
发布于 2018-01-08 09:25:37
发布于 2018-01-08 09:25:37
8040
举报
文章被收录于专栏:JackieZhengJackieZheng

  时至今日,已然看到第十章,似乎越是焦躁什么时候能翻完这本圣经的时候也让自己变得更加浮躁,想想后面还有一半的行程没走,我觉得这样“有口无心”的学习方式是不奏效的,或者是收效甚微的。如果有幸能有大牛路过,请指教如何能以效率较高的方式学习Hadoop

  我已经记不清圣经《hadoop 实战2》在我手中停留了多久,但是每一页每一章的翻过去,还是在脑壳里留下了点什么。

  一段时间以来,我还是通过这本书加深以及纠正了我对于MapReduceHDFS乃至Hadoop的新的认识。本篇主要介绍MapReduce作业的工作机制,并介绍介于Map和Reduce过程中的Shuffle和排序过程。

  为响应标题,我们今天谈的MapReduce机制,切入点是一张图。先上图:

  从图中不难看出,整个MapReduce分为以下流程:代码编写->作业配置->作业提交->Map任务的分配和执行->处理中间结果->Reduce任务的分配和执行->作业完成

  图中:

  1.运行作业

  2.获取作业ID

  3.复制作业资源

  4.提交作业

  5.初始化作业

  6.获取输入分割

  7.心跳通信

  8.获取作业资源

  9.发布

  10.运行

  以上过程主要涉及到的实体有客户端(用于MR代码的编写,配置作业,提交作业);TaskTracker(保持与JobTracker通信,在分配的数据片段上执行Map或Reduce任务);HDFS(保存作业的数据、配置信息、作业结果等);JobTracker(初始化作业,分配作业,与TaskTracker通信,协调整个作业的执行)

  提交作业

  在提交作业前,我们需要对作业进行配置,主要包括:

  (1)程序代码

  (2)Map和Reduce接口

  (3)输入输出路径

  (4)其他配置,如InputFormat、OutputFormat等

  提交作业的过程可以分为以下几步:

  (1)调用JobTracker对象的getNewJobId()方法从JobTracker处获取当前作业的ID(见途中步骤2)

  (2)检查作业相关路径,在运行代码时,经常遇到报错提示输出目录已存在,所以在运行代码前要确保输出目录不存在

  (3)计算作业的输入划分

  (4)将运行所需资源(如jar文件、配置文件、计算所得输入划分等)复制到作业对于的HDFS上(见步骤3)

  (5)调用JobTracker对象的submitJob()方法来真正提交作业,通知JobTracker作业准备执行(见步骤4)

  初始化作业

  JobTracker在客户端调用其submitJob()方法后,会将此调用放入内部的TaskScheduler变量中,进行调度,默认调度方法为:JobQueueTaskScheduler即FIFO调度方式。

  初始化作业分为如下几个步骤:

  (1)从HDFS中读取作业对应的job.split(见步骤6),JobTracker从HDFS中作业对应的路径获取JobClient在步骤3中写入的job.split文件,得到输入数据的划分信息,为后面初始化过程中Map任务的分配做好准备。

  (2)创建并初始化Map任务和Reduce任务。

  (3)创建两个初始化Task,根据个数和输入划分已经配置的信息,并分别初始化Map和Reduce。

  分配任务:

  TaskTracker和JobTracker之间的通信和任务分配都是通过心跳机制完成的。TaskTracker会以一定间隔时间向JobTracker发送心跳,告诉自己是否存活,准备执行新任务;而JobTracker在接收到心跳信息后会查看是否有待分配任务,如果有,则会分配给TaskTracker。

  执行任务:

  当TaskTracker接收到新任务时就要开始运行任务,第一步就是将任务本地化,将任务所需的数据、配置信息、程序代码从HDFS复制到TaskTracker本地(将步骤8)。该过程主要通过localizeJob()方法来实现任务的本地化,具体包括以下几个步骤:

  (1)将job.split复制到本地

  (2)将job.jar复制到本地

  (3)将job的配置信息写入job.xml

  (4)创建本地任务目录,解压job.jar

  (5)调用launchTaskForJob()方法发布任务(见步骤9)

  更新任务执行进度和状态:

  由MapReduce作业分割成的每个任务中都有一组计数器,他们对任务执行过程中的进度组成事件进行计数。如果任务要报告进度,它便会设置一个标志以表明状态变化将会发送到TaskTracker上,另一个监听线程检查到这标志后,会告知TaskTracker当前的任务状态。

  完成作业:

  所有TaskTracker任务的执行进度信息都汇总到JobTracker处,当JobTracker接收到最后一个任务的已完成通知后,便把作业的状态设置为“成功”。

  Shuffle和排序:

  在Map和Reduce之间有一个叫做Shuffle的过程,主要的工作是将Map的输出结果进行一定的排序和分割再交给Reduce,从某种程度上说,Shuffle过程的性能与整个MapReduce的性能直接相关。

  Shuffle过程分为Map和Reduce端。Map端的Shuffle过程是对Map的结果进行划分(partition)、排序(sort)和分割(spill),然后将属于同一个划分的输出合并在一起(merge)并写在磁盘上,同时按照不同的划分将结果发送给对应的Reduce(Map输出的划分与Reduce的对应关系由JobTracker确定)。

  Reduce端又会将各个Map送来的属于同一个划分的输出进行合并(merge),然后对merge的结果进行排序,最后交给Reduce处理。

  对于Hadoop等大数据技术有兴趣的欢迎加群413471695交流讨论^_^

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-02-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Hadoop(十四)MapReduce原理分析
  上一篇我们分析了一个MapReduce在执行中的一些细节问题,这一篇分享的是MapReduce并行处理的基本过程和原理。
大道七哥
2019/09/10
9090
Hadoop(十四)MapReduce原理分析
Hadoop(十四)MapReduce原理分析
前言   上一篇我们分析了一个MapReduce在执行中的一些细节问题,这一篇分享的是MapReduce并行处理的基本过程和原理。   Mapreduce是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析应用”的核心框架。   Mapreduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个hadoop集群上。 一、MapReduce并行处理的基本过程   首先要说明的是Hadoop2.0之前和Hadoop2.0之后的区别:      2.
用户1195962
2018/01/18
4.9K0
Hadoop(十四)MapReduce原理分析
MapReduce的工作原理
我们知道MapReduce诞生与搜索邻域,主要解决的是海量数据处理扩展性差的问题。
Tim在路上
2020/08/05
1.1K0
MapReduce的工作原理
Hadoop前世今生
本文从Hadoop(1.0)系统中调度策略的角度展开讨论。这本质还是对Hadoop的集群资源进行管理,主要有四个方面:
章鱼carl
2022/03/31
1K0
Hadoop前世今生
Hadoop 面试,来看这篇就够了
原文链接 | http://www.jianshu.com/p/c97ff0ab5f49
数据和云
2018/07/27
5960
Hadoop 面试,来看这篇就够了
Hadoop的HDFS和MapReduce
HDFS是一个具有高度容错性的分布式文件系统,适合部署在廉价的机器上,它具有以下几个特点:
星哥玩云
2022/07/03
4930
Hadoop的HDFS和MapReduce
EMR(弹性MapReduce)入门之计算引擎Spark、Tez、MapReduce区别(八)
Spark Core:包含Spark的基本功能;尤其是定义RDD的API、操作以及这两者上的动作。其他Spark的库都是构建在RDD和Spark Core之上的。
小司机带你入门EMR
2020/02/11
2.7K0
Hadoop MapReduce 工作过程
一个MapReducer作业经过了input,map,combine,reduce,output五个阶段,其中combine阶段并不一定发生,map输出的中间结果被分到reduce的过程成为shuffle(数据清洗)。
smartsi
2019/08/07
1.3K0
Hadoop作业提交与执行源码分析
Hadoop作业提交与执行源码分析 1  概述 Job执行整体流程图 2  Job创建与提交过程 2.1         Configuration类 Configuration类定义了如下私有成员变量: /*第一个是boolean型变量quietmode,用于设置加载配置的模式。通过阅读源代码就可以清楚,这个quietmode如果为true,实际上默认就为true,加载配置的模式为快速模式,其实也就是在解析配置文件的过程中,不输出日志信息的模式*/ private boole
闵开慧
2018/03/30
1.7K0
MapReduce工作流程最详细解释
MapReduce是我们再进行离线大数据处理的时候经常要使用的计算模型,MapReduce的计算过程被封装的很好,我们只用使用Map和Reduce函数,所以对其整体的计算过程不是太清楚,同时MapReduce1.0和MapReduce2.0在网上有很多人混淆。
Tim在路上
2020/08/05
7400
MapReduce工作流程最详细解释
Java核心知识点整理大全25-笔记
就是一个大数据解决方案。它提供了一套分布式系统基础架构。 核心内容包含 hdfs 和 mapreduce。hadoop2.0 以后引入 yarn. hdfs 是提供数据存储的,mapreduce 是方便数据计算的。
用户10920956
2024/01/18
1610
Java核心知识点整理大全25-笔记
Hadoop的JobTracker和TaskTracker在MapReduce中的作用是什么?
在Hadoop的MapReduce框架中,JobTracker和TaskTracker是两个关键组件,分别扮演着不同的角色。
GeekLiHua
2025/01/21
1870
MapReduce分布式编程
MapReduce是一个分布式运算程序的编程框架,用于大规模数据集的并行处理,是用户开发“基于Hadoop的数据分析应用”的核心框架。MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。 MapReduce将一个数据处理过程拆分为Map和Reduce两部分:Map是映射,负责数据的过滤分发;Reduce是规约,负责数据的计算归并。开发人员只需通过编写Map和Reduce函数,不需要考虑分布式计算框架内部的运行机制,即可在Hadoop集群上实现分布式运算。引入MapReduce框架后,开发人员可将精力集中在业务逻辑的开发上,分布式计算的复杂性交由框架来处理。MapReduce把对数据集的大规模操作分发到计算节点,计算节点会周期性地返回其工作的最新状态和结果。如果节点保持沉默超过一个预设时间,主节点则标记该节点为死亡状态,并把已分配给这个节点的数据发送到别的节点重新计算,从而实现数据处理任务的自动调度。
Francek Chen
2025/01/22
1710
MapReduce分布式编程
图文简述MapReduce(一)
提到大数据,其实最核心的在于计算,像双11实时统计交易量、智慧交通实时统计拥堵指数,这些离不开高并发计算。经常我们在听到mapreduce、以及spark、hive、pig、spark streaming、Storm,很多词语让我们迷茫,但实际万变不离其中,计算最核心的还是在于mapreduce。因此了解mapreduce的运行原理是必须的。
希望的田野
2019/09/24
6410
图文简述MapReduce(一)
hadoop|计算框架从MapReduce1.0到Yarn
01 — HDFS 前面介绍了hadoop的分布式存储框架(HDFS),这个框架解决了大数据存储的问题,这是第一步。知道海量数据如何存储后,脚步不能停留,下一步要设计一个框架,用来玩(计算)这些数据时,资源(计算机集群)该如何调度,比如已知1PB的数据存储在了集群(1000台电脑组成)中的10台计算机(DataNode)中,现在要对这些数据进行Map和Reduce计算,该如何做呢? 在理解以下知识前,需要理解一些知识点。任何应用,比如打开一个word文档,打开QQ,都会占用一定的系统资源(CPU,内存,网
double
2018/04/02
1.5K0
hadoop|计算框架从MapReduce1.0到Yarn
Hadoop实战
1.Hadoop是一个开源分布式计算平台,以HDFS(Hadoop Distributed Filesystem,Hadoop分布式文件系统)和MapReduce为核心,为用户提供了系统底层细节透明的分布式基础架构
硬核项目经理
2019/08/06
1.6K0
Hadoop的分布式计算系统MapReduce
在MapReduce中要求被传输的数据能够被序列化 MapReduce中的序列化机制使用的是AVRO,MapReduce对AVRO进行了封装 被传输的类实现Writable接口实现方法即可
姜同学
2022/10/27
6110
Mapreduce实现原理总结
一.首先,我们从客户端,JobTracker,TaskTracker这个层面来分析整个mapreduce过程
z小赵
2018/09/05
8550
Mapreduce实现原理总结
【小白视角】大数据基础实践(五) MapReduce编程基础操作
ResourceManager • 处理客户端请求 • 启动/监控ApplicationMaster • 监控NodeManager • 资源分配与调度 NodeManager • 单个节点上的资源管理 • 处理来自ResourceManger的命令 • 处理来自ApplicationMaster的命令 ApplicationMaster • 为应用程序申请资源,并分配给内部任务 • 任务调度、监控与容错
全栈程序员站长
2022/06/28
6290
【小白视角】大数据基础实践(五) MapReduce编程基础操作
Hadoop学习笔记—21.Hadoop2的改进内容简介
Hadoop2相比较于Hadoop1.x来说,HDFS的架构与MapReduce的都有较大的变化,且速度上和可用性上都有了很大的提高,Hadoop2中有两个重要的变更:
Edison Zhou
2018/08/20
7350
Hadoop学习笔记—21.Hadoop2的改进内容简介
相关推荐
Hadoop(十四)MapReduce原理分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档