问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

【Hadoop】核心组件深度剖析:HDFS、YARN与MapReduce的奥秘

创作时间:
作者:
@小白创作中心

【Hadoop】核心组件深度剖析:HDFS、YARN与MapReduce的奥秘

引用
CSDN
1.
https://blog.csdn.net/weixin_53269650/article/details/141322776

Hadoop是一个开源的分布式计算框架,主要用于处理和存储大量数据。它由Apache软件基金会开发,基于Google的MapReduce和Google文件系统(GFS)的理念设计。Hadoop提供了一种可扩展、容错的方式来处理大规模数据集,使得用户能够在廉价的硬件上进行分布式计算。

一、引言

1、Hadoop简介

Hadoop是一个开源的分布式计算框架,主要用于处理和存储大量数据。它由Apache软件基金会开发,基于Google的MapReduce和Google文件系统(GFS)的理念设计。Hadoop提供了一种可扩展、容错的方式来处理大规模数据集,使得用户能够在廉价的硬件上进行分布式计算。

2、Hadoop生态系统概览

Hadoop生态系统是围绕Hadoop分布式计算框架所建立的一系列工具和技术的集合。这些工具涵盖了数据存储、数据处理、数据管理、数据分析等多个方面,旨在帮助用户处理和分析大规模数据集。

  1. 数据存储与管理
  • HDFS (Hadoop Distributed File System):
  • Hadoop分布式文件系统,用于存储大规模数据,具备高容错性和高吞吐量。
  • HBase:
  • 一个基于列存储的分布式数据库,适合处理大规模结构化数据,支持实时读写。
  • Hive:
  • 一个数据仓库工具,可以将结构化数据映射为表,支持使用类似SQL的查询语言HiveQL进行查询。
  • HCatalog:
  • Hive的元数据管理服务,帮助不同Hadoop工具(如Pig、MapReduce)之间共享数据元数据。
  • HCFS (Hadoop Compatible File System):
  • 支持与HDFS兼容的第三方文件系统,如Amazon S3。
  1. 数据处理
  • MapReduce:
  • Hadoop的核心分布式计算框架,负责大规模数据的并行处理。
  • YARN (Yet Another Resource Negotiator):
  • 资源管理框架,负责集群资源的分配和任务调度,支持多种计算模型。
  • Tez:
  • 一种基于DAG(有向无环图)的计算框架,作为MapReduce的更高效替代方案。
  • Spark:
  • 一个内存计算框架,比MapReduce更快,支持实时数据处理和复杂计算任务。
  • Pig:
  • 一个数据流处理工具,使用Pig Latin语言编写数据分析任务,适合处理非结构化和半结构化数据。
  • Flink:
  • 一个分布式流处理框架,支持流式和批处理数据的实时计算。
  1. 数据分析与查询
  • Hive:
  • 前面提到的Hive也属于数据分析工具,可以通过SQL查询大规模数据。
  • Impala:
  • 由Cloudera开发的一个分布式SQL查询引擎,提供快速的查询能力,适合交互式分析。
  • Drill:
  • 一个低延迟查询引擎,支持各种数据源(如HDFS、HBase、NoSQL等)的查询。
  • Phoenix:
  • 用于HBase的SQL查询引擎,支持低延迟的查询操作。
  • Kylin:
  • 一个分布式数据仓库引擎,支持多维分析和OLAP查询,适合大规模数据集的分析。
  1. 数据流处理
  • Storm:
  • 实时流处理框架,适合低延迟处理和分布式计算任务。
  • Kafka:
  • 一个分布式消息队列系统,支持高吞吐量的消息发布与订阅,广泛用于实时数据流处理。
  • Flink:
  • 既支持流式处理又支持批处理的数据处理框架,提供低延迟的实时计算。

二、Hadoop Distributed File System (HDFS) 深度解析

1、HDFS核心概念

  1. 分布式架构:
  • HDFS是一个主从(master-slave)架构,由一个NameNode(主节点)和多个DataNode(数据节点)组成。
  • NameNode负责管理文件系统的元数据,包括文件的路径、块(block)的位置等。
  • DataNode负责存储实际的数据块,并定期向NameNode报告其存储的块信息。
  1. 块存储(Block Storage):
  • 在HDFS中,文件被划分为多个块(默认大小为128MB),并将这些块分布式地存储在不同的DataNode上。
  • 每个块会被复制多个副本(默认是3份)并存储在不同的DataNode上,以提供容错能力。
  1. 高容错性:
  • HDFS通过数据块的多副本机制来提供容错能力。当一个DataNode发生故障时,系统可以从其他副本中恢复数据,确保数据的高可用性。
  • NameNode持有文件系统的元数据,并将其存储在本地磁盘和定期保存的镜像文件中,以防止数据丢失。
  1. 高吞吐量:
  • HDFS优化了大规模数据的顺序读写操作,适合大数据量的批处理任务,如MapReduce。
  • 通过将数据分布在多个DataNode上,并行地进行数据读写操作,提高了系统的整体吞吐量。
  1. 数据本地性:
  • HDFS充分利用了数据本地性原则,即将计算任务尽量安排到存储目标数据的节点上,以减少网络带宽的消耗,提高处理效率。
  1. 流式数据访问(Streaming Data Access):
  • HDFS适用于一次写入、多次读取的场景。数据写入后一般不会被修改(append-only模式),支持数据的流式访问,这与传统的文件系统有所不同。

2、HDFS工作机制

  1. 文件写入过程:
  • 当一个文件被写入HDFS时,它会被切分成多个块。
  • NameNode会为这些块指定存储位置,并将位置信息记录到元数据中。
  • 客户端将数据块顺序写入到指定的DataNode,并根据复制策略将块的副本存储到不同的DataNode上。
  1. 文件读取过程:
  • 客户端向NameNode请求读取文件时,NameNode会返回文件块的位置列表。
  • 客户端根据这个列表并行地从多个DataNode读取数据块,从而提高读取速度。
  1. 数据再平衡(Data Rebalancing):
  • HDFS通过DataNode的自动再平衡机制,确保数据块均匀分布在集群的所有节点上,以提高系统的存储利用率和性能。
  1. 故障恢复:
  • 当一个DataNode发生故障时,NameNode会检测到并安排在其他健康的DataNode上复制丢失的块,从而恢复数据的完整性。

3、HDFS的优势与局限

优势:

  1. 容错性:通过数据块的多副本机制,HDFS提供了较高的容错能力。
  2. 可扩展性:HDFS可以轻松地扩展,支持成千上万的节点和数PB级的数据存储。
  3. 高吞吐量:适合大规模数据处理任务,优化了顺序读写操作。

局限:

  1. 低延迟访问:HDFS主要设计用于高吞吐量的大规模批处理场景,不适合低延迟的数据访问需求。
  2. 小文件问题:HDFS不擅长处理大量小文件,因为NameNode的内存中存储着文件系统的元数据,大量的小文件会占用过多的元数据存储空间。

三、Yet Another Resource Negotiator (YARN) 架构剖析

1、YARN诞生背景与意义

YARN(Yet Another Resource Negotiator)是Hadoop生态系统中的一个关键组件,其主要目的是为Hadoop集群中的资源管理和任务调度提供支持。

  1. MapReduce的局限性:
  • Hadoop最初是以MapReduce为核心的计算框架,这种设计虽然适合处理批量数据,但在处理其他类型的计算任务(如实时处理、图计算、机器学习等)时存在局限性。
  • MapReduce模型的硬编码限制了它的灵活性,使得其在面对不同的计算需求时难以扩展和优化。
  1. 资源管理的挑战:
  • 早期的Hadoop版本(如Hadoop 1.x)将资源管理和任务调度与计算模型(MapReduce)紧密耦合在一起,导致资源管理不够灵活且难以扩展。
  • 集群中的资源管理和任务调度通常由单一的JobTracker负责,这种集中式的管理方式限制了集群的可扩展性和可靠性。
  1. 需求变化:
  • 随着大数据技术的发展,企业和研究机构对集群资源的管理需求变得越来越复杂,需要支持多种计算框架(如Spark、Tez、HBase、Storm等),而不仅仅是MapReduce。
  • 对于大规模数据处理的需求不断增长,需要一种更为灵活和可扩展的资源管理解决方案来适应不同的应用场景。

2、YARN架构概览

  1. ResourceManager(RM):
  • 职责:负责整个集群的资源管理和调度。ResourceManager主要包括两个部分:
  • Scheduler:负责将资源分配给不同的应用程序。Scheduler按照资源请求、队列优先级和其他调度策略进行资源分配。常见的调度策略包括容量调度器(Capacity Scheduler)和公平调度器(Fair Scheduler)。
  • ResourceManager Core:管理集群的整体资源,跟踪每个节点的资源使用情况,处理来自ApplicationMaster的资源请求。
  1. NodeManager(NM):
  • 职责:负责单个节点的资源管理和任务监控。NodeManager主要包括两个部分:
  • ResourceManager Client:向ResourceManager注册节点的资源信息,并处理从ResourceManager收到的任务请求。
  • Container Management:启动和管理在本地节点上运行的容器,并监控容器的资源使用情况。
  1. ApplicationMaster(AM):
  • 职责:每个应用程序(如MapReduce、Spark作业等)有一个独立的ApplicationMaster负责管理其生命周期。ApplicationMaster负责:
  • 向ResourceManager请求资源。
  • 跟踪应用程序的任务进度,协调任务的执行。
  • 处理应用程序的失败恢复和重新调度。
  • 独立性:ApplicationMaster是应用程序级别的,并且可以根据实际需要动态请求资源和调度任务。
  1. Container:
  • 职责:是在节点上运行的资源单位。每个容器分配了一定的CPU、内存和磁盘资源,用于执行任务。容器的管理由NodeManager负责,包括启动、监控和资源回收。

3、YARN工作流程

  1. 应用程序提交
  • 应用程序提交:
  • 用户提交应用程序(如MapReduce、Spark作业)到集群。
  • 提交过程通常包括定义作业的需求(资源、执行环境等)和作业的配置参数。
  • 启动ApplicationMaster:
  • 提交的应用程序包含一个ApplicationMaster的实例,该实例负责管理应用程序的整个生命周期。
  • 提交请求被传递给ResourceManager。
  1. 资源申请与分配
  • ResourceManager资源管理:
  • ResourceManager负责集群资源的全局管理,包括资源的分配和调度策略。
  • ResourceManager接收来自ApplicationMaster的资源请求,并决定是否满足这些请求。
  • Scheduler调度:
  • ResourceManager的Scheduler根据调度策略(如容量调度器或公平调度器)来决定资源的分配。
  • Scheduler考虑资源的可用性、队列优先级和其他调度策略来分配资源。
  • 分配容器:
  • ResourceManager将资源分配给ApplicationMaster,通常以容器的形式分配给应用程序。
  • 每个容器包括CPU、内存和磁盘资源,并在NodeManager上启动。

  1. 任务执行
  • 启动容器:
  • NodeManager接收到ResourceManager的指令,在本地节点上启动分配的容器。
  • ApplicationMaster在容器中启动任务并执行作业的计算。
  • 任务管理:
  • ApplicationMaster负责管理任务的执行,协调多个任务之间的工作,处理任务失败和恢复。
  • ApplicationMaster跟踪每个任务的状态,并根据需要调整资源请求。
  • 任务监控:
  • NodeManager负责监控容器的资源使用情况,并将状态报告返回给ResourceManager和ApplicationMaster。
  • 监控信息包括容器的资源使用、健康状况等。
  1. 资源释放与回收
  • 任务完成:
  • 当任务完成时,容器释放其占用的资源。
  • NodeManager将完成的信息报告给ResourceManager。
  • 资源回收:
  • ResourceManager更新资源的可用状态,将释放的资源重新纳入集群资源池。
  • 这些资源可以被其他应用程序请求和使用。
  1. 应用程序完成
  • 完成报告:
  • ApplicationMaster在任务完成后向ResourceManager报告作业的最终状态,包括成功、失败或其他状态。
  • ApplicationMaster处理应用程序的最终清理和资源释放。
  • 结果存储:
  • 应用程序的结果可以被存储在HDFS或其他存储系统中,以供后续使用。
  • 结束生命周期:
  • ApplicationMaster完成其生命周期,释放所占用的资源,清理相关的运行状态。

4、YARN应用场景

YARN(Yet Another Resource Negotiator)作为Hadoop的资源管理和调度平台,为各种计算框架和应用程序提供了高效的资源管理。

1. 大数据处理

  • MapReduce
  • 应用场景:传统的MapReduce作业仍然是YARN的核心应用之一。适用于批处理、数据挖掘和数据分析。
  • 示例:ETL(提取、转换、加载)作业、日志分析、数据统计等。
  • Spark
  • 应用场景:Spark是一个通用的数据处理引擎,支持批处理、流处理、机器学习和图计算。
  • 示例:实时数据分析、图计算任务、机器学习训练等。

2. 实时数据处理

  • Apache Storm
  • 应用场景:处理实时流数据,适用于需要低延迟的应用场景。
  • 示例:实时数据监控、实时日志分析、点击流分析等。
  • Apache Flink
  • 应用场景:提供强大的流处理能力,支持有状态流处理和事件时间处理。
  • 示例:实时数据分析、实时指标计算、流数据的复杂事件处理等。

3. 交互式查询

  • Apache Hive
  • 应用场景:为Hadoop提供SQL查询能力,适用于需要交互式数据查询和分析的场景。
  • 示例:数据仓库查询、业务智能分析、数据报表生成等。
  • Apache Impala
  • 应用场景:提供低延迟的SQL查询能力,适用于对数据进行快速查询的应用。
  • 示例:实时数据分析、OLAP查询等。

四、MapReduce编程模型与实现机制

1、MapReduce基本概念

  1. Map阶段:
  • 任务:在Map阶段,数据被分割成若干块(通常是文件的分块),然后由多个Map任务并行处理。每个Map任务将输入数据(键-值对)处理成中间结果(键-值对)。
  • 输入:原始数据通常以键-值对的形式提供给Map任务。例如,输入数据可以是一个文本文件,其中每一行是一个键值对(如行号和行内容)。
  • 处理:Map函数会遍历这些键值对,并生成一组中间键值对。这些中间键值对会被整理(通过Shuffle和Sort过程)以准备进入Reduce阶段。
  1. Shuffle和Sort:
  • 任务:在Map和Reduce之间,MapReduce框架会进行一个Shuffle和Sort过程。这个过程将Map输出的中间结果根据键进行分组和排序,以便将相同键的中间结果传递到同一个Reduce任务。
  • 目的:确保每个Reduce任务只处理一种键的数据,从而有效地进行聚合操作。
  1. Reduce阶段:
  • 任务:Reduce阶段将处理Shuffle和Sort阶段输出的中间结果。Reduce任务接收一组键以及与之对应的一系列值,然后对这些值进行聚合操作。
  • 输出:Reduce函数将这些聚合的结果(通常也是键-值对)写入最终的输出文件中。

2、MapReduce 工作流程

  1. 数据切分:
  • 输入数据被切分成多个块(Splits),每个块由一个Map任务处理。
  1. Map任务:
  • 每个Map任务将输入块处理为一组中间的键-值对,并将这些中间结果写入到本地磁盘上。
  1. Shuffle和Sort:
  • Map任务的中间结果被读取并根据键进行排序。相同的键会被分配到同一个Reduce任务进行处理。
  1. Reduce任务:
  • 每个Reduce任务从Shuffle和Sort阶段读取中间结果,对其进行聚合处理,并将最终结果写入输出文件。
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号