Hadoop三大组件的工作原理

news2024/11/28 15:41:48

Hadoop三大组件的工作原理

一、引言

Hadoop是一个开源的分布式计算框架,在大数据处理领域具有举足轻重的地位。其核心组件包括HDFS(分布式文件系统)、MapReduce(分布式计算框架)和YARN(资源管理系统)。理解这三大组件的工作原理对于高效利用Hadoop进行大数据处理至关重要。

二、HDFS(分布式文件系统)工作原理

(一)概述

HDFS是Hadoop的核心存储组件,它被设计用于在大规模集群上存储和管理海量数据,具有高容错性、高可靠性和高可扩展性等特点。

(二)数据存储原理

  1. 数据块划分
    • HDFS将文件分割成固定大小的数据块(默认大小为128MB,可配置)。例如,一个1GB的文件会被划分为8个数据块(1GB / 128MB = 8)。这样做的好处是便于数据的分布式存储和并行处理。每个数据块会在不同的节点上存储多个副本(默认是3个副本,可配置),以提高数据的可靠性和可用性。
  2. 数据块存储
    • HDFS中的数据块存储在集群中的DataNode节点上。DataNode负责实际存储数据块,并定期向NameNode汇报其存储的数据块信息。NameNode是HDFS的管理节点,它维护着整个文件系统的元数据,包括文件与数据块的映射关系、数据块的位置信息等。
    • 当客户端要写入一个文件时,首先会与NameNode进行通信,NameNode会根据集群的负载情况和副本策略等因素,为每个数据块分配合适的DataNode节点进行存储。客户端然后将数据块直接传输到这些DataNode节点上,DataNode之间会进行数据块的复制,以确保副本数量达到要求。

(三)数据读写流程

读取数据

在这里插入图片描述

1.客户端通过Distributed FileSystem 向 NameNode 发送读取数据请求,NameNode首先会检查当前申请的客户端是否有读取权限,以及要读取的文件是否存在,若检查没有问题则进行下一步;
2.NameNode 通过查询元数据找到所要读取的文件存储的 DataNode 地址,NameNode 把地址返回给客户端;
3.客户端根据 NameNode 返回的地址,根据网络拓扑关系和机架感知原理找到最近的一台 DataNode服务器,并与其建立管道,然后这台 DataNode 再与第二台机器建立管道,第二台再与第三台建立管道;
4.DataNode 开始传输数据给客户端(从磁盘里读取数据流,以 packet 为单位来做校验),直到传输结束;
5.客户端以 packet 为单位接收,然后把接收到的小文件合并为大文件,读取文件流程结束。

写入数据

在这里插入图片描述

1.客户端通过 Distributed FileSystem 模块向 NameNode 请求上传文件,NameNode 检查是否有写入权限、目标文件是否已存在,父目录是否存在。
2.NameNode 返回是否可以上传。
3.客户端把文件进行切分,切分后请求第一个 block 上传到哪几个 datanode 服务器上。
4.NameNode 返回3个datanode 节点,分别为dn1、dn2、dn3。
5.客户端通过 FSDataOutputStream 模块请求 dn1 上传数据,dn1 收到请求会继续调用 dn2,
然后 dn2 调用 dn3,将这个通信管道建立完成。
6.dnl、dn2、dn3 逐级应答客户端。
7.客户端开始往 dn1上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以 packe为单位,dn1收到一个packet就会传给 dn2,dn2传给dn3;dnl每传一个packet会放入一个应答队列等待应答。
8.当一个block 传输完成之后,客户端再次请求 NameNode 上传第二个 block 的服务器。(重复执行 3-7步)。

(四)容错机制

  1. 副本机制
    • 如前所述,数据块会在不同的DataNode节点上存储多个副本。当某个DataNode节点出现故障时,NameNode会检测到这种情况,并根据副本策略选择其他健康的DataNode节点来复制数据块,以保证副本数量的完整性。例如,如果一个数据块的三个副本中有一个副本所在的DataNode节点故障,NameNode会指示另外的DataNode节点复制该数据块,使得副本数量恢复到3个。
  2. 心跳机制
    • DataNode会定期向NameNode发送心跳信号,以表明自己的状态。如果NameNode在一段时间内没有收到某个DataNode的心跳信号,就会认为该DataNode节点故障,并采取相应的容错措施,如重新分配该DataNode上的数据块副本等。

三、MapReduce(分布式计算框架)工作原理

(一)概述

MapReduce是一种用于大规模数据集并行处理的编程模型和计算框架。它将复杂的数据分析任务分解为两个阶段:Map阶段和Reduce阶段,通过分布式计算的方式在集群上高效处理数据。
在这里插入图片描述

(二)Map阶段工作原理

  1. 数据分割与映射
    • 在Map阶段,输入数据通常会被分割成若干个小的数据集,每个数据集称为一个输入分片(Input Split)。例如,对于一个大规模的文本文件,可能会按照一定的行数或字节数将其分割成多个输入分片。
    • 然后,MapReduce框架会为每个输入分片启动一个Map任务。Map任务会读取输入分片中的数据,并对每一条数据进行处理,将其转换为键值对(key-value pair)的形式。例如,在一个单词计数的任务中,Map任务会读取文本中的每一行,将每行中的单词作为键,将值设置为1(表示出现一次)。
  2. 本地排序与组合(可选)
    • Map任务生成的键值对会在本地进行排序,按照键的字典序进行排序。这样做是为了方便后续的处理。
    • 一些情况下,还可以进行本地组合(Combiner)操作。Combiner是一个可选的优化步骤,它的作用是对本地相同键的值进行预聚合。例如,在单词计数任务中,对于本地出现多次的相同单词,可以在Map任务本地先将其值进行累加,减少需要传输到Reduce阶段的数据量。

(三)Shuffle阶段工作原理

  1. 数据分区与传输
    • 经过Map阶段处理后,数据需要被传输到Reduce阶段进行进一步处理。在这个过程中,会经过Shuffle阶段。Shuffle阶段的主要任务是对Map阶段输出的键值对进行分区(Partition)和排序,并将它们传输到对应的Reduce任务所在的节点上。
    • 根据Reduce任务的数量,将Map输出的键值对划分到不同的分区中。例如,如果有3个Reduce任务,那么可能会根据键的哈希值将键值对划分到0、1、2三个分区中。每个分区中的数据会被传输到对应的Reduce任务所在的节点上进行处理。
  2. 数据排序与合并
    • 在传输到Reduce节点之前,不同Map任务输出的属于同一分区的数据会在网络传输过程中进行合并和排序,以确保Reduce任务能够按照键的顺序依次处理数据。这样可以提高Reduce任务的处理效率。

(四)Reduce阶段工作原理

  1. 数据处理与聚合
    • Reduce任务会接收来自Shuffle阶段传输过来的属于自己分区的数据。Reduce任务会对这些数据进行处理,通常是对相同键的值进行聚合操作。例如,在单词计数任务中,Reduce任务会将所有相同单词的计数进行累加,得到最终每个单词的出现次数。
  2. 结果输出
    • Reduce任务处理完数据后,会将结果输出到HDFS或其他指定的存储位置。输出的结果可以是一个新的文件,也可以是存储在数据库中的数据等,具体取决于应用程序的需求。

四、YARN(资源管理系统)工作原理

(一)概述

YARN是Yet Another Resource Negotiator的缩写,它是Hadoop 2.0版本中引入的资源管理系统,主要负责集群资源的管理和调度,使得不同的应用程序(如MapReduce、Spark等)可以在集群上高效地共享资源并运行。
在这里插入图片描述

(二)资源管理原理

  1. 资源抽象
    • YARN将集群中的资源抽象为两种主要类型:计算资源(CPU核心数)和内存资源。每个节点(NodeManager)会向ResourceManager汇报自己的资源情况,包括可用的CPU核心数和内存大小等信息。
  2. 资源容器(Container)
    • YARN使用容器(Container)来封装和分配资源。一个容器代表了一定数量的CPU和内存资源的集合。当一个应用程序(如MapReduce作业)需要运行时,它会向ResourceManager申请一定数量的容器来运行其任务。ResourceManager会根据集群的资源状况和应用程序的需求,为其分配合适的容器。例如,一个Map任务可能会被分配一个包含1个CPU核心和一定内存量的容器来运行。

(三)任务调度原理

  1. 应用程序提交与请求资源
    • 用户向YARN提交应用程序,应用程序首先会向ResourceManager发送请求,请求包括应用程序所需的资源类型和数量等信息。ResourceManager会根据集群的整体资源使用情况和调度策略来决定是否为该应用程序分配资源。
  2. 资源分配与任务启动
    • 如果ResourceManager决定为应用程序分配资源,它会与相关的NodeManager通信,指示NodeManager启动相应的容器来运行应用程序的任务(如MapReduce任务)。NodeManager会在本地创建容器,并启动任务的执行进程。
  3. 监控与资源回收
    • 在任务运行过程中,ResourceManager会持续监控应用程序的运行状态和资源使用情况。如果应用程序完成任务或者出现故障,ResourceManager会回收分配给它的资源(容器),以便将这些资源分配给其他需要的应用程序。同时,NodeManager也会定期向ResourceManager汇报容器的运行状态和资源使用情况,以便ResourceManager进行全局的资源管理和调度决策。

(四)调度策略

  1. 先进先出(FIFO)调度策略
    • 这是YARN默认的一种简单调度策略。按照应用程序提交的先后顺序为它们分配资源和调度任务执行。先提交的应用程序会先获得资源并运行,直到其完成或者释放资源后,后续的应用程序才能获得资源。这种策略适用于简单的场景,但在大规模集群中,可能会导致一些大作业长时间占用资源,使得小作业等待时间过长。
  2. 容量调度策略(Capacity Scheduler)
    • 容量调度策略允许多个组织或用户共享一个Hadoop集群。它将集群的资源划分为多个队列,每个队列配置一定的资源容量(如CPU和内存的比例)。用户可以将自己的应用程序提交到相应的队列中。队列按照其配置的容量来获取资源,并在队列内部按照FIFO等策略为应用程序分配资源。这种策略适合于多用户、多任务的场景,可以保证每个用户或组织都能获得一定比例的资源,提高集群资源的利用率和公平性。
  3. 公平调度策略(Fair Scheduler)
    • 公平调度策略旨在为所有运行的应用程序提供公平的资源共享。它会根据应用程序的实际资源需求动态地调整资源分配。当一个新的应用程序提交时,它会获得一定的初始资源份额。随着时间的推移,如果其他应用程序完成任务释放资源,公平调度器会将这些释放的资源重新分配给正在运行的应用程序,使得每个应用程序都能获得大致相等的资源使用时间。这样可以避免一些应用程序长时间饥饿等待资源的情况,提高整体的系统效率和公平性。

五、结论

Hadoop的HDFS、MapReduce和YARN三大组件相互协作,共同构成了一个强大的大数据处理平台。HDFS提供了可靠的分布式存储功能,MapReduce实现了高效的分布式计算模式,而YARN则负责资源的管理和调度,确保各种应用程序能够在集群上合理地利用资源并高效运行。理解这些组件的工作原理对于充分发挥Hadoop在大数据处理领域的优势,以及开发高效的大数据应用程序具有重要意义。通过不断优化和改进这些组件的工作方式,Hadoop能够更好地应对日益增长的数据处理需求和复杂的应用场景,为企业和科研机构等提供强大的数据分析和处理能力。

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

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

相关文章

Vue3 ECharts看板

获取 ECharts - 入门篇 - 使用手册 - Apache ECharts npm install echarts <template><div id"main" style"height:400px;"></div> </template><script lang"ts" setup> import { ref, onMounted } from "…

AcWing 905:区间选点 ← 贪心算法

【题目来源】https://www.acwing.com/problem/content/907/【题目描述】 给定 N 个闭区间 [ai,bi]&#xff0c;请你在数轴上选择尽量少的点&#xff0c;使得每个区间内至少包含一个选出的点。 输出选择的点的最小数量。 位于区间端点上的点也算作区间内。【输入格式】 第一行包…

【论文阅读笔记】End-to-End Object Detection with Transformers

代码地址&#xff1a;https://github.com/facebookresearch/detr 论文小结 本文是Transformer结构应用于目标检测&#xff08;OD&#xff09;任务的开山之作。方法名DETE&#xff0c;取自Detection Transformer。   作为2020年的论文&#xff0c;其表现精度在当时也不算高的…

Linux:信号保存与处理

使用kill -l命令查看信号&#xff1a; 信号量和信号确实一点关系没有 信号是操作系统发出的进程与进程之间的通知于中断&#xff0c;是进程之间时间异步通知的一种方式 先了解同步通信&#xff1a;同步通信是一种比特同步通信技术&#xff0c;要求发收双方具有同频同相的同步…

学以致用 SAP HCM 顾问excel函数实战系列

EXCEL函数&#xff1a;在上学的时候&#xff0c;对word、excel、PPT感觉都很简单&#xff0c;稀里糊涂的学&#xff0c;稀里糊涂的忘&#xff0c;然后走向工作岗位的时候&#xff0c;突然发现这三大宝剑无比锋利&#xff0c;可惜自己太菜&#xff0c;曾经努力学习&#xff0c;但…

前端 | Uncaught (in promise) undefined

前端 | Uncaught (in promise) undefined 最近开发运行前端项目时&#xff0c;经常预计控制台报错 &#xff0c;如下图&#xff1a; 这里我总结下&#xff0c;这种报错的场景和原因&#xff0c;并通过实际代码案例帮助小伙伴更好理解下 。 文章目录 前端 | Uncaught (in promi…

数据丢失的终极克星来了!EasyRecovery17数据恢复软件

数据丢失的终极克星来了&#xff01; 各位亲爱的朋友们&#xff0c;你们有没有经历过那种“哎呀妈呀&#xff0c;重要文件找不到了&#xff01;”的绝望时刻&#xff1f;别急&#xff0c;今天我要向你们安利一款神器——EasyRecovery17数据恢复软件&#xff0c;简直是我们这些“…

Javascript笔试题目(二)

1.如何使用ES6语法对函数所有参数进行求和?请写出具体代码 function sumAll(...args) { // args 是一个数组&#xff0c;包含了函数接收到的所有参数 return args.reduce((accumulator, currentValue) > accumulator currentValue, 0); } // 测试函数 console.log…

查找企业联系电话的几种方法

在商业合作和销售拓展的过程中&#xff0c;找到企业的联系电话是至关重要的一步。无论是精准营销还是客户开发&#xff0c;拥有有效的联系方式可以大大提高成功率。那么&#xff0c;如何快速有效地查找企业联系电话呢&#xff1f;下面介绍几种常见的方法&#xff0c;以及如何借…

摩托车一键启动智能钥匙提高了便捷性和安全性

摩托车一键启动无钥匙进入功能是一种便捷的智能配置 通过PKE智能感应技术实现无钥匙启动&#xff1a; 技术原理与操作 摩托车一键启动无钥匙进入系统采用了RFID无线射频技术和车辆身份编码识别系统&#xff0c;实现了双重射频系统、双重防盗保护。操作简便&#xff0c;只需携…

最后倒计时,SIGMOD 2025全球数据库盛会,你准备好了吗?

一、会议资讯&#xff1a; ACM SIGMOD/PODS International Conference on Management of Data是计算机科学领域中一个顶级的国际学术会议&#xff0c;专注于数据库管理和数据系统的前沿研究。 SIGMOD Conference 每年由 ACM 主办&#xff0c;汇集了全球顶尖的学者、研究人员和…

【使用Java循环输出菱形,空心金字塔】

使用Java循环输出图形的探索之旅 在这篇博客中&#xff0c;我们将探讨如何使用Java中的循环结构来输出各种几何图形&#xff0c;特别是金字塔和菱形。通过这一过程&#xff0c;不仅能够加深对循环的理解&#xff0c;还能提升编程能力。 1. 打印矩形 首先&#xff0c;我们从最…

初级学习:Python实现AI并搭建

随着人工智能(AI)的迅猛发展,越来越多的人希望能够学习如何通过编程实现AI应用。Python,因为其简洁易用,被广泛认为是AI开发的理想编程语言。本文将介绍Python在AI开发中的基础应用,帮助初学者入门并构建自己的AI项目。 为什么选择Python 在了解如何用Python实现AI之前,…

探索 Python 装饰器的终极利器:wrapt 库

文章目录 探索 Python 装饰器的终极利器&#xff1a;wrapt 库背景&#xff1a;装饰器的进化之旅初识 wrapt&#xff1a;它究竟是什么&#xff1f;安装 wrapt&#xff1a;简单几步&#xff0c;轻松上手函数的魔法&#xff1a;wrapt 的简单使用创建简单装饰器装饰器的高级用法&am…

浅谈导热油蒸汽发生器在电子及半导体行业中应用

导热油蒸汽发生器在电子或半导体行业制造过程中有着广泛的应用。为促进温控行业交流发展上海中壹展览等于十二月在上海举办主办首届“TCU China温控展”。以下是一些具体的应用场景和优势&#xff1a; 应用场景 1.清洗与洁净室控制: 半导体生产过程中&#xff0c;生产设备和工…

TikTok代理IP全面使用指南

对于那些希望通过社交媒体打造个人品牌的人来说&#xff0c;TikTok是现在热门的平台&#xff0c;他的流量与曝光不可小觑&#xff0c;相信很多跨境营销会选择他进行多账号营销。问题是&#xff0c;TikTok多账号很容易遇到封禁问题&#xff0c;那么如何解决&#xff1f; 一、什么…

第十三章 RabbitMQ之消息幂等性

目录 一、引言 二、消息幂等解决方案 2.1. 方案一 2.2. 方案二 一、引言 幂等是一个数学概念&#xff0c;用函数表达式来描述是这样的&#xff1a;f(x) f(f(x)) 。在程序开发中&#xff0c;则是指同一个业务&#xff0c;执行一次或多次对业务状态的影响是一致的。有些业务…

3款逆天级Word插件,一键解决文档排版烦恼

在当今快节奏的工作环境中&#xff0c;高效的文档处理能力至关重要&#xff0c;今天电脑天空将为大家介绍三款卓越的Word插件&#xff0c;它们能显著提升你的写作效率&#xff0c;让您的工作成果更加出色。 1. 文档排版利器&#xff1a;小恐龙公文排版助手 小恐龙公文排版助手…

Chromium 如何查找已经定义的mojom函数实现c++

进程通信定义通常都是用.mojom文件或者idl文件格式 以content\common\frame.mojom里面的BeginNavigation函数为例。 一、如何查找BeginNavigation函数定义&#xff0c;在vscode里面直接搜索BeginNavigation&#xff0c;过滤条件 *.idl,*.mojom,*.cc 效果&#xff1a; 这样…

HECTOR:一种新型多模态深度学习模型用于预测子宫内膜癌复发风险|顶刊精析·24-10-12

小罗碎碎念 这篇文章是关于一项名为HECTOR&#xff08;histopathology-based endometrial cancer tailored outcome risk&#xff09;的研究&#xff0c;它是一个基于多模态深度学习的预测模型&#xff0c;用于预测子宫内膜癌&#xff08;EC&#xff09;的复发风险。 作者角色作…