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

news2024/12/24 18:54:57

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

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

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

目录

一、引言

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.coloradmin.cn/o/2054937.html

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

相关文章

【C++ 第十三章】AVL 二叉平衡树

1. AVL树的概念 普通二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。 因此,两位俄罗斯的数学家 G.M.Adelson-Velskii 和 E.M.Landis 在1962年发明…

【故障处理】- ping不通的原因

PING不通是一个非常常见的网络问题,它可能由多种原因引起。如链路故障、ARP学习失败等 以一个Ping不通的尝试示例,介绍Ping不通故障的定位思路。如下图: PC3 Ping不通PC4 PC>ping 20.1.1.20Ping 20.1.1.20: 32 data bytes, Press Ctrl_C…

产品经理-​​实习中的自我迭代(41)

实习中的自我迭代,优秀实习生必备素质 跟大家认识了之后,就要开始做事情了,那我们怎么做一个优秀的实习生呢?以下几点作为参考。 1. 目标明确 知道自己的工作为什么要做,要做到什么程度,目前存在什么问题,该…

初探:c++异步编程之std::promise和std::future【异步数据获取】

c异步编程之std::promise和std::future 1.std::future获取std::asnyc结果2.模拟一个异步函数接口i.模拟一个客户端类包含异步请求接口ii.调用异步接口获取结果 c11以后标准库提供了thread,说起异步可能会第一时间想起thread,线程确实好东西,不…

2023年人均GDP百强市分布图

2023年人均GDP百强市分布图

redis安装,redis的数据类型和使用场景,Redis事务,Redis持久化,Redis淘汰策略

Redis简介 https://redis.io/docs/data-types/ Redis(Remote Dictionary Server )远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存也可持久化的日志型、Key-Value(NoSQL)数据库。 Redis的特点 性能极高,基于内存&…

ORACLE ADG 主库的归档日志不能主动传递到备库

主库有三个节点 ,其中两个节点传递没有问题,唯独节点二的归档日志不能主动传递到备库,都是在备库恢复需要的时候一个个传递到备库。下面是备库的日志。 Media Recovery Waiting for thread 2 sequence 1204582 …

SAP和致远OA系统集成案例

一、项目介绍 重庆某控股(集团)有限公司是一家集合汽柴油动力及终端、摩托车、储能电源、汽车零部件、金融服务等产业的多元化集团公司,业务遍布全球80多个国家及地区,2021年营业收入达80亿元。 为推动集团信息化、数字化转型…

基于WonderJourney生成电影级连续的3D场景视频

在本文中,我将详细记录在Windows环境下配置和使用WonderJourney项目的完整流程,包括环境搭建、常见问题的解决方案以及如何修改源码以兼容Windows系统。WonderJourney项目能够生成高度逼真的村庄视频,并允许用户通过配置文件对视频生成过程进行精细化控制。 由于官方文档在…

选型指南:CNAPP能力成熟度评估Checklist

随着云计算服务大量使用,网络攻击面的不断扩大,那些过去为传统数据中心而设计的安全工具和运营流程将很难应对云端的安全威胁。相比过去,安全团队现在面临超过10到100倍的容器化保护需求,大量的动态云资产需要追踪,同时…

MySQL 在 Windows 和 Ubuntu 上的安装与远程连接配置简介

MySQL 是一个广泛使用的开源关系型数据库管理系统,它提供了多用户、多线程的数据库服务。本文将介绍如何在 Windows 和 Ubuntu 操作系统上安装 MySQL,并配置远程连接。 Windows 上的 MySQL 安装 1. 下载 MySQL Installer 访问 MySQL 官方网站下载 Win…

c++--类(上)

C之类(上) 一、类的定义1.1 类定义格式1.2 访问限定符1.3 类域 二、实例化2.1 实例化的概念2.2 对象大小 三、this指针 一、类的定义 1.1 类定义格式 1、class为定义类的关键字,{}中为类的主体,注意类定义结束时后⾯分号不能省略…

Ollama - Llama3 docker版本安装部署使用

项目地址:https://github.com/meta-llama/llama3 Meta 发布两款开源Llama 3 8B与Llama 3 70B模型,供外部开发者免费使用。Llama 3的这两个版本,也将很快登陆主要的云供应商。 按照Meta的说法,Llama 3 8B和Llama 3 70B是目前同体量…

threejs中实现物体阴影

在Three.js中实现阴影需要几个步骤,包括设置渲染器、光源以及物体的材质等。以下是一个基本的实现阴影的步骤: 1、设置渲染器以支持阴影: const renderer new THREE.WebGLRenderer(); renderer.setSize(window.innerWidth, window.innerH…

三大运营管理平台:打造智能化新能源数据管理的核心利器

随着全球能源结构的转型和新能源技术的快速发展,智能化新能源数据管理成为行业发展的关键。三大运营管理平台的出现,正是为了解决这一需求,它们通过整合先进的信息技术和智能算法,为新能源企业提供了全面、高效、精准的数据管理解…

告别帕金森手抖,这些维生素是你的秘密武器!

亲们,你们有没有遇到过这样的情况?家里的长辈或是自己,偶尔会出现手不自觉颤抖的现象,特别是被诊断为帕金森病的朋友,更是深受其扰。😔 别担心,今天就来聊聊如何通过科学补充一些关键维生素&…

函数:02

1.三角函数 名称表达式正弦sinx b r \frac{b}{r} rb​余弦cosx a r \frac{a}{r} ra​正切tanx b a \frac{b}{a} ab​余切cotx a b \frac{a}{b} ba​正割secx r a \frac{r}{a} ar​余割cotx r b \frac{r}{b} br​ 1.1用正弦,余弦函数表示正/余切,正/余割…

Web大学生网页作业成品——保护环境环保介绍网页设计与实现(HTML+CSS)(1个页面)

🎉🎉🎉 常见网页设计作业题材有**汽车、环保、明星、文化、国家、抗疫、景点、人物、体育、植物、公益、图书、节日、游戏、商城、旅游、家乡、学校、电影、动漫、非遗、动物、个人、企业、美食、婚纱、其他**等网页设计题目, 可满足大学生网…

20221元组

在Python语言中, (7)是一种可变的、有序的序列结构,其中元素可以重复。 A.元组(tuple) B. 字符串(str) C. 列表(list) D.集合(set) ChatGPT 说: ChatGPT 在Python中,选项 C 列表(list) 符合题目描述。 解释: 列表 (list) 是一种可变的、有…

OOP篇(Java - 思维逻辑练习)(doing)

目录 一、继承 1. 简介 2. 表现形式 2.1. 电脑的表现形式 2.2. 程序的表现形式 资料库 课程 课程放入到资料库 视频资源 资源库 存在问题 如何解决问题 3. 继承 定义父类 课程类继承 视频类继承item 资源库类2 整个的继承关系 4. 通过继承得到了什么&#x…