Mapreduce原理和YARN

MapReduce定义

MapReduce是一种分布式计算框架,由Google公司2004年首次提出,并贡献给Apache基金会。

MR版本

  • MapReduce 1.0,Hadoop早期版本(只支持MR模型)
  • MapReduce 2.0,Hadoop 2.X版本(引入了YARN资源调度框架后,除了支持MR,还支持其他计算模型

image.png

MR V1 执行流程

image.png

  1. JobTracker一直在等待JobClient提交作业;
  2. TaskTracker每隔3秒向 JobTracker发送心跳heartbeat询问有没有任务可做,如果有,让其派发任务给它执行;
  3. 这是一道pull过程: slave主动向master拉生意;

image.png

MR v2 vs MR v1 流程

MR v2运行机制的改进,启动了YARN

  1. 增加了ResourceManager、NodeManager;
  2. ResourceManager(RM), 包含:ApplicationManager、ResourceScheduler两种功能;即把应用管理和资源调度分开;
  3. NodeManager(NM)负责节点的运行,当收到任务时,启动Container完成(map或reduce)任务;
  4. ResourceManager对应于v1的JobTracker;
  5. NodeManager对应于v1的TaskTracker

MR V2 执行流程

  1. 用户向YARN中提交应用程序,其中包括MR App Mstr程序、启动ApplicationMaster的命令、数据等。
  2. ResourceManager为该应用程序分配第一个Container,并与对应的NodeManager通信,要求它在这个Container中启动应用程序的ApplicationMaster。
  3. ApplicationMaster首先向ResourceManager注册,这样,用户可以直接通过ResourceManager查看应用程序的运行状态,然后,它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7
  4. ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。
  5. 一旦ApplicationMaster申请到资源后,则与对应的NodeManager通信,要求其启动任务。
  6. NodeManager为任务设置好运行环境(包括环境变量、jar包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务
  7. 各个任务通过某个RPC 协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过RPC 向ApplicationMaster 查询应用程序的当前运行状态。
  8. 应用程序运行完成后,ApplicationMaster 向ResourceManager 注销并关闭自己。

image.png

Resource Container, 资源容器

1)是集群节点将自身内存、CPU、磁盘等资源封装在一
起的抽象概念;

2)调度器根据应用的资源需求和集群各个节点的资源容
器进行调度;

3)RM的应用管理器负责接收作业,协商获取第一个资源
容器用于执行应用的任务主体并为重启失败的应用主体分
配容器;

4)DN节点的应用主体负责通过协商从调度器获取资源容
器,并跟踪这些容器的状态和应用执行的情况

Mapper任务流程

image.png
① 读取输入文件,解析成key、value对。对输入文件的每
一行(k1,v1),解析成多个key、value对(k2,v2)。每
个(k1、v1)键值对调用一次map函数;

② 写代码逻辑将输入的k1、v1处理成新的k2、v2输出;

③ 对输出的k2、v2进行分区(如果不指定默认1个分区,
分区号为0);

④ 对不同分区的数据,按照k2进行排序、分组。相同k2的
v2放到集合v2’
={v21
,v22
,v23
,…v2n}中;

⑤ (可选)分组后的数据进行归约(combiner);

⑥ Mapper的结果写入本地磁盘

Reducer任务流程

① 对多个map任务的输出,按照不同的分区,通过网络
复制到不同的reduce节点(取map端的结果数据);

② 一个Reduce任务处理一个分区数据;

③ 对属于当前分区的多个map任务的输出结果进行合并
、排序。写reduce函数的代码,对输入的k2,v2’处理
,转换成新的k3、v3输出;

④ 把reduce的输出保存到文件中。文件名为 part-r- 0000N

MapReduce核心概念

  • 不同的Map任务之间不会进行通信
  • 不同的Reduce任务之间也不会发生任何信息交换
  • 用户不能显式地从一台机器向另一台机器发送消息
  • 所有的数据交换都是通过MapReduce框架自身去实现的

image.png

文件输入格式InputFormat

定义了数据文件如何分割和读取。InputFile提供了以下一些功能

  • 选择文件或者其它对象,用来作为输入
  • 定义InputSplits, 将一个文件分为不同任务
  • 为RecordReader提供一个工厂,用来读取这个文件

例如:有一个抽象的类FileInputFormat,
FileInputFormat从这个目录中读取
所有文件,然后FileInputFormat将
这些文件分割为多个InputSplits。

输入数据分块InputSplits

InputSplit定义了输入到单个Map任务的输入数据

  • 一个MapReduce程序被统称为一个Job,可能有上百个任务构成
  • InputSplit将文件分为128MB的大小

数据记录读入RecordReader

InputSplit定义了一个数据分块,但是没有定义如何读取数据记录。RecordReader实际上定义了如何将数据记录转化为一个(key,value)对的详细方法,并将数据记录传给Mapper类。

例如:TextInputFormat提供了
LineRecordReader,读入一个文
本行数据记录

Mapper

每一个Mapper类的实例生成了一
个Java进程,负责处理某一个
InputSplit上的数据

  • V1中,有两个额外参数OutputCollector以及Reporter,前者收集中间结果,后者获得环境参数以及设当前执行的状态。
  • 现在的版本V2用Context提供给每一个Mapper函数,用来提供上面两个对象的功能

Combiner

对Map端的输出进行合并,即合并相同key的键值对,以便
减少partitioner数据通信开销。
可以不用指定;如果指定合并类,其性质类似于本地执行
的一个Reducer,满足一定的条件才能够执行

Partitioner & Shuffle&Sort

  • Partitioner & Shuffle
    在Map工作完成之后,每一个 Map函数的结果会被传输到对
    应Reducer所在的节点,此时用户可以提供一个Partitioner
    类,用来决定一个给定的(key,value)对传给哪个节点。

  • Sort
    传输到每一个Reducer节点上的、将被所有的Reduce函数接
    收到的Key,value对会被Hadoop自动排序(即Map生成的结
    果传送到某一个节点的时候,会被自动排序)

Shuffle

Shuffle过程就是从map端输出到reduce端输入之间的过程;是Hadoop中最核心的部分!!!

image.png

Shuffle的Map端

  1. 在Map任务全部结束之前进行归并
  2. 归并得到大的文件放在本地磁盘
  3. 文件归并时,如果溢写文件数量大于预定值(默认是3)则可以再次启动Combiner,少于3不需要
  4. JobTracker会一直监测Map任务的执行,并通知Reduce任务来领取数据

Shuffle的Reduce端

  1. Reduce任务通过RPC向JobTracker询问Map任务是否已经完成,若完成,则领取数据
  2. Reduce领取数据先放入缓存,来自不同Map机器,先归并,再合并写入磁盘
  3. 多个溢写文件归并成一个或多个大文件,文件中的键值对是排序的
  4. 当数据很少时,不需要溢写到磁盘,直接在缓存中归并,然后输出给Reduce

Reducer

做用户定义的Reduce操作。
编程接口是Context。
一个分区对应一个Reducer。
每个分区对应一个输出文件 part-r-0000X。

文件输出格式OutputFormat

写入到HDFS的所有OutputFormat
都继承自FileOutputFormat
。 每一个Reducer都写一个文件到一
个共同的输出目录,文件名是part- nnnnn,其中nnnnn是与每一个
reducer相关的一个号(partition id)

MapReduce-任务执行总结

  1. 提交作业
  2. 初始化作业
  3. 分配任务
  4. 执行任务
  5. 更新任务执行进度和状态

推测式执行(speculative) –如果某个节点的任务执行过慢,会启动备份任务

YARN定义

YARN 是Hadoop 2.0 中的资源管理系统
,它是一个通用的资源管理模块,可为
各类应用程序进行资源管理和调度。

YARN三大组件

image.png

  1. ResourceManager –处理客户端请求
  • 启动/监控ApplicationMaster
  • 监控NodeManager
  • 资源分配与调度
  1. NodeManager –单个节点上的资源管理
  • 处理来自ResourceManager的命令
  • 处理来自ApplicationMaster的命令
  1. ApplicationMaster
  • 数据切分
  • 为应用程序申请资源,并分配给内部任务
  • 任务监控与容错

YARN资源调度器

  • FIFO,先进先出调度器
  • Fair Scheduler,公平调度器
  • Capacity Scheduler,容量调度器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/390770.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据可视化图表类型_数据可视化中12种最常见的图表类型

数据可视化图表类型In the current era of large amounts of information in the form of numbers available everywhere, it is a difficult task to understand and get insights from these dense piles of data.在当今时代,到处都是数字形式的大量信息&#xff…

三大纪律七项注意(Access数据库)

三大纪律(规则或范式) 要有主键其他字段依赖主键其他字段之间不能依赖七项注意 一表一主键(订单表:订单号;订单明细表:订单号产品编号)经常查,建索引,小数据(日期,数字类…

CentOS下安装JDK的三种方法

来源:Linux社区 作者:spiders http://www.linuxidc.com/Linux/2016-09/134941.htm 由于各Linux开发厂商的不同,因此不同开发厂商的Linux版本操作细节也不一样,今天就来说一下CentOS下JDK的安装: 方法一:手动解压JDK的压缩包,然后…

MapReduce编程

自定义Mapper类 class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> &#xff5b; … }自定义mapper类都必须实现Mapper类&#xff0c;有4个类型参数&#xff0c;分别是&#xff1a; Object&#xff1a;Input Key Type-------------K1Text: Input…

统计信息在数据库中的作用_统计在行业中的作用

统计信息在数据库中的作用数据科学与机器学习 (DATA SCIENCE AND MACHINE LEARNING) Statistics are everywhere, and most industries rely on statistics and statistical thinking to support their business. The interest to grasp on statistics also required to become…

IOS手机关于音乐自动播放问题的解决办法

2019独角兽企业重金招聘Python工程师标准>>> 评估手机自带浏览器不能识别 aduio标签重的autoplay属性 也不能自动执行play()方法 一个有效的解决方案是在微信jssdk中调用play方法 document.addEventListener("WeixinJSBridgeReady", function () { docum…

svg标签和svg文件区别_什么是SVG文件? SVG图片和标签说明

svg标签和svg文件区别SVG (SVG) SVG or Scalable Vector Graphics is a web standard for defining vector-based graphics in web pages. Based on XML the SVG standard provides markup to describe paths, shapes, and text within a viewport. The markup can be embedded…

开发人员怎么看实施人员

英文原文&#xff1a;What Developers Think Of Operations&#xff0c;翻译&#xff1a;张红月CSDN 在一个公司里面&#xff0c;开发和产品实施对于IS/IT的使用是至关重要的&#xff0c;一个负责产品的研发工作&#xff0c;另外一个负责产品的安装、调试等工作。但是在开发人员…

怎么评价两组数据是否接近_接近组数据(组间)

怎么评价两组数据是否接近接近组数据(组间) (Approaching group data (between-group)) A typical situation regarding solving an experimental question using a data-driven approach involves several groups that differ in (hopefully) one, sometimes more variables.使…

代码审计之DocCms漏洞分析

0x01 前言 DocCms[音译&#xff1a;稻壳Cms] &#xff0c;定位于为企业、站长、开发者、网络公司、VI策划设计公司、SEO推广营销公司、网站初学者等用户 量身打造的一款全新企业建站、内容管理系统&#xff0c;服务于企业品牌信息化建设&#xff0c;也适应用个人、门户网站建设…

你让,勋爵? 使用Jenkins声明性管道的Docker中的Docker

Resources. When they are unlimited they are not important. But when theyre limited, boy do you have challenges! 资源。 当它们不受限制时&#xff0c;它们并不重要。 但是&#xff0c;当他们受到限制时&#xff0c;男孩你有挑战&#xff01; Recently, my team has fa…

翻译(九)——Clustered Indexes: Stairway to SQL Server Indexes Level 3

原文链接&#xff1a;www.sqlservercentral.com/articles/StairwaySeries/72351/ Clustered Indexes: Stairway to SQL Server Indexes Level 3 By David Durant, 2013/01/25 (first published: 2011/06/22) The Series 本文是阶梯系列的一部分&#xff1a;SQL Server索引的阶梯…

power bi 中计算_Power BI中的期间比较

power bi 中计算Just recently, I’ve come across a question on the LinkedIn platform, if it’s possible to create the following visualization in Power BI:就在最近&#xff0c;我是否在LinkedIn平台上遇到了一个问题&#xff0c;是否有可能在Power BI中创建以下可视化…

-Hive-

Hive定义 Hive 是一种数据仓库技术&#xff0c;用于查询和管理存储在分布式环境下的大数据集。构建于Hadoop的HDFS和MapReduce上&#xff0c;用于管理和查询分析结构化/非结构化数据的数据仓库; 使用HQL&#xff08;类SQL语句&#xff09;作为查询接口&#xff1b;使用HDFS作…

CentOS 7 安装 JDK

2019独角兽企业重金招聘Python工程师标准>>> 1、下载oracle jdk 下载地址&#xff1a; http://www.oracle.com/technetwork/java/javase/downloads/index.html 选择同一协议&#xff0c;下载rpm格式版本jdk&#xff0c;或tar.gz格式jdk。 2、卸载本机openjdk 2.1、查…

javascript 布尔_JavaScript布尔说明-如何在JavaScript中使用布尔

javascript 布尔布尔型 (Boolean) Booleans are a primitive datatype commonly used in computer programming languages. By definition, a boolean has two possible values: true or false.布尔值是计算机编程语言中常用的原始数据类型。 根据定义&#xff0c;布尔值有两个…

如何进行数据分析统计_对您不了解的数据集进行统计分析

如何进行数据分析统计Recently, I took the opportunity to work on a competition held by Wells Fargo (Mindsumo). The dataset provided was just a bunch of numbers in various columns with no indication of what the data might be. I always thought that the analys…

经典:区间dp-合并石子

题目链接 &#xff1a;http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid737 这个动态规划的思是&#xff0c;要得出合并n堆石子的最优答案可以从小到大枚举所有石子合并的最优情况&#xff0c;例如要合并5堆石子就可以从&#xff0c;最优的23和14中得到最佳的答案。从两堆…

常见排序算法_解释的算法-它们是什么以及常见的排序算法

常见排序算法In its most basic form, an algorithm is a set of detailed step-by-step instructions to complete a task. For example, an algorithm to make coffee in a french press would be:在最基本的形式中&#xff0c;算法是一组完成任务的详细分步说明。 例如&…

020-Spring Boot 监控和度量

一、概述 通过配置使用actuator查看监控和度量信息 二、使用 2.1、建立web项目&#xff0c;增加pom <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency> 启动项目&a…