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…

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…

开发人员怎么看实施人员

英文原文&#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;也适应用个人、门户网站建设…

翻译(九)——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、查…

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

如何进行数据分析统计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…

020-Spring Boot 监控和度量

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

matplotlib布局_Matplotlib多列,行跨度布局

matplotlib布局For Visualization in Python, Matplotlib library has been the workhorse for quite some time now. It has held its own even after more nimble rivals with easier code interface and capabilities like seaborn, plotly, bokeh etc. have arrived on the…

Hadoop生态系统

大数据架构-Lambda Lambda架构由Storm的作者Nathan Marz提出。旨在设计出一个能满足实时大数据系统关键特性的架构&#xff0c;具有高容错、低延时和可扩展等特性。Lambda架构整合离线计算和实时计算&#xff0c;融合不可变性&#xff08;Immutability&#xff09;&#xff0c…

使用Hadoop所需要的一些Linux基础

Linux 概念 Linux 是一个类Unix操作系统&#xff0c;是 Unix 的一种&#xff0c;它 控制整个系统基本服务的核心程序 (kernel) 是由 Linus 带头开发出来的&#xff0c;「Linux」这个名称便是以 「Linus’s unix」来命名的。 Linux泛指一类操作系统&#xff0c;具体的版本有&a…

python多项式回归_Python从头开始的多项式回归

python多项式回归Polynomial regression in an improved version of linear regression. If you know linear regression, it will be simple for you. If not, I will explain the formulas here in this article. There are other advanced and more efficient machine learn…

回归分析_回归

回归分析Machine learning algorithms are not your regular algorithms that we may be used to because they are often described by a combination of some complex statistics and mathematics. Since it is very important to understand the background of any algorith…

数据科学还是计算机科学_何时不使用数据科学

数据科学还是计算机科学意见 (Opinion) 目录 (Table of Contents) Introduction 介绍 Examples 例子 When You Should Use Data Science 什么时候应该使用数据科学 Summary 摘要 介绍 (Introduction) Both Data Science and Machine Learning are useful fields that apply sev…

leetcode 523. 连续的子数组和

给你一个整数数组 nums 和一个整数 k &#xff0c;编写一个函数来判断该数组是否含有同时满足下述条件的连续子数组&#xff1a; 子数组大小 至少为 2 &#xff0c;且 子数组元素总和为 k 的倍数。 如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 …