Hadoop三大组件的工作原理

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能够更好地应对日益增长的数据处理需求和复杂的应用场景,为企业和科研机构等提供强大的数据分析和处理能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值