首页 > 其他分享 >深入HDFS——元数据管理

深入HDFS——元数据管理

时间:2025-01-15 09:01:21浏览次数:3  
标签:HDFS 文件 文件系统 数据管理 深入 NameNode inode 源码

引入

通过前面的学习积累,我们对HDFS已经有了不错的理解,但是学习技术,还是要从细微处见真章!

今天就通过深入NameNode源码,深入看看HDFS是如何实现元数据管理的。

关于源码阅读,我常用的思路是:

  1. 先对相关技术有一个大致的了解,
  2. 针对里面感兴趣,或者疑惑的地方,换位思考一下自己来会怎么设计
  3. 最后再针对性的阅读相关源码
    1. 首先看源码注释!!!
    2. 然后找自己的目标代码实现逻辑
    3. 总结反思自己的设计和源码的设计的区别

NameNode

梳理准备

首先,通过前面对HDFS核心设计的学习,我们知道NameNode的主要职责如下:

  1. 元数据管理:维护和管理文件系统元数据,如文件/目录信息、文件的Block索引、访问权限等
  2. Block块管理:负责Block与 DataNode 的映射关系,跟踪Block的存储位置
  3. 客户端请求处理:响应客户端的文件操作请求,比如创建、删除、读取和写入文件等。
  4. 集群状态监控:监控整个 HDFS 集群的健康状况和数据存储状态。

上一篇对RPC的学习,后面3个职责,我们可以很容易想到,可以通过利用RPC节点间通信的能力去实现,由于本文重点是元数据管理,所以下面我们重点看看元数据管理这块。

NameNode就像一个公司的领导者,它要管理整个公司,那自然得清楚手下有些什么人,有些什么资源,而这些信息就是所谓的元数据。所以如果我们要设计NameNode这么一个角色的话,那如何管理元数据就至关重要了。

在设计之前,我们先梳理一下对于元数据管理的核心需求:

  1. 能高效管理元数据信息;
  2. 能实时响应客户端的文件操作请求;
  3. 能保证元数据的数据质量。

针对核心需求,我们可以如下设计:

  1. 考虑到要高效管理,我们对于元数据增删改查都很频繁,可以考虑采用多层级的树形结构(如 B + 树)来组织目录结构,方便快速的处理;
  2. 考虑到网络瓶颈,可以用更紧凑的数据结构来存储元数据;
  3. 要能实时处理客户端的请求,那最好得把元数据放到内存里面;
  4. 要保证元数据质量,那引入WAL(Write-Ahead Logging)机制也就很必要了,把修改操作日志写入到磁盘,做持久化处理,能很好的保障元数据的完整性和可靠性。

深入源码

接下来,我们就进入HDFS的源码,去验证一下我们的思路对不对。

先从NameNode对应的核心实现类(org.apache.hadoop.hdfs.server.namenode.NameNode)开始,可以看到源码备注里面写着如下内容:

NameNode serves as both directory namespace manager and "inode table" for the Hadoop DFS. There is a single NameNode running in any DFS deployment. (Well, except when there is a second backup/failover NameNode, or when using federated NameNodes.)

 

The NameNode controls two critical tables:

1) filename-> blocksequence (namespace)

2) block-> machinelist ("inodes")

 

The first table is stored on disk and is very precious.
The second table is rebuilt every time the NameNode comes up.

 

'NameNode' refers to both this class as well as the 'NameNode server'.The 'FSNamesystem' class actually performs most of the filesystem management.  The majority of the 'NameNode' class itself is concerned with exposing the IPC interface and the HTTP server to the outside world,plus some configuration management.

 

翻译:

NameNode 充当 Hadoop DFS 的目录命名空间管理器和 “inode table”。在部署的任何 DFS 集群中,都只有一个 NameNode 在运行。(好吧,除非有第二个备份 / 故障转移的 NameNode,或者使用联邦时除外。)

 
NameNode 控制两个关键的表:
1)文件名 -> block块序列(命名空间)
2)数据块 -> 机器列表(“索引节点”)

第一个表非常珍贵,所以存储在磁盘上。(因为文件与block块之间的关系是不会发生变化的)

第二个表在每次 NameNode 启动时都会重新构建。

“NameNode”既指这个类,也指“NameNode 服务器”。“FSNamesystem”类实际上执行了大部分的文件系统管理。“NameNode”类本身的大部分内容都与向外部世界公开 IPC 接口和 HTTP 服务器有关,再加上一些配置管理。

  

ps:可以看到源码备注用词还是很简单的,我这刚过四级的水平也能轻松读懂

标签:HDFS,文件,文件系统,数据管理,深入,NameNode,inode,源码
From: https://blog.csdn.net/qq_41478243/article/details/145117332

相关文章

  • 深入浅出:Agent如何调用工具——从OpenAI Function Call到CrewAI框架
    深入浅出:Agent如何调用工具——从OpenAIFunctionCall到CrewAI框架嗨,大家好!作为一个喜欢折腾AI新技术的算法攻城狮,最近又学习了一些Agent工作流调用工具的文章,学完之后,我真的是“啊这”,一边感慨AI技术的强大,一边觉得自己打开了新世界的大门。于是,我决定写这篇博客,把我的学习心得......
  • 【人工智能】从Keras到TensorFlow 2.0:深入掌握Python深度学习技术
    《PythonOpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门!解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界随着人工智能技术的迅猛发展,深度学习作为其核心分支,已在图像识别、自然语言处理、语音识别等多个领域展现出卓越的性能。Python作为深度学习的......
  • Python内存优化全攻略:深入理解对象池与__slots__的应用
    《PythonOpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门!解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界在Python开发过程中,内存管理是提升应用性能的关键因素之一。随着应用规模的扩大,内存占用问题日益凸显,尤其是在处理大量对象时。本文将深入探讨......
  • 深入解析 Spring AI 系列:解析OpenAI接口对接
    今天我们将主要探讨OpenAI是如何进行接口对接的,虽然我们不打算深入细节,但会对整体流程进行一个大概的了解。后续会逐步分析其中的具体细节,大家可以耐心等待,逐步展开。好的,现在让我们开始,下面是我简单绘制的一张图示,旨在帮助大家更好地理解接下来的分析流程。OpenAiApi我们第一......
  • 14. C语言 指针(深入理解)
    本章目录:前言:什么是指针?内存与地址:指针的基础指针的声明与使用指针变量的声明指针与地址的关系空指针与野指针空指针(NULLPointer)野指针(DanglingPointer)指针进阶:从数组到函数指针与数组指针数组指向指针的指针函数指针指针的算术运算常见错误与调试技巧总结前......
  • 深入解析太空探索与卫星技术如何改变我们的生活
    在HTML中创建较长的内容需要多步构建,并且受限于只提供一种线性结构。这里,我会试图遵循这样的方式去展示和构建一篇题为《深入解析太空探索与卫星技术如何改变我们的生活》的文章提纲:```html 深入解析太空探索与卫星技术如何改变我们的生活  您可以点击下列链接跳转到不......
  • 【C++17 library features】深入解析 C++17 标准库中的文件系统 (std::filesystem)
    目录标题第一章:std::filesystem概述1.1C++17引入文件系统库的背景和动机1.2std::filesystem的主要功能和模块结构1.2.1路径管理(PathManagement)1.2.2文件和目录操作(FileandDirectoryOperations)1.2.3文件属性与状态(FileAttributesandStatus)1.2.4错误处理......
  • 《STM32开发:深入解析 TIM2->CCR2 与 TIM2.CCR2 的区别与应用》
    前言在最初学习STM32的过程中,由于知识不进脑子,经常边学边忘,并且C语言学习的也比较浅,涉及到指针地址等方面的知识,内心就有点排斥。第一次遇到->和.这两种操作符时,我只是知道按照示例“照着用”,但并不清楚它们之间的具体区别,也没有深入理解它们的内在逻辑。这样的学习方......
  • 《深入理解Mybatis原理》Mybatis中的缓存实现原理
    一级缓存实现什么是一级缓存?为什么使用一级缓存?每当我们使用MyBatis开启一次和数据库的会话,MyBatis会创建出一个SqlSession对象表示一次数据库会话。在对数据库的一次会话中,我们有可能会反复地执行完全相同的查询语句,如果不采取一些措施的话,每一次查询都会查询一次数据......
  • 深入探讨聚合函数(COUNT, SUM, AVG, MAX, MIN):分析和总结数据的新视野
    title:深入探讨聚合函数(COUNT,SUM,AVG,MAX,MIN):分析和总结数据的新视野date:2025/1/13updated:2025/1/13author:cmdragonexcerpt:在数据分析和数据库管理领域,聚合函数(AggregateFunctions)是获取数据总结和统计信息的关键工具。聚合函数如COUNT、SUM、AVG、M......