HDFS架构刨析

HDFS架构刨析

  • 概述
  • HDFS架构图
  • 整体概述
    • 主角色:namenode
      • fsimage内存元数据镜像文件
      • edits log(Journal)编辑日志
    • 从角色:datanode
    • 主角色辅助角色:secondarynamenode
  • 重要特性
    • 主从架构
    • 分块存储机制
    • 副本机制
    • namespace
    • 元数据管理
    • 数据块存储

概述

  • HDFS是Hadoop distribute file system的简称,意味:Hadoop分布式文件系统
  • HDFS是Hadoop核心组件之一,作为大数据生态圈最底层的分布式存储服务而存在
  • HDFS解决的问题就是大数据如何存储,它是横跨在多台计算机上的文件存储系统并且具有高度的容错能力
    在这里插入图片描述

HDFS架构图

  • HDFS集群遵循主从架构(master/slave)。通常包括一个主节点和多个从节点
  • 在内部,文件分块存储,每个块根据复制因子存储在不同的从节点计算机上形成备份
  • 主节点存储和管理文件系统namespace,即有关文件块的信息,例如块位置,权限等;从节点存储文件的数据块
  • 主从各司其职,相互配合,共同对外提供文件分布式存储服务。当然内部细节对用户来说是透明的
    在这里插入图片描述

整体概述

  • HDFS遵循主从架构
  • namenode是主节点,负责存储和管理文件系统元数据信息,包括namespace目录结构,文件块位置信息等
  • datanode是从节点,负责存储文件具体的数据块
  • 两种角色各司其职,共同协调完成分布式的文件存储服务
  • secondarynamenode是主角色的辅助角色,帮助主角色进行元数据的合并
    在这里插入图片描述

主角色:namenode

  • namenode是Hadoop分布式系统的核心,架构中的主角色
  • namenode维护和管理文件系统元数据,包括名称空间目录树结构,文件和块的位置信息,访问权限等信息
  • 基于此,namenode成为访问HDFS的唯一入口
  • namenode内部通过内存和磁盘文件两种方式管理元数据
  • 其中磁盘上的元数据文件包括simage内存元数据镜像文件和edits log(Journal)编辑日志
  • 在Hadoop2之前,namenode是单点故障。Hadoop2中引入高可用性。Hadoop集群体系结构允许在集群中以热备配置运行两个或多个namenode
    在这里插入图片描述

fsimage内存元数据镜像文件

fsimage 是 Hadoop 分布式文件系统(HDFS)的内存元数据镜像文件。它包含了关于文件系统命名空间、文件块信息、权限和属性等元数据的详细记录。

fsimage 文件是 HDFS 中重要的元数据文件,用于恢复文件系统的状态和内容。当 HDFS 启动时,它会读取 fsimage 文件并将其中的元数据加载到内存中,以便提供文件系统的元数据服务。当文件系统发生变化时(如创建、删除或修改文件),HDFS 会将这些变化记录在编辑日志(edits log)中,然后可以根据编辑日志和当前的 fsimage 文件来恢复文件系统的状态。

由于 fsimage 文件是完整的元数据镜像,它可以在文件系统启动时快速加载到内存,从而加快了文件系统的启动速度。此外,fsimage 文件还可以进行压缩来减小文件大小,并且可以定期生成检查点,以保证文件系统的一致性和可靠性。

需要注意的是,fsimage 文件只包含元数据信息,不包含实际的文件数据。实际的文件数据存储在 HDFS 的数据块中,而不是 fsimage 文件中。

总结起来,fsimage 文件是 HDFS 中的内存元数据镜像文件,用于恢复文件系统的状态和内容。通过读取 fsimage 文件和编辑日志,HDFS 可以在启动时加载元数据并提供文件系统的服务。

edits log(Journal)编辑日志

edits log(也称为编辑日志)是 Hadoop 分布式文件系统(HDFS)中的一种日志文件,用于记录对文件系统的变更操作。

在 HDFS 中,当发生文件系统的变更操作时,例如创建、删除、重命名文件或目录,以及修改文件的权限或属性,这些变更将会被记录在 edits log 中。edits log 记录了文件系统的逻辑操作,而不是实际的数据块内容。

edits log 具有持久性和顺序性的特点。它是一个追加写日志文件,新的变更操作将会被追加到日志文件的末尾。这种顺序写入的方式使得 HDFS 可以快速写入变更操作,同时保证了操作的顺序性。

通过记录变更操作在 edits log 中,HDFS 可以保证数据的一致性和可恢复性。当文件系统启动时,HDFS 会加载 fsimage 文件和最后一个 edits log 文件,并根据其中的操作重放文件系统的变更过程,从而恢复文件系统的状态。这个过程被称为“日志回放”(log replay)。

在运行过程中,HDFS 会定期将 edits log 合并成较大的文件,并创建一个新的空的 edits log 文件,以减少日志文件的数量和提高效率。

总结起来,edits log 是 HDFS 中的一种日志文件,用于记录对文件系统的变更操作。它具有持久性和顺序性特点,通过日志回放,HDFS 可以恢复文件系统的状态并保证数据的一致性和可恢复性。

从角色:datanode

  • datanode是Hadoop HDFS中的从角色,负责具体的数据块存储
  • datanode的数量决定了HDFS集群的整体数据存储能力,通过和namenode配合维护着数据块
    在这里插入图片描述

主角色辅助角色:secondarynamenode

  • 除了datanode和namenode之外,还有lingerie守护进程,它称为secondarynamenode。充当namenode的辅助节点,但不能替代namenode
  • 当namenode启动时,namenode合并Fsimage和edits log文件以还原当前文件系统名称空间。如果edits log过大不利于加载,secondarynamonode就辅助namenode从namenode下载Fsimage文件和edits log文件进行合并
    在这里插入图片描述

重要特性

主从架构

  • HDFS采用master/slave架构。一般一个HDFS集群是有一个namenode和一定数目的datanode组成
  • namonode是HDFS主角点,datanode是HDFS从节点,两种角色各司其职,共同协调完成分布式的文件存储服务
    在这里插入图片描述

分块存储机制

  • HDFS中的文件在物理上是分块存储(block)的,快的大小可以通过配置参数来规定,参数位于hdfs-default.xml中:dfs:blocksize,默认大小是128m
    在这里插入图片描述

副本机制

  • 文件的所有block都会有副本。每个文件的block大小(dfs.blocksize)和副本系数(dfs.replication)都是可配置的。副本系数可以在文件创建的时候指定,也可以在之后通过命令改变
  • 默认dfs.replication的值是3,也就是会额外再复制2份,连同本身共3份副本

在这里插入图片描述

namespace

  • HDFS支持传统的层次型文件组织结构。用户可以创建目录然后将文件保存在这些目录里。文件系统名字空间的层次结构和大多数现有的文件系统类似:用户可以创建,删除,移动或重命名文件
  • namenode负责维护文件系统的namespace名称空间,任何对文件系统名称空间或属性的修改都将被namenode记录下来
  • HDFS会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件,例如:hdfs://namenode:port/dir-a/dir-b/dir-c/file-data

在这里插入图片描述

元数据管理

在HDFS中,namenode管理的元数据具有两种类型

  • 文件自身属性
    • 文件名称,权限,修改时间,文件大小,复制因子,数据块大小
  • 文件块位置映射信息
    • 记录文件块和datanode之间的映射信息,即哪个块位于哪个节点上

在这里插入图片描述
在这里插入图片描述

数据块存储

  • 文件的各个block的具体存储管理由datanode节点承担。每一个block都可以在多个datanode上存储
    在这里插入图片描述

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

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

相关文章

快速搭建MQTT测试环境,手把手详细教程

文章目录 前言系统架构准备工具代理服务器客户端客户端 TEST-1客户端 TEST-2 验证消息传递订阅主题发布主题 前言 大家好,我是麦叔,之前有小伙伴建议出一期如何快速搭建一个MQTT协议的测试环境,这里要合理地使用现有的工具,其实很…

ubuntu18.04安装docker及docker基本命令的使用

官网安装步骤:https://docs.docker.com/desktop/install/ubuntu/ docker快速入门教程 Ubuntu-Docker安装和使用 docker官网 docker-hub仓库 1、常用指令 (1)镜像操作 # ############################# 以nginx为例 docker images docker p…

五分钟帮您理解Linux网络核心知识点——socket和epoll

关于linux网络相关的基础知识点,最热的两个就是socket和epoll,接下来我就用最简单的方式把他俩说清楚便于大家理解! Socket Socket 是一种进程间通信的方法,它允许位于同一主机(计算机)或使用网络连接起来…

Android SystemServer中Service的创建和启动方式(基于Android13)

Android SystemServer创建和启动方式(基于Android13) SystemServer 简介 Android System Server是Android框架的核心组件,运行在system_server进程中,拥有system权限。它在Android系统中扮演重要角色,提供服务管理和通信。 system …

右键文件夹 ------- 打开 vscode的方法

1、右键vscode点击属性 2、这是地址栏,一会复制即可 3、新建一个txt文件,将这个复制进去 Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\*\shell\VSCode] "Open with Code" "Icon""D:\\Microsoft VS Code\\Code.exe"[HKE…

人到中年不得已,保温杯里泡枸杞--送程序员

目录 一:你现在身体的体能状况如何?你有身体焦虑吗? 二:如何保持规律性运动? 三:你有哪些健康生活的好习惯? 大厂裁员,称35岁以后体能下滑,无法继续高效率地完成工作&…

【数据结构OJ题】删除有序数组中的重复项

原题链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-array/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 用双指针算法,定义两个变量src和dst,一开始让src和dst指向num[ ]数组的第一个元素&a…

Java注解详细介绍

Java注解详细介绍 基于注解(Annotation-based)的Java开发无疑是最新的开发趋势.[译者注: 这是05年的文章,在2014年,毫无疑问,多人合作的开发,使用注解变成很好的合作方式,相互之间的影响和耦合可以很低]. 基于注解的开发将Java开发人员从繁琐笨重的配置文件中解脱出来. Java 5…

hacksudo3 通关详解

环境配置 一开始桥接错网卡了 搞了半天 改回来就行了 信息收集 漏洞发现 扫个目录 大概看了一眼没什么有用的信息 然后对着login.php跑了一下弱口令 sqlmap 都没跑出来 那么利用点应该不在这 考虑到之前有过dirsearch字典太小扫不到东西的经历 换个gobuster扫一下 先看看g…

自然语言处理:长文本场景下的关键词抽取实践

NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法等 专栏详细介绍:NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型…

HBase-读流程

创建连接同写流程。 (1)读取本地缓存中的Meta表信息;(第一次启动客户端为空) (2)向ZK发起读取Meta表所在位置的请求; (3)ZK正常返回Meta表所在位置&#x…

SpringBoot使用@Autowired将实现类注入到List或者Map集合中

前言 最近看到RuoYi-Vue-Plus翻译功能 Translation的翻译模块配置类TranslationConfig,其中有一个注入TranslationInterface翻译接口实现类的写法让我感到很新颖,但这种写法在Spring 3.0版本以后就已经支持注入List和Map,平时都没有注意到这…

自制免费 SQL 闯关自学网,代码开源!

大家好,我是鱼皮。 相信很多学编程的同学都学习过 SQL 吧?SQL 作为数据库查询语言,实在是太重要了,可以说是程序员、产品经理、数据分析同学的必备技能。 为了帮助大家自学 SQL,这段时间,我一个人做了个 …

ios_base::out和ios::out、ios_base::in和ios::in、ios_base::app和ios::app等之间有什么区别吗?

2023年8月2日,周三晚上 今天我看到了这样的两行代码: std::ofstream file("example.txt", std::ios_base::out);std::ofstream file("example.txt", std::ios::out);这让我产生了几个疑问: 为什么有时候用ios_base::o…

智慧城市规划新引擎:探秘数字孪生中的二维与三维GIS技术差异

智慧城市作为人类社会发展的新阶段,正日益引领着我们迈向数字化未来的时代。在智慧城市的建设过程中,地理信息系统(GIS)扮演着举足轻重的角色。而在GIS的发展中,二维和三维GIS作为两大核心技术,在城市规划与…

C#使用libmodbus库与工业设备进行读写测试

一.编译libmodbus库供C#使用 如何编译?请移步:https://blog.csdn.net/weixin_42205408/article/details/119530811 上面博主的文章除了所写的modbus.cs内的代码有点问题外(可能上面博主和我的Win 10 64位 Visual Studio 2019平台不一样吧&a…

Spring Boot集成Mybatis-Plus

Spring Boot集成Mybatis-Plus 1. pom.xml导包 <!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--mysql驱动--><dependency><groupId>mysql<…

S系列数字源表为何如此受欢迎?

为什么选择S系列数字源表? 性能强大-作为电压源和或电流源&#xff0c;并同步测量电流和或电压&#xff0c;支持四象限工作。可以限定电压或电流输出大小&#xff0c;预防器件损坏。覆盖3pA-3A的电流范围100μV-300V的电压范围&#xff0c;全量程测量精度0.03%。 灵活多样-支…

数据结构 | 二叉树的应用

目录 一、解析树 二、树的遍历 一、解析树 我们可以用解析树来表示现实世界中像句子或数学表达式这样的构造。 我们可以将((73)*(5-2))这样的数学表达式表示成解析树。这是完全括号表达式&#xff0c;乘法的优先级高于加法和减法&#xff0c;但因为有括号&#xff0c;所以在…

今天面了一个来字节要求月薪24K,明显感觉他背了很多面试题...

最近有朋友去字节面试&#xff0c;面试前后进行了20天左右&#xff0c;包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说&#xff0c;80%的人都会栽在第一轮面试&#xff0c;要不是他面试前做足准备&#xff0c;估计都坚持不完后面几轮面试。 其实&…