前几章我们介绍了 Hadoop 的 MapReduce 和 HDFS 两大组件,内容比较基础,看完后可以写简单的 MR 应用程序,也能够用命令行或 Java API 操作 HDFS。但要对 Hadoop 做深入的了解,显然不够用。因此本章就深入了解一下 MapReduce 应用的运行机制,从而学习 Hadoop 各个组件之间如何配合完成 MR 作业。本章是基于 Hadoop YARN 框架介绍,YARN(Yet Another Resource Negotiator)是 Hadoop 的集群资源管理器,也是 Hadoop2 的默认资源管理器。为什么要用 YARN 框架? 简单来说 Hadoop1 的时候没有资源管理器,因此在 Hadoop1 集群只能运行 MR 作业。YARN 出现后统一管理集群的资源,因此 Spark、Storm 等其他分布式计算框架也能运行在 Hadoop 集群。同理,除了 YARN 还有其他的资源管理框架,目前比较火的是 k8s。

运行机制

运行一个 MR 程序主要涉及以下 5 个部分:

  • 客户端: 提交 MR 作业,也就是我们运行 hadoop jar xxx 的命令后,启动的 Java 程序
  • YARN ResourceManager: YARN 集群主节点,负责协调集群上计算资源的分配
  • YARN NodeManager:YARN 集群从节点,负责启动和监视机器上的容器(container)
  • MapReduce Application Master:负责协调  MR 作业,当然 Spark 作业也有对应的 application master

运行 MR 任务的工作原理如下图,本图摘自《Hadoop 权威指南(第四版)》:

步骤1 是我们在客户端节点(集群中的某台机器)执行 hadoop jar xxx 命令后,启动 MR 作业的流程,后续会涉及以下几个重要流程

  • 作业的提交和初始化
  • 任务的分配与执行
  • 进度和状态的更新

下面会详细介绍每个流程。这里我们将编写的整个 MR 程序叫做作业,MR作业运行后的 map 或 reduce 任务统称为任务。

任务的提交和初始化

作业的提交

  • 向 ResourceManager 申请一个新的应用 ID(步骤 2),之前的 MR 例子我们可以看到,应用 ID 的形式为:application_1551593879638_0009
  • 计算作业分片检查作业的输入输出,若输入文件不可分割或者输入路径不存在,报错返回;如果没有指定输出路径或者输出路径已存在,报错返回
  • 将作业运行所需的资源(jar、配置文件和分片信息等)复制到共享文件系统中(步骤 3),默认为 HDFS 。目录名称以应用 ID 命名
  • 调用 ResourceManager 的 submitApplication() 方法提交作业(步骤4)

以上的流程均在客户端节点完成。

作业的初始化

ResourceManager 收到调用它的 submitApplication() 方法后,会在 NodeManager 中分配一个 container (步骤 5a),在 container 中启动 application master(步骤 5b) 。MapReduce application master 的主类是 MRAppMaster。application master 完成初始化后(步骤 6),从共享文件系统(如:HDFS)获取分片信息(步骤 7)。对每个分片创建一个 map 任务和 reduce 任务,并分配任务 ID。如果 application master 判断该任务不是 uber 任务,那么接下来会进行任务分配。

任务分配与运行

任务分配

application master 会为 map 任务和 reduce 任务向 ResourceManager 申请分配资源。map 任务的优先级高于 reduce 任务,且直到 5% 的 map 任务完成时,reduce 任务请求才能发出。reduce 任务可以在集群的任意机器执行,但 map 任务有数据本地化的限制,理想情况下数据分片和 map 任务在同一节点运行,即数据本地化(data local),这样 map 任务直接读取本地的数据,不需要网络 IO。如果达不到理想情况,可以在数据节点同一机架上启动 map 任务,即机架本地化(rack local),这样 map 任务从同机架上其他节点将数据拷贝到自己的节点。最差的情况是分片和 map 任务不在同一机架,需要跨机架拷贝数据。application master 申请的资源包括内存和 CPU 核心数,申请的大小可以通过 4 个属性指定:

  • mapreduce.map.memory.mb:map 任务内存, 单位:MB,默认:1024
  • mapreduce.map.cpu.vcores:map 任务 CPU 核心数,默认:1
  • mapreduce.reduce.memory.mb:reduce 任务内存,单位:MB,默认:1024
  • mapreduce.reduce.cpu.vcores:reduce 任务 CPU 核心数,默认:1

任务执行

ResourceManager 为任务在某个 NodeManager 上分配容器后(步骤 9a),application master 会与该 NodeManager 通信来启动容器(步骤 9b)。该任务的主类为 YarnChild,该任务运行前会先将共享文件系统(如:HDFS)上的文件本地化(步骤 10),文件包括:配置文件、JAR包和分布式缓存文件。最后,运行 map 或 reduce 任务(步骤 11)。

进度和状态更新

当用户成功提交并且作业成功运行后,用户希望能够看到作业的运行状态。一个作业和它的每个任务都有一个状态,包括:作业或任务的状态(比如,运行中、成功或失败),map 或 reduce 任务的进度以及计数器值等。

  • 当 map 或 reduce 任务运行时,通过接口向自己的 application master 上报进度和状态
  • 作业的运行期间,客户端请求 application master 以获得最新的状态

流程图如下:

作业的完成

application master 接到最后一个任务成功完成的通知后,便把作业置位成功得状态。可以端查询到任务成功完成后,从 waitCompletion() 方法返回。作业的统计信息和计数器值输出在控制台。最后,application master 会做一些清理工作,作业信息由 JobHistoryServer 存档,以便用户以后查询。

小结

本章主要介绍 MR 作业的运行机制,并且了解了 YARN 集群主从节点职责及其相互之间的配合。通过这篇文章的介绍希望读者对 MR 作业的运行机制有大致的了解。我们可以简单总结下本章介绍的相关组件的作用。本文主要参考《Hadoop 权威指南(第四版)》和 Hadoop 官方文档,有兴趣的读者可以深入研究,一起探讨。

转载于:https://www.cnblogs.com/duma/p/10666269.html

大数据技术 - MapReduce 作业的运行机制相关推荐

  1. 大数据技术——MapReduce词频统计

    注:参考林子雨老师教程,具体请见 MapReduce编程实践(Hadoop3.1.3)_厦大数据库实验室博客 一.实验目的 1.理解Hadoop中MapReduce模块的处理逻辑。 2.熟悉MapRe ...

  2. 大数据技术之 Flume

    为什么选用Flume Python爬虫数据 Java后台日志数据 服务器本地磁盘 文件夹 HDFS Flume Flume最主要的作用就是,实时读取服务器本地磁盘的数据,将数据写入到HDFS. 网络端 ...

  3. 大数据技术之MapReduce

    大数据技术之MapReduce 目录 大数据技术之MapReduce 第 1 章 MapReduce 概述 1.1 MapReduce 定义 1.2 MapReduce 优缺点 1.2.1 优点 1. ...

  4. 大数据技术之Hadoop(MapReduce)

    大数据技术之Hadoop(MapReduce) (作者:大数据研发部) 版本:V1.4 第1章MapReduce入门 map 计算 reduce 规约 1.1 MapReduce定义 Mapreduc ...

  5. 大数据技术之_19_Spark学习_07_Spark 性能调优 + 数据倾斜调优 + 运行资源调优 + 程序开发调优 + Shuffle 调优 + GC 调优 + Spark 企业应用案例

    大数据技术之_19_Spark学习_07 第1章 Spark 性能优化 1.1 调优基本原则 1.1.1 基本概念和原则 1.1.2 性能监控方式 1.1.3 调优要点 1.2 数据倾斜优化 1.2. ...

  6. 尚硅谷大数据技术Spark教程-笔记01【Spark(概述、快速上手、运行环境、运行架构)】

    视频地址:尚硅谷大数据Spark教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据技术Spark教程-笔记01[Spark(概述.快速上手.运行环境.运行架构)] 尚硅谷大数据技术Spark教 ...

  7. 大数据技术原理与应用作业四

    大数据技术原理与应用作业四 1. 试述在Hadoop体系架构中HBase与其他组成部分的相互关系. HBase利用Hadoop MapReduce来处理HBase中的海量数据,实现高性能计算: 利用Z ...

  8. 大数据技术原理与应用作业七

    大数据技术原理与应用作业七 1. 试述MapReduce和Hadoop的关系. Google公司最先提出了分布式并行编程模型MapRedece,Hadoop MapReduce是它的开源实现.Goog ...

  9. Hadoop技术内幕:深入解析MapReduce架构设计与实现原理 (大数据技术丛书) - 电子书下载(高清版PDF格式+EPUB格式)...

    Hadoop技术内幕:深入解析MapReduce架构设计与实现原理 (大数据技术丛书)-董西成著 在线阅读                   百度网盘下载(ihhy) 书名:Hadoop技术内幕:深 ...

  10. 大数据技术原理与应用作业十

    大数据技术原理与应用作业十 1. 试述流数据的概念. 流数据,即数据以大量.快速.时变的流形式持续到达. 2. 试述流数据的特点. 流数据具有如下特征: 数据快速持续到达,潜在大小也许是无穷无尽的 数 ...

最新文章

  1. Windows下dump文件生成与分析
  2. 更改MySQL数据库目录位置
  3. vs2013常用快捷键
  4. 学习Java需要达到的25个目标
  5. BT觀念分享和常見問題彙整
  6. Scrapy框架的使用之Scrapy对接Selenium
  7. rx在c语言中,RxSwift - 入门
  8. 玩转NumPy——split()函数使用详解
  9. Java if语句深度解析
  10. 如何自己研究SAP Cloud for Customer的订单类型设计
  11. 全国计算机等级考试题库二级C操作题100套(第75套)
  12. 【渝粤教育】国家开放大学2019年春季 1124流行病学 参考试题
  13. 使用Kendo上传控件实现ASP.NET Core的“批处理模式”
  14. Python之网络爬虫(爬虫基本认知、网络爬虫之路)
  15. 摄影测量学之共线方程的应用
  16. MySQL-快速入门(17)MySQL Proxy,读写分离,负载均衡
  17. Java测试-RestTemplate-@requestBody
  18. MATLAB数字图像处理(一)图像的基本操作
  19. 在多媒体计算机中静态媒体是指,《多媒体技术及应用》按章复习题
  20. 双十一来临,你就不想知道阿里后台都做了哪些准备吗?

热门文章

  1. C程序设计--指针(用“ 函数 ”对“ 数组 ” 进行操作)
  2. 水电缴费系统php源码_php简易扫码付教育收费系统 v1.2
  3. covariance matrix r语言_R语言 第2章 数据对象与数据读写(3)
  4. 用python写的游戏有哪些_想用Python写个小游戏?这个项目里有21个例子
  5. hdoj2044:一只小蜜蜂(递推)
  6. hdoj2046骨牌铺方格题解+拓展(递推/斐波那契)
  7. C语言叠堆在变量周围,C语言及ARM中堆栈指针SP设置的理解与总结
  8. pytorch 网络搭建简要步骤
  9. linux查找文件并显示修改时间,linux下find命令和文件的三种时间
  10. C/C++[sort( )]排序