Hadoop生态圈三大组件:HDFS的读写流程、MapReduce计算流程、Yarn资源调度

ops/2024/10/22 3:53:41/

文章目录

  • 1. HDFS的读写流程
    • 1.1 HDFS读流程
    • 1.2 HDFS写流程
  • 2. MapReduce计算流程
  • 3. Yarn资源调度
      • 一、客户端请求资源
      • 二、Resource Manager处理请求
      • 三、任务资源计算与申请
      • 四、Resource Manager分配资源
      • 五、Node Manager执行任务
      • 六、任务执行与监控

1. HDFS的读写流程

1.1 HDFS读流程

  • 客户端首先向Namenode发送读取请求,询问要读取的文件存储在哪些数据节点上。
  • Namenode会根据机架感知原理、网络拓扑关系、副本机制等返回部分或者全部的block所在的Datanode的地址。
  • 客户端根据Namenode返回的地址,选择一个距离最近的Datanode节点来读取第一个数据块。客户端直接与该数据节点建立连接,并发送读取请求。
  • Datanode接收到读取请求后,开始从磁盘上读取相应的数据块,并将数据通过网络传输给客户端。
  • 客户端在接收数据的同时,会对数据进行校验,以确保数据的完整性。如果发现数据损坏,客户端可以向其他包含该数据块副本的数据节点请求重新读取。
  • 当客户端读取完一个Datanode后,会根据Namenode提供的块位置信息,选择下一个数据节点来读取下一个数据块。重复上述步骤,直到客户端读取完整个文件。
    在这里插入图片描述

1.2 HDFS写流程

  • 客户端向Namenode发送写入请求。
  • Namenode接收到写入请求后,首先判断当前这个操作的用户是否具有写入权限,如果不具备写入权限会直接报错;如果有写入权限,再进行判断在写入的目录下是否存在这个文件;如果要写入的目录下已经存在这个文件,会直接报错;如果要写入的目录下不存在这个文件,通知客户端可以写入。
  • 客户端对文件进行切分操作,形成block块。
  • 客户端请求第一个block块存储在哪些地方。
  • Namenode根据机架感知原理、拓扑关系、副本机制等,找到相应的可以上传的Datanode的连接列表,返回给客户端。
  • 客户端从接受的Datanode列表中选择第一台建立连接,当连接第一台Datanode以后,让第一台Datanode与第二台Datanode连接,然后第二台Datanode与第三台Datanode连接形成一条pipeline(管道)。
  • 客户端通过数据包的形式发送数据。当第一台Datanode接收到数据后,将数据发送给第二台Datanode,第二台接收完,再将数据发送给第三台。当最后一个Datanode接受请求后建立一个反向的应答队列。当每个节点都将数据包接收到以后,反向给予应答响应(ack确认机制)。
    在这里插入图片描述

2. MapReduce计算流程

在这里插入图片描述
MR天龙八部
在这里插入图片描述

3. Yarn资源调度

在这里插入图片描述
YARN(Yet Another Resource Negotiator)是Hadoop的资源管理系统,其资源调度机制如下:

一、客户端请求资源

  1. 提交任务请求
    • 客户端首先将任务提交给Resource Manager。

二、Resource Manager处理请求

  1. 接收任务请求
    • Resource Manager接收到客户端的任务请求。
  2. 选择Node Manager
    • Resource Manager在Node Manager上寻找一个比较空闲的节点。
    • 通知并启动一个Application Master,将任务信息发送给Application Master,等待Application Master启动成功。
    • 如果启动失败,认为当前任务直接报错,告知任务无法执行。
  3. 获取任务相关信息
    • Application Master启动后,开始和主节点保持心跳机制,获取任务相关的信息(如JAR包路径、主类、参数)。

三、任务资源计算与申请

  1. 计算任务数量
    • 根据任务信息,计算共需要多少Map Task和多少Reduce Task。
  2. 发送资源请求
    • 通过心跳包,将任务计算的结果资源需求发送给主节点,进行资源的申请。

四、Resource Manager分配资源

  1. 资源分配工作
    • 根据收到的资源申请的结果信息,进行资源的分配工作。
    • 如果资源比较宽松,一次性将所需的所有资源一并全返回。
    • 如果资源比较紧张,最起码应该返回所有Map Task所需资源。

五、Node Manager执行任务

  1. 获取资源信息
    • Application Master通过心跳包,一直询问是否已经准备好资源,一旦准备好,将资源信息全部获取。
  2. 通知Node Manager
    • 根据获取的资源信息,通知各个Node Manager,启动相关的程序(先启动Map Task),告知Node Manager任务信息(如JAR包路径、主类、参数)。

六、任务执行与监控

  1. 执行任务进度监控
    • 每一个运行的container定时和Application Master汇总执行任务执行的进度。
    • 并且还基于Node Manager和Resource Manager的使用情况,报告资源的使用情况。
    • 如果初始化的时候,只是返回Map Task运行的资源。
    • 当Map Task执行完成后,或者执行过程中,Application Master向Resource Manager/Node Manager询问Reduce Task的资源是否已经准备好了,如果准备好了,就进行Reduce任务。
  2. 任务完成报告
    • 当整个Map Task和Reduce Task都运行完成后,通知Application Master已经完成执行任务了。
  3. 资源回收
    • Resource Manager收回所有分配的资源,然后通知Application Master可以执行自毁程序了。

这种资源调度机制确保了在YARN集群中,任务能够高效地获取和利用资源,同时也保证了资源的合理分配和管理。


http://www.ppmy.cn/ops/127471.html

相关文章

opencv学习:人脸识别FisherFaceRecognizer_create算法的使用

FisherFaceRecognizer_create算法 cv2.face.FisherFaceRecognizer_create() 是 OpenCV 中用于创建 FisherFace 人脸识别模型的函数。FisherFace 是一种基于线性判别分析(Linear Discriminant Analysis,LDA)的人脸识别方法。这种方法的核心思…

北京大学与长安汽车联合发布TEOcc: 时域增强的多模态占据预测

北京大学与长安汽车联合发布TEOcc: 时域增强的多模态占据预测 Abstract 作为一种新颖的3D场景表示,语义占据(semantic occupancy)在自动驾驶领域引起了广泛关注。然而,现有的占据预测方法主要集中于设计更好的占据表示形式&…

SpringBoot +Vue3前后端分离项目入门基础实例四

项目说明 项项目名称使用框架说明后端项目springboot_vue_element_demoSpringBoot + MyBatis-plus + MySQL完成基本的增删改查操作API前端项目vue-projectVue3 + ElementUI plus + axios界面展示,调用后端API项目文档目录 SpringBoot +Vue3前后端分离项目入门基础实例一 Spri…

「漏洞复现」灵当CRM data/pdf.php 任意文件读取漏洞

0x01 免责声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删…

持续科技创新 高德亮相2024中国测绘地理信息科技年会

图为博览会期间, 自然资源部党组成员、副部长刘国洪前往高德企业展台参观。 10月15日,2024中国测绘地理信息科学技术年会暨中国测绘地理信息技术装备博览会在郑州召开。作为国内领先的地图厂商,高德地图凭借高精度高动态导航地图技术应用受邀参会。 本…

LeetCode 2379.得到K个黑块的最少涂色次数

题目: 给你一个长度为 n 下标从 0 开始的字符串 blocks ,blocks[i] 要么是 W 要么是 B ,表示第 i 块的颜色。字符 W 和 B 分别表示白色和黑色。 给你一个整数 k ,表示想要 连续 黑色块的数目。 每一次操作中,你可以…

力扣3191.使二进制数全变成1

给你一个二进制数组 nums 。 你可以对数组执行以下操作 任意 次(也可以 0 次): 选择数组中 任意连续 3 个元素,并将它们 全部反转 。 反转 一个元素指的是将它的值从 0 变 1 ,或者从 1 变 0 。 请你返回将 nums 中…

Java笔试05

在Java中,final 关键字可以用于修饰类、方法和变量: 修饰类: 被 final 修饰的类不能被继承,即不能有子类。这通常用于工具类或者不希望被扩展的类。 修饰方法: 被 final 修饰的方法不能被子类覆盖。这通常用于确保类…