[Hadoop]MapReduce与YARN

news2024/11/17 15:34:51

目录

大数据导论与Linux基础

Apache Hadoop、HDFS

MapReduce

MapReduce思想

MapReduce设计构思

MapReduce介绍

MapReduce官方实例

Map阶段执行流程

Reduce阶段执行流程

shuffle机制

YARN

YARN介绍

YARN架构、组件

程序提交YARN交互流程

YARN资源调度器Scheduler


MapReduce

MapReduce思想

  • MapRuduce的核心思想是“先分再合,分而治之”

  • Map表示第一阶段,负责“拆分”:即把复杂的任务分解为若干个“简单的子任务”来并行处理。可以拆分的前提是这些小问题之间没有依赖关系。

  • Reduce表示第二阶段,负责“合并”:即对map阶段的结果进行全局汇总

MapReduce设计构思

  • MapReduce借鉴了函数式语言中的思想,用Map和Reduce两个函数。

    • map:对一组数据元素进行某种重复式的处理

    • reduce:对Map的中间结果进行某种进一步的结果整理

  • MapReduce中定义了如下的Map和Reduce两个抽象的编程接口,由用户去编程实现:

    • map:(k1;v1)-->(k2;v2)

       

    • reduce:(k2;[v2])-->(k3;v3)

  • MapReduce处理的数据类型式键值对

  • 程序员仅需关心其应用层面的具体计算问题,仅需编写少量的处理应用本身问题的业务程序代码。至于如何具体完成这个并行计算任务所相关的诸多系统层细节被隐藏起来,交给计算框架去处理

MapReduce介绍

  • 分布式计算将应用分解成许多小的部分,分配给多台计算机进行处理。这样可以节约整体计算时间,大大提高计算效率

  • MapReduce是一种分布式计算框架

  • MapReduce特点

    • 易于编程:MapReduce框架提供了用于二次开发的接口;简单地实现一些接口,就可以完成一个分布式程序,任务计算交给计算框架去处理。

    • 良好的扩展性:当计算机资源得不到满足的时候,可以通过增加机器来扩展它的计算能力。

    • 高容错性:Hadoop集群式分布式搭建和部署的,任何一个机器节点挂掉了,它可以把上面的计算任务转移到另一个节点上运行,不影响整个作业任务的完成,过程完全是由Hadoop内部完成的。

    • 适合海量数据的离线处理:可以处理GB、TB和PB级别的数据量

  • MapReduce局限性(不适合的地方)

    • 实时计算性能差:MapReduce主要用于离线作业,无法做到秒级或者亚秒级的数据响应

    • 不能进行流式计算:流式计算的特点是数据是源源不断的,并且数据是动态的,而MapReduce作为一个离线计算框架,主要是针对静态数据集的,数据不能动态变化

  • 一个完整的MapReduce程序在分布式运行时有三类

    • MapReduceAppMaster:负责整个MapReduce程序的过程调度及状态协调

    • MapTask:负责map阶段的整个数据处理流程

    • ReduceTask:负责reduce阶段的整个数据处理流程

  • 阶段组成

    • 一个MapReduce编程模型中只能包含一个Map阶段和一个Ruduce阶段,或者只有Map阶段

    • 不能有多个map阶段,多个reduce阶段的情景出现

    • 如果用户的业务逻辑非常复杂,那就只能多个MapReduce程序串行运行

  •  

  • 整个MapReduce程序中,数据都是以kv键值对的形式流转的

MapReduce官方实例

概述

  • 一个最终完整版的MapReduce程序需要用户编写的代码和Hadoop自己实现的代码整合在一起才可以

  • 其中用户负责map、reduce两个阶段的业务问题,Hadoop负责底层所有的技术问题

  • 由于MapReduce计算引擎天生的弊端,企业中很少涉及到MapReduce直接编程

示例说明

  • 示例程序路径:/export/server/hadoop-3.3.0/share/hadoop/mapreduce/

  • 示例程序:hadoop-mapreduce-examples-3.3.0.jar

  • MapReduce程序提交命令:[hadoop jar|yarn jar] hadoop-mapreduce-examples-3.3.0.jar args…

  • 提交到哪里去了?提交到YARN集群上分布式执行

评估圆周率PI的值

  • 运行MapReduce程序评估一下圆周率的值,执行中可以去YARN页面上观察程序执行的情况

  • 第一个参数:pi表示MapReduce程序执行圆周率计算任务

  • 第二个参数:用于指定map阶段运行的任务task次数,并发度这里是10

  • 第三个参数:用于指定每个map任务的取样的个数,这里是50.

[root@node1 mapreduce]# pwd
/export/server/hadoop-3.3.0/share/hadoop/mapreduce
[root@node1 mapreduce]# hadoop jar hadoop-mapreduce-examples-3.3.0.jar pi 10 50

wordcount单词词频统计

  • wordcount算是大数据计算领域经典的入门案例,相当于Hello World

 

  • wordcount编程思路:

    • map阶段的核心:把输入的数据经过切割,全部标为1,因此输出就是<单词,1>

    • shuffle阶段的核心:经过MapReduce程序内部自带默认的排序分组等功能,把key相同的单词会作为一组数据构成新的kv对

    • reduce阶段核心:处理shuffle完的一组数据,该组数据就是该单词所有的键值对。对所有的1进行累加求和,就是单词的总次数

  •  

  • word程序提交

    • 上传上传课程资料中的文本文件1.txt到HDFS文件系统的/input目录下,如果没有这个目录,使用shell创建

      • hadoop fs -mkdir /input

      • hadoop fs -put 1.txt /input

    • 执行官方MapReduce实例

      • 第一个参数:wordcount表示执行单词统计任务

      • 第二个参数:指定输入文件的路径

      • 第三个参数:指定输出结果的路径(该路径不能已存在)

[root@node1 mapreduce]# pwd
/export/server/hadoop-3.3.0/share/hadoop/mapreduce
[root@node1 mapreduce]# hadoop jar hadoop-mapreduce-examples-3.3.0.jar wordcount 
/input /output
  • wordcount执行结果

 

Map阶段执行流程

 

  • 第一阶段:把输入目录下文件按照一定的标准逐个进行逻辑切片,形成切片规划。默认128M,每一个切片由一个MapTask处理

  • 第二阶段:对切片中的数据按照一定的规则读取解析返回<key,value>对。默认是按行读取数据。key是每一行的起始位置偏移量,value是本行的文本内容

  • 第三阶段:调用Mapper类中的map方法处理数据。每读取解析出来一个<key,value>,调用一次map方法

  • 第四阶段:按照一定的规则对Map输出的键值对进行分区partition。默认不分区,因为只有一个reducetask。分区的数量就是reducetask运行的数量

  • 第五阶段:Map输出数据写到内存缓冲区,达到比例溢出到磁盘上。溢出spill的时候根据key进行排序sort。默认根据key字典序排序

  • 第六阶段:对所有溢出文件进行最终的merget合并,成为一个文件

 

Reduce阶段执行流程

  • 第一阶段:ReduceTask会主动从MapTask复制拉取属于需要自己处理的数据

  • 把拉取来的数据全部进行合并merge,即把分散的数据合并成一个大的数据,再对合并的数据进行排序

  • 第三阶段:对排序后的键值对调用reduce方法。键相等的键值对调用一次reduce方法,最后把这些输出的键值对写入到HDFS文件中

 

shuffle机制

  • shuffle的本意是洗牌、混洗的意思,把一组有规则的数据尽量打乱成无规则的数据

  • 在MapReduce中,shuffle更像是洗牌的逆过程,指的是把map端的无规则输出按指定的规则打乱成具有一定规则的数据,以便reduce端接收处理

  • 一般把从map产生输出开始到reduce取得数据作为输入之前的过程称作shuffle

  • shuffle机制的弊端:

    • shuffle是MapReduce程序的核心与精髓,是MapReduce的灵魂所在

    • shuffle也是MapReduce被诟病最多的地方所在,MapReduce相较于spark、flink计算引擎慢的原因,跟shuffle机制也有很大的关系

    • shuffle频繁涉及到数据在内存、磁盘之间的多次往复

YARN

YARN介绍

  • YARN是一个通用资源管理系统和调度平台,可为上层应用提供统一的资源管理和调度

  • 它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处

  • 资源管理系统:集群的硬件资源,和内存运行相关,比如内存、CPU等。

  • 调度平台:不仅仅支持MapReduce程序,理论上支持各种计算程序

  • 可以把YARN理解为一个分布式的操作系统,而MapReduce等计算程序则相当于操作系统之上的应用程序,YARN为这些程序提供运算所需要的资源(内存、CPU)

  • Hadoop能有今天的地位,YARN功不可没。因为有了YARN,更多计算框架可以接入到HDFS中,而不单单是MapReduce,正是因为YARN的包容,使得其他计算框架能专注于计算性能的提升

  • HDFS可能不是最优秀的大数据存储系统,但却是应用最广泛的大数据存储系统,YARN功不可没。

 

YARN架构、组件

 

  • Client

  • Container容器(资源的抽象)

 

YARN三大组件

  • ResourceManager(RM):YARN集群中的主角色,决定系统中所有应用程序之间资源分配的最终权限,即最终仲裁者

  • NodeManager(NM):YARN中的从角色,一台机器上一个,负责管理本机器上的计算资源。根据RM命令,启动Container容器、监视Container容器的资源使用情况,并且向RM主角色汇报资源使用情况

  • ApplicationMaster(AM):用户提交的每个应用程序均包含一个AM。应用程序内的“老大”,负责程序内部各阶段的资源申请,监督程序的执行情况。

程序提交YARN交互流程

核心交互流程

  • MapReduce作业提交 Client-->RM

  • 资源的申请 MapReduceAppMaster-->RM

  • MapReduce作业状态汇报

  • 节点的状态汇报 NM-->RM

整体概述

当用户向YARN中提交一个应用程序后,YARN将分两个阶段运行该应用程序。

  • 第一个阶段:客户端申请资源启动运行本次程序的AppMaster

  • 第二个阶段:AppMaster根据本次程序内部具体情况,为它申请资源,并监控它的整个运行过程,直到运行完成

MapReduce提交YARN交互流程

  1. 用户通过客户端向YARN中的RM提交应用程序(比如hadoop jar提交MapReduce程序)

  2. RM为该应用程序分配第一个Container容器,并与对应的NM通信,要求它在这个Container中启动这个应用程序的AppMaster

  3. AppMaster启动成功之后,首先向RM注册并保持通信,这样用户可以直接通过RM查看应用程序的运行状态(处理了百分之几)

  4. AM为本次程序内部的各个Task任务向RM申请资源,并监控它的运行状态

  5. 一旦AppMaster申请到资源后,便与对应的NM通信,要求它启动任务

  6. NM为任务设置好运行环境之后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务

  7. 各个任务通过某个RPC协议向AppMaster汇报自己的状态和进度,以让AppMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可以随时通过RPC向AppMaster查询应用程序的当前运行状态

  8. 应用程序运行完成后AppMaster向RM注销并关闭自己

 

YARN资源调度器Scheduler

如何理解资源调度

  • 在理想情况下,应用程序提出的请求将立即得到YARN批准。但是实际中,资源是有限的,并且在繁忙的集群上,应用程序通常将需要等待其某些请求得到满足。YARN调度程序的工作是根据一些定义的策略为应用程序分配资源

  • 在YARN中,负责给应用分配资源的就是Scheduler,它是RM的核心组件之一。Scheduler完全专用于调度作业,它无法跟踪应用程序的状态

调度器策略

  • 三种调度器

    • FIFO Scheduler(先进先出调度器)

    • Capacity Scheduler(容量调度器)

    • Fair Scheduler (公平调度器)

  • Apache版本YARN默认使用Capacity Scheduler

  • 如果需要使用其他的调度器,可以在yarn-site.xml中的yarn.resourcemanager.scheduler.class进行配置。

 

FIFO Scheduler

  • 优势:无需配置、先到先得、易于执行

  • 坏处:任务的优先级不会变高,因此高优先级的任务也需要等待,不适合共享集群

Capacity Scheduler

  • 层次化的队列设计:层次化的管理,可以更容易、更合理分配和限制资源的使用

  • 容量保证:每个队列都可以设置一个资源的占比,保证每个队列都不会占用整个集群的资源

  • 安全:每个队列由严格的访问控制。用户只能向自己的队列力提交任务,而且不能修改或者访问其他队列的任务

  • 弹性分配:空闲的资源可以分配给任何队列。当多个队列出现争用的时候,则会按照权重比例进行平衡

Fair Scheduler

  • Fair Scheduler叫做公平调度。

  • 如何理解公平共享

    • 有两个用户A和B,每个用户都有自己的队列。

    • A启动一个作业,由于没有B的需求,它分配了集群所有可用的资源。

    • 然后B在A的作业仍在运行时启动了一个作业,经过一段时间,A,B各自作业都使用了一半的资源。

    • 现在,如果B用户在其他作业仍在运行时开始第二个作业,它将与B的另一个作业共享其资源,因此B的每个作业将拥有资源的四分之一,而A的继续将拥有一半的资源。结果是资源在用户之间公平地共享。

  • 允许资源共享:即当一个应用运行时,如果其它队列没有任务执行,则可以使用其它队列,当其它队列有应用需要资源时再将占用的队列释放出来。所有的应用都从资源队列中分配资源。

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

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

相关文章

IOS新建应用

一&#xff1a;Application App。普通app。Document App。打开是记事本类似App。Game。新建游戏相关app。RealityKit为新建一个打开摄像机&#xff0c;一个Ar立方体的应用。 SenceKit为有一架飞机旋转的游戏App。 SpirteKit为一个手指头按上会出一个手指特效的应用。 Metal为一…

【IDEA使用指南】使用Hibernate框架的Java项目,如何通过数据库表自动生成实体模型?

文章目录 【IDEA使用指南】使用Hibernate框架的Java项目,如何通过数据库表自动生成实体模型?步骤1:找到并打开“Persistence”工具栏。步骤2:找到并打开“Import Database Schema” 窗口。步骤3:配置数据源信息步骤4:查看自动生成的实体模型。【IDEA使用指南】使用Hibern…

如何在IDEA中显示时序图

如何在IDEA中显示时序图 有时候&#xff0c;我们想要了解代码的运行过程的时候&#xff0c;想要看到方法的调用流程。 这个时候就希望有一个时序图可以看&#xff0c;但是人工来画时序图太麻烦了&#xff0c;有没有办法在IDEA中直接生成呢&#xff1f; 当然是可以的。 这里…

Access denied for user ‘root‘@‘localhost‘ (using password:YES) 解决方案

文章目录 问题描述解决方案&#xff1a; 问题描述 Access denied for user ‘root’‘localhost’:拒绝用户’root’localhost’的访问。 出现这个报错语句的一般原因是输入了错误的密码&#xff0c;也有可能是是root帐户默认不开放远程访问权限。 相关的解决方法是重新设置…

【Linux】sysfs文件系统

【Linux】sysfs文件系统 前言 一、sysfs文件系统 1.1 sysfs系统是什么 1.2 sysfs的运行机制原理 二、sysfs中重要的结构体 2.1 kobject和kset之间的关系 2.2 kobject结构体 2.3 kset结构体 前言 重要的环节&#xff1a;带着问题不断前进 sysfs文件系统是什么sysf文件系…

YOLOv5 实例分割入门

介绍 YOLOv5 目标检测模型以其出色的性能和优化的推理速度而闻名。因此,YOLOv5 实例分割模型已成为实时实例分割中最快、最准确的模型之一。 在这篇文章中,我们将回答以下关于 YOLOv5 实例分割的问题: YOLOv5检测模型做了哪些改动,得到了YOLOv5实例分割架构?使用的 Prot…

RTC实时时钟源码分析

1.先来看一下RTC的配置过程 2.RTC源码讲解 我们的工程中加入了 rtc.c 源文件和 rtc.h头文件&#xff0c;同时&#xff0c;引入了 stm32f10x_rtc.c 和 stm32f10x_bkp.c 库文件。 说明&#xff0c;首先是 RTC_Init&#xff0c;其代码如下&#xff1a; //实时时钟配置 //初始化…

UI自动化测试遇弹窗怎么办?这个解决方法你get到了没?

目录 引言 弹窗的种类: APP内的业务弹窗 弹窗处理 watcher的使用 实战案例 软件测试技术的准备和建议 一、测试基础 二、Linux必备知识 三、Shell脚本 四、互联网程序原理 五、MySQL数据库 六、抓包工具 七、接口测试工具 八、Web自动化测试Java&Python 九…

关于C语言的杂记5

文章目录 引入正文内部函数与外部函数相关数组的知识点数组的初始化测试一维数组在内存中存储的地址&#xff1a;遍历二维数组的值测试二维数组的地址(观察内存情况)数组下标为0开始的由来 两个数交换位置的三种方法 引入 写在前面&#xff1a;关于C语言这部分内容&#xff0c;…

msys2 pacman 安装 ncurses-devel 解决 make menuconfig 问题

问题描述 windows 下使用 msys2 环境&#xff0c;可以开发编译一些 Linux 下的软件包&#xff0c;一般Linux 下的软件包&#xff0c;需要安装 PC 平台的gcc、gcc交叉编译工具链&#xff0c;如 arm的&#xff0c;以及一些常用的 软件包&#xff0c;如 python 等 有一个软件包&a…

【工具】Ubuntu 非root用户 安装openssl

文章目录 openssl 下载 & 解压指定安装路径编译安装配置环境变量验证是否安装成功 openssl 下载 & 解压 openssl 下载地址 或者 https://www.openssl.org/source/openssl-1.1.1l.tar.gz 上传到服务器 解压 tar -zxvf openssl-1.1.1l.tar.gz切换到openssl-1.1.1l目…

maven-resources-plugin详解

目录 一、什么场景会用到&#xff1f;二、他有什么作用&#xff1f;三、插件常用配置1、字符集编码2、resources相关的配置2.1、resources配置结构2.2、resources默认配置2.2.1、maven超级pom默认配置2.2.2、spring-boot对resources插件的默认配置2.2.3、resources最终生效的配…

2023年最新VMware 17+虚拟机详细配置安装【程序员使用指南】!!

文章目录 Vmware版本选择17Pro安装自定义安装填写对应的许可证正式安装虚拟机进行对应的配置配置镜像文件选择对应的语言&#xff1a;到这个界面&#xff0c;选择中文 安装结束连接对应的xshell Vmware版本选择17Pro安装 ● 最开始从这里出发 自定义安装 ● 记得自定义在自…

TikTok选品,什么产品在TikTok最受欢迎?

TikTok是当下的海外社交媒体推广新风口已经有目共睹&#xff0c;与此同时跨境商家们或许都面临着同样的问题&#xff0c;就是TikTok要怎么选品&#xff0c;什么产品才会比较受欢迎。俗话说&#xff1a;七分靠选品&#xff0c;三分靠运营。选品选对了&#xff0c;运营也就事半功…

chatgpt赋能Python-python3_decode函数

Python3 decode函数 - 解码你的数据 编程领域中&#xff0c;字符串是一个不可避免的概念&#xff0c;他们构成了我们生活中逻辑化和技术实现化的重要组成部分。不仅如此&#xff0c;字符串的加载和使用也对程序的性能产生了重大的影响。在这篇文章中&#xff0c;我们将重点讨论…

现在有什么基于vue3.0的优秀开源项目呢?

前言 以下是一些github上一些基于vue3.0的优秀开源项目&#xff0c;可以自己选择一些去练一下手&#xff0c;废话少说&#xff0c;直接进入正题---- 1、 vue-manage-system Star: 16k 是一个基于 Vue3 和 Element Plus 的后台管理系统解决方案&#xff0c;它提供了一系列的通…

电脑找不到msvcr110.dll怎么办?电脑msvcr110.dll丢失怎么解决?

在使用某些软件或游戏时&#xff0c;有时会出现找不到msvcr110.dll文件的错误提示&#xff0c;这会导致程序无法正常运行。这个问题通常是由于缺少Visual C msvcr110.dll引起的。下面是解决这个问题的几个方法&#xff1a; msvcr110.dll的解决方法一 直接使用dll修复程序进行修…

videojs扩展方法,自定义功能

8版本不支持extend&#xff0c;8支持es6扩展 videojsextend

DeepGPS: Deep Learning Enhanced GPS Positioning in Urban Canyons

DeepGPS: Deep Learning Enhanced GPS Positioning in Urban Canyons IEEE TMC&#xff5c;深度学习增强的城市峡谷GPS定位 https://github.com/bducgroup/DeepGPS 文章目录 DeepGPS: Deep Learning Enhanced GPS Positioning in Urban CanyonsAbstract1 INTRODUCTION2 BACKGRO…

【C++】如何克服红黑树的恐惧?看这篇文章足够了

红黑树的实现会比AVL简单-.- 文章目录 判断是否是AVL树一、红黑树二、红黑树的实现总结 判断是否是AVL树 上一篇文章我们详细介绍了AVL树并且实现了AVL树&#xff0c;这篇文章我们将在前言中引入判断是否是AVL树的方法&#xff0c;然后我们就进入红黑树的实现&#xff0c;如果…