一、Hadoop的整体架构

Hadoop是一个专为大数据设计的架构解决方案,历经多年开发演进,已逐渐发展成为一个庞大且复杂的系统。其内部工作机制融合了分布式理论与具体工程开发的精髓,构成了一个整体架构。

Hadoop最朴素的原理在于,它利用大量的普通计算机来处理大规模数据的存储和分析任务,而非依赖于单一的超级计算机。这一设计理念不仅降低了硬件成本,还通过分布式处理提高了系统的可扩展性和容错性。

Hadoop作为大数据处理领域的基石性架构,其设计理念体现了"分而治之"的分布式计算哲学。经过十余年的技术演进,Hadoop已从最初的单一计算框架发展为包含存储、资源管理、计算引擎等完整组件的生态系统,其架构复杂度反映了分布式系统理论与工程实践的深度融合。

Hadoop 系统的一个架构图,现在已经有了非常多的组件,但最核心的两部分依然是底层的文件系统 HDFS和用于计算的 MapReduce。来看下 Hadoop 系统中的一些重要组成部分。

在这里插入图片描述

二、HDFS(分布式文件系统)

HDFS 主要有 NameNode、DataNode、Secondary NameNode 三大组件:

  • NameNode

    • 管理文件系统的命名空间
    • 协调客户端对文件的访问
    • 存储文件系统的元数据
  • Secondary NameNode

    • 定期合并NameNode的编辑日志和镜像文件,减少NameNode启动时间
    • 提供NameNode的备份,但不用于故障切换
  • DataNode

    • 存储实际的数据块
    • 执行数据的读写操作
    • 定期向NameNode报告其存储的数据块信息

在这里插入图片描述

Primary Namenode 与 Secondary Namenode

在这里插入图片描述

三、MapReduce(分布式计算框架)

MapReduce 核心思想:分而治之的并行计算

3.1 拆分(Split)→ 并行计算(Map)‌

  • 输入数据被自动切割为 ‌分片(Split)‌(默认与 HDFS Block 对齐) → 分发到集群节点‌。
  • ‌Map 阶段‌:每个节点对本地数据执行相同的用户自定义函数,输出中间键值对 (key, value)。

👉 实质:将大规模问题分解为独立子问题

3.2 聚合(Shuffle)→ 归约(Reduce)

  • ‌Shuffle 阶段‌:框架按 key 将中间结果跨节点分组、排序、传输(核心瓶颈)‌。
  • ‌Reduce 阶段‌:相同 key 的数据发送到同一节点,执行归约逻辑(如求和、去重)。

👉 实质:合并子问题的结果生成全局解

MapReduce Split
在这里插入图片描述
MapReduce Shuffle
在这里插入图片描述

四、Yarn(资源调度与管理框架)

老周在之前讲解Flink架构的时候讲过YARN集群架构,我这里直接拿我之前Yarn的架构图。YARN集群总体上是经典的主/从(Master/Slave)架构,主要由ResourceManager、NodeManager、ApplicationMaster和Container等几个组件构成。

在这里插入图片描述

4.1 ResourceManager

以后台进程的形式运行,负责对集群资源进行统一管理和任务调度。ResourceManager的主要职责如下:

  • 接收来自客户端的请求。
  • 启动和管理各个应用程序的ApplicationMaster。
  • 接收来自ApplicationMaster的资源申请,并为其分配Container。
  • 管理NodeManager,接收来自NodeManager的资源和节点健康情况汇报。

4.2 NodeManager

集群中每个节点上的资源和任务管理器,以后台进程的形式运行。它会定时向ResourceManager汇报本节点上的资源(内存、CPU)使用情况和各个Container的运行状态,同时会接收并处理来自ApplicationMaster的Container启动/停止等请求。NodeManager不会监视任务,它仅监视Container中的资源使用情况,例如。如果一个Container消耗的内存比最初分配的更多,就会结束该Container。

4.3 Task

应用程序具体执行的任务。一个应用程序可能有多个任务,例如一个MapReduce程序可以有多个Map任务和多个Reduce任务。

4.4 Container

YARN中资源分配的基本单位,封装了CPU和内存资源的一个容器,相当于一个Task运行环境的抽象。从实现上看,Container是一个Java抽象类,定义了资源信息。应用程序的Task将会被发布到Container中运行,从而限定了Task使用的资源量。

一个应用程序所需的Container分为两类:运行ApplicationMaster的Container和运行各类Task的Container。前者是由ResourceManager向内部的资源调度器申请和启动的,后者是由ApplicationMaster向ResourceManager申请的,并由ApplicationMaster请求NodeManager进行启动。

我们可以将Container类比成数据库连接池中的连接,需要的时候进行申请,使用完毕后进行释放,而不需要每次独自创建。

4.5 ApplicationMaster

ApplicationMaster可在Container内运行任何类型的Task。例如,MapReduce ApplicationMaster请求一个容器来启动Map Task或Reduce Task。也可以实现一个自定义的ApplicationMaster来运行特定的Task,以便任何分布式框架都可以受YARN支持,只要实现了相应的ApplicationMaster即可。

我们可以这样认为:ResourceManager管理整个集群,NodeManager管理集群中的单个节点,ApplicationMaster管理单个应用程序(集群中可能同时有多个应用程序在运行,每个应用程序都有各自的ApplicationMaster)。

YARN集群中应用程序的执行流程如下图所示:

  • 客户端提交应用程序(可以是MapReduce程序、Spark程序等)到ResourceManager。
  • ResourceManager分配用于运行ApplicationMaster的Container,然后与NodeManager通信,要求它在该Container中启动ApplicationMaster。ApplicationMaster启动后,它将负责此应用程序的整个生命周期。
  • ApplicationMaster向ResourceManager注册(注册后可以通过ResourceManager查看应用程序的运行状态)并请求运行应用程序各个Task所需的Container(资源请求是对一些Container的请求)。如果符合条件,ResourceManager会分配给ApplicationMaster所需的Container(表达为Container ID和主机名)。
  • ApplicationMaster请求NodeManager使用这些Container来运行应用程序的相应Task(即将Task发布到指定的Container中运行)。

此外,各个运行中的Task会通过RPC协议向ApplicationMaster汇报自己的状态和进度,这样一旦某个Task运行失败,ApplicationMaster就可以对其重新启动。当应用程序运行完成时,ApplicationMaster会向ResourceManager申请注销自己。

在这里插入图片描述

五、Hadoop HA

在这里插入图片描述

在这里插入图片描述
问题1:两个NameNode主节点,谁是Active,谁是Standby?

利用Zookeeper进行选举

问题2:怎么实现的?

  • 每一个NameNode都有一个ZKFC:Zookeeper Failover Contorller
  • 功能
    • 负责帮助NameNode向Zookeeper进行注册选举,并且监听active的NameNode
    • 负责监控NameNode的状态

问题3:如果有两个NameNode,客户端如何知道谁是active?

  • 客户端只能请求active状态的NameNode
  • 一旦配置了HA,将两个NameNode构建成一个整体
  • 客户端不用再请求单个NameNode,请求这个整体,这个整体负责从zookeeper中找到谁是active转发这个请求

问题4:如果有两个NameNode,所有的DataNode向哪个NameNode进行注册呢?

两个NameNode 都注册,只有active的能管理。

问题5:一个是active,一个standby,如果active宕机,standby接替active,如何保证standby的元数据与active是一致的?

  • journalnode日志节点
  • active状态的 NN,会将自己元数据的变化日志edits文件写入journalnode集群
  • standby状态的NN,会从journalnode集群中将变化读取出来,对自己操作,保证自己的元数据与active的元数据是一致的

六、HDFS Architecture

6.1 NameNode and DataNodes
在这里插入图片描述
6.2 Data Replication

在这里插入图片描述

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

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

相关文章

OneCode3.0 VFS分布式文件管理API速查手册

📚 前言:OneCode 3.0微内核引擎架构解析 在云原生与分布式系统日益普及的今天,文件管理系统面临着前所未有的挑战——海量数据存储、跨节点协同、多租户隔离以及弹性扩展等需求推动着传统文件系统向分布式架构演进。OneCode 3.0作为新一代企业…

UI前端与数字孪生结合实践探索:智慧物流的仓储自动化管理系统

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩!一、引言:传统仓储的 “效率黑洞” 与数字孪生的破局当仓库管理员在数万平的库房中…

使用layui的前端框架过程中,无法加载css和js怎么办?

这使用layui的前端框架过程中&#xff0c;无法加载css和js怎么办&#xff1f;里写自定义目录标题已经按要求下载并解压到指定位置了&#xff0c;但是感觉就是无法加载文件后台提示如下&#xff1a;那就我清理缓存当再次观察html页面时&#xff0c;发现页面最开始有两个< htm…

gitlab+TortoiseGit克隆生成ppk方式

1、第一步 2、第二步3、第三步4、第四步&#xff0c;如何使用这个ppk就可以了

VSCode中使用容器及容器编排docker-compose

前面笔者写了一篇博文&#xff1a;使用容器编排对go项目进行部署、调试&#xff0c;介绍了在Goland中如何使用容器&#xff0c;由于Goland的容器配置是可视化的&#xff0c;使用起来非常方便&#xff0c;VSCode中也有一个容器插件&#xff0c;但是笔者一直未使用过&#xff0c;…

深度学习入门:让神经网络变得“深不可测“⚡(二)

深度学习入门&#xff1a;让神经网络变得"深不可测" &#x1f9e0;⚡ 系列课程第二弹&#xff1a;深度学习的奇妙世界 前言&#xff1a;从浅到深的华丽转身 哈喽&#xff0c;各位AI探险家&#xff01;&#x1f44b; 欢迎回到我们的"让机器变聪明"系列课…

硅基计划2.0 学习总结 捌 异常与常用工具类

文章目录一、异常1. 防御性编程2. throw关键字3. throws关键字4. 捕获5. finally关键字二、自定义异常类三、常用工具类1. Date以及相关的类1. 创建时间&#xff08;基本弃用&#xff09;2. 捕获系统时间3. 获取当前年月日时分秒4. 日期加减5. 根据字符串创建日期6. 根据当前时…

2025-7-14-C++ 学习 排序(2)

文章目录2025-7-14-C 学习 排序&#xff08;2&#xff09;P1059 [NOIP 2006 普及组] 明明的随机数题目描述输入格式输出格式输入输出样例 #1输入 #1输出 #1说明/提示提交代码P1093 [NOIP 2007 普及组] 奖学金题目背景题目描述输入格式输出格式输入输出样例 #1输入 #1输出 #1输入…

微信131~140

1.在组件中使用store对象的数据 // 要想使用store中的数据以及方法 // 需要从 mobx-miniprogram-bindings 方法将 ComponentWithStore 方法 import { ComponentWithStore } from mobx-miniprogram-bindings // 导入store对象 import { numStore } from ../../../stores/numstor…

微美全息借区块链与DRL算法打造资源管理协同架构,达成边缘计算与区块链动态适配

在当今数字化浪潮汹涌的时代&#xff0c;边缘计算与区块链技术正逐步成为驱动技术革新与业务转型升级的核心动力。当这两项前沿技术相互融合&#xff0c;一个兼具高效性与安全性的任务处理系统便得以构建。为了充分挖掘边缘计算系统的性能潜力&#xff0c;避免任务卸载过程中的…

属性绑定

简写模式二.为什么要这样做布尔型attribute动态绑定多个值

链表算法之【获取链表开始入环的节点】

目录 LeetCode-142题 LeetCode-142题 给定一个链表的头节点head&#xff0c;返回链表开始入环的第一个节点&#xff0c;如果链表无环&#xff0c;则返回null class Solution {public ListNode detectCycle(ListNode head) {// checkif (head null || head.next null)retur…

【网络编程】KCP——可靠的 UDP 传输协议——的知识汇总

文章目录前言UDP 协议UDP 的关键指标/特性UDP 的典型应用场景KCP 协议的基础KCP 的构造KCP 协议特性KCP 的可靠传输机制——ARQ三种 ARQ 机制对比KCP 的选择性重传一、基础机制&#xff1a;选择性重传&#xff08;SR&#xff09;二、KCP 对 SR 的增强策略KCP 的激进重传策略——…

量子计算新突破!阿里“太章3.0”实现512量子比特模拟(2025中国量子算力巅峰)

​​摘要​​2025年量子计算竞争进入​​实用化临界点​​&#xff0c;阿里达摩院发布“太章3.0”量子模拟器&#xff0c;在全球首次实现​​512量子比特全振幅模拟​​&#xff0c;较谷歌Sycamore的53比特提升近10倍算力维度。本文深度解析三大技术突破&#xff1a;​​张量网…

DOM事件绑定时机:解决脚本提前加载导致的绑定失败

引言&#xff1a;一个让无数新手抓狂的常见错误在JavaScript开发中&#xff0c;尤其是在前端领域&#xff0c;有一个让无数新手抓狂的问题&#xff1a;明明写了事件监听代码&#xff0c;点击按钮却没有任何反应&#xff01;更令人困惑的是&#xff0c;代码逻辑看起来完全正确&a…

游戏框架笔记

游戏的数据有哪些类型无非是只读数据&#xff08;各种道具配表里的数据&#xff09;和可读可写数据&#xff08;玩家属性、拥有的物品&#xff09;。游戏框架需要哪些管理器用户数据管理器负责找到数据持久化文件&#xff0c;从中读取指定用户的数据&#xff0c;包括玩家的设置…

【C语言进阶】指针面试题详解(2)

上一期内容&#xff0c;大多数的解题思路写在代码中&#xff0c;没有写在正文中&#xff0c;这就导致系统判断文章质量不高&#xff0c;没有什么数据&#xff0c;这一期将思路写在正文中。注意&#xff1a;运行环境是x86 1.题目1思路&#xff1a;&a是取到了整个数组的地址&…

一文读懂现代卷积神经网络—稠密连接网络(DenseNet)

目录 什么是 DenseNet&#xff1f; 稠密块&#xff08;Dense Block&#xff09;详解 一、稠密块的核心思想 二、稠密块的结构组成 1. 卷积单元&#xff08;的结构&#xff09; 2. 密集连接的具体方式 3. 关键参数&#xff1a;增长率&#xff08;Growth Rate, k&#xff0…

关于僵尸进程

深入理解僵尸进程&#xff1a;成因、危害与解决方案 进程终止的条件 我们先了解一下进程销毁的条件&#xff1a; 调用了exit函数在main函数中执行了return语句 无论采用哪种方式&#xff0c;都会有一个返回值&#xff0c;这个返回值由操作系统传递给该进程的父进程。操作系统不…

深入解析进程、线程与协程:现代并发编程的三大支柱

深入解析进程、线程与协程&#xff1a;现代并发编程的三大支柱在计算资源日益丰富的时代&#xff0c;理解并发执行机制已成为每位开发者的必修课。本文将带你深入探索操作系统中的三大并发模型&#xff1a;进程、线程与协程&#xff0c;揭开它们的神秘面纱。引言&#xff1a;并…