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

🐇明明跟你说过:个人主页

🏅个人专栏:《大数据前沿:技术与应用并进》🏅

🔖行路有良友,便是天堂🔖

目录

一、引言

1、Hadoop简介

2、Hadoop生态系统概览

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

1、HDFS核心概念

2、HDFS工作机制

3、HDFS的优势与局限

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

1、YARN诞生背景与意义

2、YARN架构概览

3、YARN工作流程

4、YARN应用场景

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

1、MapReduce基本概念

2、MapReduce 工作流程


一、引言

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。

2. 数据处理

MapReduce:

  • Hadoop 的核心分布式计算框架,负责大规模数据的并行处理。

YARN (Yet Another Resource Negotiator):

  • 资源管理框架,负责集群资源的分配和任务调度,支持多种计算模型。

Tez:

  • 一种基于 DAG(有向无环图)的计算框架,作为 MapReduce 的更高效替代方案。

Spark:

  • 一个内存计算框架,比 MapReduce 更快,支持实时数据处理和复杂计算任务。

Pig:

  • 一个数据流处理工具,使用 Pig Latin 语言编写数据分析任务,适合处理非结构化和半结构化数据。

Flink:

  • 一个分布式流处理框架,支持流式和批处理数据的实时计算。

3. 数据分析与查询

Hive:

  • 前面提到的 Hive 也属于数据分析工具,可以通过 SQL 查询大规模数据。

Impala:

  • 由 Cloudera 开发的一个分布式 SQL 查询引擎,提供快速的查询能力,适合交互式分析。

Drill:

  • 一个低延迟查询引擎,支持各种数据源(如 HDFS、HBase、NoSQL 等)的查询。

Phoenix:

  • 用于 HBase 的 SQL 查询引擎,支持低延迟的查询操作。

Kylin:

  • 一个分布式数据仓库引擎,支持多维分析和 OLAP 查询,适合大规模数据集的分析。

4. 数据流处理

Storm:

  • 实时流处理框架,适合低延迟处理和分布式计算任务。

Kafka:

  • 一个分布式消息队列系统,支持高吞吐量的消息发布与订阅,广泛用于实时数据流处理。

Flink:

  • 既支持流式处理又支持批处理的数据处理框架,提供低延迟的实时计算。

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

1、HDFS核心概念

1. 分布式架构:

  • HDFS 是一个主从(master-slave)架构,由一个NameNode(主节点)和多个DataNode(数据节点)组成。
  • NameNode 负责管理文件系统的元数据,包括文件的路径、块(block)的位置等。
  • DataNode 负责存储实际的数据块,并定期向 NameNode 报告其存储的块信息。

2. 块存储(Block Storage):

  • 在 HDFS 中,文件被划分为多个块(默认大小为 128 MB),并将这些块分布式地存储在不同的 DataNode 上。
  • 每个块会被复制多个副本(默认是 3 份)并存储在不同的 DataNode 上,以提供容错能力。

3. 高容错性:

  • HDFS 通过数据块的多副本机制来提供容错能力。当一个 DataNode 发生故障时,系统可以从其他副本中恢复数据,确保数据的高可用性。
  • NameNode 持有文件系统的元数据,并将其存储在本地磁盘和定期保存的镜像文件中,以防止数据丢失。

4. 高吞吐量:

  • HDFS 优化了大规模数据的顺序读写操作,适合大数据量的批处理任务,如 MapReduce。
  • 通过将数据分布在多个 DataNode 上,并行地进行数据读写操作,提高了系统的整体吞吐量。

5. 数据本地性:

  • HDFS 充分利用了数据本地性原则,即将计算任务尽量安排到存储目标数据的节点上,以减少网络带宽的消耗,提高处理效率。

6. 流式数据访问(Streaming Data Access):

  • HDFS 适用于一次写入、多次读取的场景。数据写入后一般不会被修改(append-only 模式),支持数据的流式访问,这与传统的文件系统有所不同。

2、HDFS工作机制

1. 文件写入过程:

  • 当一个文件被写入 HDFS 时,它会被切分成多个块。
  • NameNode 会为这些块指定存储位置,并将位置信息记录到元数据中。
  • 客户端将数据块顺序写入到指定的 DataNode,并根据复制策略将块的副本存储到不同的 DataNode 上。


2. 文件读取过程:

  • 客户端向 NameNode 请求读取文件时,NameNode 会返回文件块的位置列表。
  • 客户端根据这个列表并行地从多个 DataNode 读取数据块,从而提高读取速度。


3. 数据再平衡(Data Rebalancing):

  • HDFS 通过 DataNode 的自动再平衡机制,确保数据块均匀分布在集群的所有节点上,以提高系统的存储利用率和性能。


4. 故障恢复:

  • 当一个 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 模型的硬编码限制了它的灵活性,使得其在面对不同的计算需求时难以扩展和优化。


2. 资源管理的挑战:

  • 早期的 Hadoop 版本(如 Hadoop 1.x)将资源管理和任务调度与计算模型(MapReduce)紧密耦合在一起,导致资源管理不够灵活且难以扩展。
  • 集群中的资源管理和任务调度通常由单一的 JobTracker 负责,这种集中式的管理方式限制了集群的可扩展性和可靠性。


3. 需求变化:

  • 随着大数据技术的发展,企业和研究机构对集群资源的管理需求变得越来越复杂,需要支持多种计算框架(如 Spark、Tez、HBase、Storm 等),而不仅仅是 MapReduce。
  • 对于大规模数据处理的需求不断增长,需要一种更为灵活和可扩展的资源管理解决方案来适应不同的应用场景。

2、YARN架构概览

1. ResourceManager(RM):

职责: 负责整个集群的资源管理和调度。ResourceManager 主要包括两个部分:

  • Scheduler: 负责将资源分配给不同的应用程序。Scheduler 按照资源请求、队列优先级和其他调度策略进行资源分配。常见的调度策略包括容量调度器(Capacity Scheduler)和公平调度器(Fair Scheduler)。
  • ResourceManager Core: 管理集群的整体资源,跟踪每个节点的资源使用情况,处理来自 ApplicationMaster 的资源请求。


2. NodeManager(NM):

职责: 负责单个节点的资源管理和任务监控。NodeManager 主要包括两个部分:

  • ResourceManager Client: 向 ResourceManager 注册节点的资源信息,并处理从 ResourceManager 收到的任务请求。
  • Container Management: 启动和管理在本地节点上运行的容器,并监控容器的资源使用情况。


3. ApplicationMaster(AM):

职责: 每个应用程序(如 MapReduce、Spark 作业等)有一个独立的 ApplicationMaster 负责管理其生命周期。ApplicationMaster 负责:

  • 向 ResourceManager 请求资源。
  • 跟踪应用程序的任务进度,协调任务的执行。
  • 处理应用程序的失败恢复和重新调度。

独立性: ApplicationMaster 是应用程序级别的,并且可以根据实际需要动态请求资源和调度任务。 


4. Container:

  • 职责: 是在节点上运行的资源单位。每个容器分配了一定的 CPU、内存和磁盘资源,用于执行任务。容器的管理由 NodeManager 负责,包括启动、监控和资源回收。

   

3、YARN工作流程

1. 应用程序提交

应用程序提交:

  • 用户提交应用程序(如 MapReduce、Spark 作业)到集群。
  • 提交过程通常包括定义作业的需求(资源、执行环境等)和作业的配置参数。

启动 ApplicationMaster:

  • 提交的应用程序包含一个 ApplicationMaster 的实例,该实例负责管理应用程序的整个生命周期。
  • 提交请求被传递给 ResourceManager。

2. 资源申请与分配

ResourceManager 资源管理:

  • ResourceManager 负责集群资源的全局管理,包括资源的分配和调度策略。
  • ResourceManager 接收来自 ApplicationMaster 的资源请求,并决定是否满足这些请求。

Scheduler 调度:

  • ResourceManager 的 Scheduler 根据调度策略(如容量调度器或公平调度器)来决定资源的分配。
  • Scheduler 考虑资源的可用性、队列优先级和其他调度策略来分配资源。

分配容器:

  • ResourceManager 将资源分配给 ApplicationMaster,通常以容器的形式分配给应用程序。
  • 每个容器包括 CPU、内存和磁盘资源,并在 NodeManager 上启动。

   

3. 任务执行

启动容器:

  • NodeManager 接收到 ResourceManager 的指令,在本地节点上启动分配的容器。
  • ApplicationMaster 在容器中启动任务并执行作业的计算。

任务管理:

  • ApplicationMaster 负责管理任务的执行,协调多个任务之间的工作,处理任务失败和恢复。
  • ApplicationMaster 跟踪每个任务的状态,并根据需要调整资源请求。

任务监控:

  • NodeManager 负责监控容器的资源使用情况,并将状态报告返回给 ResourceManager 和 ApplicationMaster。
  • 监控信息包括容器的资源使用、健康状况等。

4. 资源释放与回收

任务完成:

  • 当任务完成时,容器释放其占用的资源。
  • NodeManager 将完成的信息报告给 ResourceManager。

资源回收:

  • ResourceManager 更新资源的可用状态,将释放的资源重新纳入集群资源池。
  • 这些资源可以被其他应用程序请求和使用。

5. 应用程序完成

完成报告:

  • 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 阶段。

2. Shuffle 和 Sort:

  • 任务:在 Map 和 Reduce 之间,MapReduce 框架会进行一个 Shuffle 和 Sort 过程。这个过程将 Map 输出的中间结果根据键进行分组和排序,以便将相同键的中间结果传递到同一个 Reduce 任务。
  • 目的:确保每个 Reduce 任务只处理一种键的数据,从而有效地进行聚合操作。

3. Reduce 阶段:

  • 任务:Reduce 阶段将处理 Shuffle 和 Sort 阶段输出的中间结果。Reduce 任务接收一组键以及与之对应的一系列值,然后对这些值进行聚合操作。
  • 输出:Reduce 函数将这些聚合的结果(通常也是键-值对)写入最终的输出文件中。

   

2、MapReduce 工作流程

1. 数据切分:

  • 输入数据被切分成多个块(Splits),每个块由一个 Map 任务处理。


2. Map 任务:

  • 每个 Map 任务将输入块处理为一组中间的键-值对,并将这些中间结果写入到本地磁盘上。


3. Shuffle 和 Sort:

  • Map 任务的中间结果被读取并根据键进行排序。相同的键会被分配到同一个 Reduce 任务进行处理。


4. Reduce 任务:

  • 每个 Reduce 任务从 Shuffle 和 Sort 阶段读取中间结果,对其进行聚合处理,并将最终结果写入输出文件。

💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于大数据的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!  

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人工智能和机器学习 3(复旦大学计算机科学与技术实践工作站)python机器学习、Pytorch库入门、d2l学习+<机器学习、神经网络————原理、理论>

前言 安装 — 动手学深度学习 2.0.0 documentation (d2l.ai)https://zh.d2l.ai/chapter_installation/index.html 安装 我们需要配置一个环境来运行 Python、Jupyter Notebook、相关库以及运行本书所需的代码,以快速入门并获得动手学习经验。 安装 Miniconda 最…

建造者模式 和 外观模式

这两种模式很像, 都是将一个复杂的流程统一用一个方法进行包装, 方便外界使用. 建造者模式更像是 外观模式的一种特里, 只对一个类的复杂初始化流程进行包装 建造者模式 简介: 就是一个类的构造方法可能很复杂, 由于系统的限制等原因, 可能很多初始化逻辑不能放在构造函数里,…

Redis大显身手:实时用户活跃排行榜

文章目录 场景说明方案设计数据结构 Redis使用方案排行榜实现更新用户活跃积分幂等策略榜单评分更新触发活跃度更新排行榜查询 技术派项目源码地址 : Gitee :技术派 - https://gitee.com/itwanger/paicodingGithub :技术派 - https://github.com/itwanger/paicoding 效果如图 …

在阿里云上部署 Docker并通过 Docker 安装 Dify

目录 一、在服务器上安装docker和docker compose 1.1 首先关闭防火墙 1.2 安装docker依赖包 1.3 设置阿里云镜像源并安装docker-ce社区版 1.4 开启docker服务并设置开机自启动 1.5 查看docker版本信息 1.6 设置镜像加速 1.7 将docker compose环境复制到系统的bin目录下…

DM8守护集群部署、数据同步验证、主备切换

1. 环境描述 实例详情 端口详情 2. 部署步骤 2.1 数据准备 2.1.1主库初始化 [dmdbaray1 ~]$ cd /dmdba/dmdbms/bin [dmdbaray1 bin]$ ./dminit path/dmdba/data PAGE_SIZE32 EXTENT_SIZE32 CASE_SENSITIVEy CHARSET1 DB_NAMEGRP1_RT_01 INSTANCE_NAMEGRP1_RT_01 PORT_NU…

C++——入门基础(上)

目录 一、C参考文档 二、C在工作领域的应用 三、C学习书籍 四、C的第一个程序 五、命名空间 (1)namespace的定义 (2)命名空间的使用 六、C的输入和输出 七、缺省函数 八、函数重载 九、写在最后 一、C参考文档 (1)虽…

第46课 Scratch入门篇:狙击望远镜

无限画中画 故事背景: 手拿一把狙击枪,第一次按下空格键的时候瞄准镜放大一倍,再按一次再放大一倍。开枪设计,瞬间击毁! 程序原理: 1、瞄准的物品放大,其实是角色的变化,我们把背景设置成角色,原始的角色是 480360,第一次放大的图为 14401080,放大了 3 倍。第二级…

【Java 并发编程】(二) 从对象内存布局开始聊 synchronized

对象的内存布局 首先抛出一个经典面试题: 一个 Object 对象占多大? 这里我用工具打印了出来, 发现是 “16bytes”, 也就是 16B; 为什么? 请继续往下看; 普通对象(除了数组), 由markword, 类型指针, 实例数据(就是对象里的成员), 对齐填充(整个对象大小要能被8B整数, 方便6…

思科OSPF动态路由配置8

#路由协议实现# #任务八OSPF动态路由配置8# 开放式最短路径优先(Open Shortest Path First,OSPF)协议是目前网络中应用最广泛的动态路由协议之一。它也属于内部网关路由协议,能够适应各种规模的网络环境,是典型的链路状态路由协…

ZooKeeper 集群的详细部署

ZooKeeper 集群部署 一、ZooKeeper 简介1.1 什么是 ZooKeeper1.2 ZooKeeper 特点 二 ZooKeeper 的架构和设计4.1 ZooKeeper 数据模型4.1.1 Znode 节点特性 三、ZooKeeper 的集群安装前准备工作3.1 需要的准备工作3.2 Linux 系统 3 个节点准备3.2.1 克隆3.2.2 配置另外两台服务器…

【RabbitMQ】 相关概念 + 工作模式

本文将介绍一些MQ中常见的概念,同时也会简单实现一下RabbitMQ的工作流程。 MQ概念 Message Queue消息队列。是用来存储消息的队列,多用于分布式系统之间的通信。 系统间调用通常有:同步通信和异步通信。MQ就是在异步通信的时候使用的。 同…

高考志愿智能推荐系统-计算机毕设Java|springboot实战项目

🍊作者:计算机毕设匠心工作室 🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长:按照需求定制化开发项目…

第三方软件测评中心分享:软件系统测试内容和作用

近年来,随着信息技术的迅猛发展,软件系统的应用范围不断扩大。保证软件质量的关键措施之一就是软件系统测试。软件系统测试是指在软件开发生命周期中,通过一系列特定的测试活动来验证和确认软件系统的性能、功能及安全性,确保软件…

优优嗨聚集团:餐饮合作新未来引领美食产业新风尚

在快速变化的21世纪,餐饮行业作为民生消费的重要组成部分,正经历着前所未有的变革与挑战。随着消费者需求的多元化、个性化以及科技的不断进步,餐饮合作的新模式正悄然兴起,为行业带来了前所未有的发展机遇与活力。本文将探讨餐饮…

【Redis】Redis 数据类型与结构—(二)

Redis 数据类型与结构 一、值的数据类型二、键值对数据结构三、集合数据操作效率 一、值的数据类型 Redis “快”取决于两方面,一方面,它是内存数据库,另一方面,则是高效的数据结构。 Redis 键值对中值的数据类型,也…

网页版IntelliJ IDEA部署

在服务器部署网页 IntelliJ IDEA 引言 大家好,我是小阳,今天要为大家带来一个黑科技——如何在云端部署和使用WEB版的IntelliJ IDEA,让你在任何地方都可以随心所欲地进行Java开发。这个方法特别适合那些用着老旧Windows电脑,部署…

MySQL集群+Keepalived实现高可用部署

Mysql高可用集群-双主双活-myqlkeeplived 一、特殊情况 常见案例:当生产环境中,当应用服务使用了mysql-1连接信息,在升级打包过程中或者有高频的数据持续写入【对数据一致性要求比较高的场景】,这种情况下,数据库连接…

Springboot 整合 Swagger3(springdoc-openapi)

使用springdoc-openapi这个库来生成swagger的api文档 官方Github仓库: https://github.com/springdoc/springdoc-openapi 官网地址:https://springdoc.org 目录题 1. 引入依赖2. 拦截器设置3. 访问接口页面3.1 添加配置项,使得访问路径变短…

贪吃蛇(C语言详解)

贪吃蛇游戏运行画面-CSDN直播 目录 贪吃蛇游戏运行画面-CSDN直播 1. 实验目标 2. Win32 API介绍 2.1 Win32 API 2.2 控制台程序(Console) 2.3 控制台屏幕上的坐标COORD 2.4 GetStdHandle 2.5 GetConsoleCursorlnfo 2.5.1 CONSOLE_CURSOR_INFO …

开源通用验证码识别OCR —— DdddOcr 源码赏析(一)

文章目录 [toc] 前言DdddOcr环境准备安装DdddOcr使用示例 源码分析实例化DdddOcr实例化过程 分类识别分类识别过程 未完待续 前言 DdddOcr 源码赏析 DdddOcr DdddOcr是开源的通用验证码识别OCR 官方传送门 环境准备 安装DdddOcr pip install ddddocr使用示例 示例图片如…