【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 阶段读取中间结果,对其进行聚合处理,并将最终结果写入输出文件。

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

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

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

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

相关文章

如何做萤石开放平台的物联网卡定向?

除了用萤石自带的4G卡外,我们也可以自己去电信、移动和联通办物联网卡连接萤石云平台。 1、说在前面 注意:以下流程必须全部走完,卡放在设备上才能连接到萤石云平台。 2、大致流程 登录官网→下载协议→盖章(包括骑缝章&#…

多平台编译libexif

下载地址:https://github.com/libexif/libexif/releases 1. ubuntu x64 (银河麒麟系统aarch64步骤相同) # 解压 > tar -jxvf libexif-0.6.24.tar.bz2 > cd libexif-0.6.24 # 配置 > ./configure # 编译 > make # 安装 > mak…

【C++】String类:标准库介绍

目录 一.预备知识 1.auto关键字 2.范围for 3.迭代器 二.标准库里的string 1.string类的基本介绍 2.构造函数 ​编辑 3.访问及遍历操作 3.1 operator [] 3.2 基于范围for 3.3 使用迭代器 4.迭代器 5.容量操作 5.1 size和length 5.2 capacity 5.3 reserve和resiz…

备考2024年美国数学竞赛AMC10:吃透1250道真题和知识点(持续)

有什么含金量比较高的初中生数学竞赛吗?美国数学竞赛AMC10是个不错的选择。那么,如何备考AMC10美国数学竞赛呢?做真题,吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一。 通过做真题,可以帮助孩子找到真实竞赛…

Python使用Selenium进行Web自动化测试详解

目录 引言 一、Selenium简介 Selenium的核心组件 二、环境搭建 1. 安装Python 2. 安装Selenium库 3. 下载并配置浏览器驱动 三、基础用法 1. 启动浏览器 2. 定位页面元素 3. 元素操作 4. 等待元素加载 1. 测试目的 2. 测试步骤与代码实现 3. 注意事项 结论 引言…

ViT笔记学习

1.VIT ViT原理讲解 ViT结合代码 1.3 ViT模型架构 我们先结合下面的动图来粗略地分析一下ViT的工作流程,如下: 将一张图片分成patches将patches铺平将铺平后的patches的线性映射到更低维的空间添加位置embedding编码信息将图像序列数据送入标准Transfor…

labview经验分享1-任意16进制字符类型匹配

系列文章目录 1、任意16进制字符类型匹配 文章目录 系列文章目录问题导入实现任意16进制字符类型匹配在这里插入图片描述 总结 问题导入 labveiw的字符串匹配,使用的是正则表达式,可以让我们很方便的对字符串进行字符处理操作。 但是某些情况下&#…

【python】Python实现XGBoost算法的详细理论讲解与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

encoding with ‘idna‘ codec failed (UnicodeError: label empty or too long)

今天在使用Flask连接mysql的时候,遇到了一个报错:encoding with ‘idna’ codec failed (UnicodeError: label empty or too long) 网上查了一下说是字符集的问题,然后尝试修改了一下字符集,结果还是不行。 最后去翻阅SQLAlchemy…

使用docker-compose运行kafka及验证(无需zookpeer)

前言:要求安装docker-compose kafka镜像版本:apache/kafka:3.8.0 可能存在镜像拉不下来的情况: 1、vim /etc/docker/daemon.json {"data-root":"/data/docker","registry-mirrors": ["https://docker.m…

力扣第 411 场周赛题解

3258. 统计满足 K 约束的子字符串数量 I 给你一个 二进制 字符串 s 和一个整数 k。 如果一个 二进制字符串 满足以下任一条件,则认为该字符串满足 k 约束: 字符串中 0 的数量最多为 k。字符串中 1 的数量最多为 k。 返回一个整数,表示 s …

【数据结构-哈希前缀】力扣2845. 统计趣味子数组的数目

给你一个下标从 0 开始的整数数组 nums ,以及整数 modulo 和整数 k 。 请你找出并统计数组中 趣味子数组 的数目。 如果 子数组 nums[l…r] 满足下述条件,则称其为 趣味子数组 : 在范围 [l, r] 内,设 cnt 为满足 nums[i] % mod…

JVM -垃圾回收器

本人在这篇文章中讲解了垃圾回收机制,这为前置知识 美团一面面经:Threadlocal(线程局部变量的原理)->内存泄漏问题->垃圾回收机制_threadlocal回收-CSDN博客 首先对前置知识漏洞做一个补充:ja…

open Euler22.03系统安装宝塔面板

环境:华为云open Euler22.03操作系统 配置:2核4G 1、安装宝塔面板。 登录弹性云服务器。 执行以下命令,下载并安装宝塔面板。 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh &&…

STM32裸机和RTOS中的线程安全问题及STM32cubeMX中的线程安全策略

STM32线程安全问题 术语“线程” 和“多线程” 适用于裸机和基于RTOS的应用程序,线程安全问题并不只存在于基于RTOS的应用程序中;裸机应用程序中也存在这个问题,在裸机应用程序中,中断服务程序允许调用C库函数。线程安全问题可能…

Python实现水果忍者(开源)

一、整体介绍: 1.1 前言: 游戏代码基于Python制作经典游戏案例-水果忍者做出一些改动,优化并增加了一些功能。作为自己Python阶段学习的结束作品,文章最后有源码链接。 1.2 Python主要知识: (1&#xf…

Python爬虫——爬取某网站的视频

爬取视频 本次爬取,还是运用的是requests方法 首先进入此网站中,选取你想要爬取的视频,进入视频播放页面,按F12,将网络中的名称栏向上拉找到第一个并点击,可以在标头中,找到后续我们想要的一些…

qt-15综合实例(电子时钟)-多态重写鼠标单击和移动事件

综合实例-电子时钟 知识点digiclock.hdigiclock.cppmain.cpp运行图 知识点 setWindowOpacity(0.5);//设置窗体透明度 QTimer* Timer new QTimer(this);//新建一个定时器 connect(Timer,SIGNAL(timeout()),this,SLOT(ShowTime())); Timer->start(1000);//启动定时器 digic…

稚晖君发布5款全能人形机器人,开源创新,全能应用

8月18日,智元机器人举行“智元远征 商用启航” 2024年度新品发布会,智元联合创始人彭志辉主持并发布了“远征”与“灵犀”两大系列共五款商用人形机器人新品——远征A2、远征A2-W、远征A2-Max、灵犀X1及灵犀X1-W,并展示了在机器人动力、感知、…

猫头虎分享:练习提示词Prompt有什么好方法?提高Prompt水平和质量

猫头虎是谁? 大家好,我是 猫头虎,别名猫头虎博主,擅长的技术领域包括云原生、前端、后端、运维和AI。我的博客主要分享技术教程、bug解决思路、开发工具教程、前沿科技资讯、产品评测图文、产品使用体验图文、产品优点推广文稿、…