9 HDFS架构剖析

news2024/11/20 15:35:45
问题

100台服务器,存储空间单个200GB 20T
5T文件如何存储?
128MB一块 128MB8=1GB 1288*1024=1TB
5T数据分成的128MB的块数 = 8192 * 5
在这里插入图片描述
在这里插入图片描述
客户端(client)代表用户通过与namenode和datanode交互来访问整个文件系统。

HDFS集群有两类节点:
一个namenode(管理节点)和多个datanode(工作节点)。
namenode管理文件系统的命名空间。它维护着文件系统树及整棵树内的所有文件和目录。这些信息以两个文件形式永久保存在本地磁盘上:命名空间**镜像文件(fsimage)编辑日志(edits log)**文件。

namenode也记录着每个文件中各个块所在的dataNode信息,但是它并不会永久保存块的位置信息,因为这些信息会在系统启动时根据数据节点信息重建。
4
之后DataNode会周期性地通过心跳包向NameNode报告block信息。DataNode向NameNode注册的时候NameNode请求DataNode发送block列表信息。

1、NameNode

NameNode在内存中保存着整个文件系统的名字空间和文件数据块的地址映射(Blockmap)。是整个文件系统的管理节点。
如果NameNode宕机,那么整个集群就瘫痪了。因此,对namenode实现容错非常重要,Hadoop 为此提供两种机制。
备份
备份那些组成文件系统元数据的文件,Hadoop可以通过配置使namenode在多个文件系统上保存元数据的持久状态。这些写操作是实时同步的,且是原子操作。一般的配置是,将持久状态写入本地磁盘的同时,写入一个远程挂载的网络文件系统(NFS)
辅助namenode
运行一个辅助namenode,但它不能被用作namenode。这个辅助namenode的重要作用是定期合并编辑日志与命名空间镜像,以防止编辑日志过大。这个辅助namenode一般在另一台单独的物理计算机上运行,因为它需要占用大量CPU时间,并且需要与namenode一样多的内存来执行合并操作。它会保存合并后的命名空间镜像的副本,并在namenode 发生故障时启用。但是,辅助namenode保存的状态总是滞后于主节点,所以在主节点全部失效时,难免会丢失部分数据。在这种情况下,一般把存储在 NFS上的namenode元数据复制到辅助namenode并作为新的主namenode 运行。

  1. 文件和目录的元数据:(运行时,元数据放内存)
    文件的block副本个数
    修改和访问的时间
    访问权限
    block大小以及组成文件的block信息列表
  2. NameNode的目录结构,该目录结构在第一次格式化的时候创建.
├── current
│   ├── edits_0000000000000000001-0000000000000000125
│   ├── edits_0000000000000000126-0000000000000000344
│   ├── edits_0000000000000000345-0000000000000000386
│   ├── edits_0000000000000000387-0000000000000000388
│   ├── edits_0000000000000000389-0000000000000000484
│   ├── edits_0000000000000000485-0000000000000000566
│   ├── edits_0000000000000000567-0000000000000000568
│   ├── edits_inprogress_0000000000000000569
│   ├── fsimage_0000000000000000566
│   ├── fsimage_0000000000000000566.md5
│   ├── fsimage_0000000000000000568
│   ├── fsimage_0000000000000000568.md5
│   ├── seen_txid
│   └── VERSION
└── in_use.lock

其中VERSION是一个JAVA属性文件,其中包含正在运行的HDFS的版本信息,内容如下:

[root@hadoop001 current]# vi VERSION
#Tue Aug 14 19:59:14 PDT 2018
//namespaceID是该文件系统的唯一标志符,当NameNode第一次格式化的时候生成
namespaceID=672644148
//clusterID是将HDFS集群作为一个整体赋予的唯一标识符,当一个集群拥有多个namenode时,数值相同
clusterID=CID-c49b4913-f14f-43d2-bffd-740d6021cc3c
//cTime标记着当前NameNode创建的时间。对于刚格式化的存储,该值永远是0,但是当文件系统更新的时候,这个值就会更新为一个时间戳
cTime=0
//storageType表示当前目录存储NameNode内容的数据结构
storageType=NAME_NODE
//blockpoolID是block池的唯一标志符,一个NameNode管理一个命名空间,该命名空间中的所有文件存储的block都在block池中。
blockpoolID=BP-1958150420-192.168.170.131-1534301954910
/*
1.layoutVersion是一个负数,定义了HDFS持久化数据结构的版本
2.这个版本数字跟hadoop发行的版本无关.
3.当layout改变的时候,该数字减1(比如从-57到-58)
4.当对HDFDS进行了升级,就会发生layoutVersion的改变.
*/
layoutVersion=-60
//namenode的本地目录可以配置成多个,且每个目录存放内容相同,增加了可靠性
//尤其是当其中一个是挂载的NFS的时候,这种机制为管理提供了一些弹性。备份数据.
1.如果属性dfs.namenode.name.dir指定了多个路径,则每个路径中的内容是一样的;
2.in_use.lock文件用于NameNode锁定存储目录。这样就防止其他同时运行的NameNode实例使用相同的存储目录.
3.edits表示edits log日志文件
4.fsimage表示文件系统元数据镜像文件.
5.NameNode在checkpoint之前首先要切换新的edits log文件,在切换时更新seen_txid的值。上次合并fsimage和editslog之后的第一个操作编号.
  1. 操作流程
1.当客户端进行了写操作(例如创建或移动了文件),这个事务首先在edits log中记录下来。
2.NameNode在内存中有文件系统的元数据,当edits log记录结束后,就更新内存中的元数据。内存中的元数据用于响应客户端的读请求。
3.edits log在磁盘上表现为一定数量的文件。每个文件称为片段(Segment),前缀“edits”,后缀是其中包含的事务ID(transaction IDs)。
4.每个写操作事务都仅仅打开一个文件(比如:edits_inprogress_00000000000010),写完后冲刷缓冲区并同步到磁盘,然后返回客户端success状态码。
5.如果NameNode的元数据需要写到多个目录中,则对于每个写事务需要所有的写操作都完成,并冲刷缓冲区同步到磁盘才返回success状态码。这样就可以保证在发生宕机的时候没有事务数据丢失。

用户的操作是一个事务,每个操作NN都要先将操作记录到edits log中,如果给NN指定了多个目录,则在多个目录中都存在edits log文件,用户的操作要在多个目录中都写完成,才让NN同步数据到内存中。当NN在内存中也同步了数据,就返回客户端success。
每个fsimage文件都是系统元数据的一个完整的持久化检查点(checkpoint)(后缀表示镜像中的最后一个事务)。写操作不更新这个数据,因为镜像文件通常为GB数量级,写到磁盘很慢。如果NameNode宕机,可以将最新fsimage加载到内存,同时执行edits log对应于该fsimage之后的操作,就可以重建元数据的状态。而这正是每次启动NameNode的时候NameNode要做的工作。

2、SecondaryNameNode

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

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

相关文章

信安.网络安全.UDP协议拥塞

第一部分 如何解决UDP丢包问题 一、UDP 报文格式 每个 UDP 报文分为 UDP 报头和 UDP 数据区两部分。报头由 4 个 16 位长(2 字节)字段组成,分别说明该报文的源端口、目的端口、报文长度和校验值。UDP 报文格式如图所示。 UDP 报文中每个…

Unity中Shader立方体纹理Cubemap

文章目录 前言一、什么是立方体纹理二、立方体纹理的生成方式1、使用6个面的生成方式2、使用单张图片的生成方式 三、Cubemap的采样方式四、在Unity中看一下Cubemap五、在Shader中,对立方体纹理进行采样使用1、我们在属性面板定义一个Cube类型的变量来存放立方体纹理…

scss的高级用法——循环

周末愉快呀!一起来学一点简单但非常有用的css小知识。 最近在一个项目中看到以下css class写法: 了解过tailwind css或者unocss的都知道,从命名就可以看出有以下样式: font-size: 30pxmargin-left: 5px;margin-top: 10px; 于是…

基于django水果蔬菜生鲜销售系统

基于django水果蔬菜生鲜销售系统 摘要 基于Django的水果蔬菜生鲜销售系统是一种利用Django框架开发的电子商务平台,旨在提供高效、便捷的购物体验,同时支持水果蔬菜生鲜产品的在线销售。该系统整合了用户管理、产品管理、购物车、订单管理等核心功能&…

云课五分钟-0ALinux文件系统及权限-查询命令如何使用

前篇: 云课五分钟-09Linux基础命令实践-AI助力快速入门 视频: 云课五分钟-0ALinux文件系统及权限-查询命令如何使用 文本: Linux文件系统及权限示例教程(Ubuntu) 一、Linux文件系统基础 在Linux中,一切…

windows nodejs 15.0.0下载安装

下载 Node v15.0.0 (Current) | Node.js (nodejs.org) 下载地址 https://nodejs.org/dist/v15.0.0/node-v15.0.0-x64.msi 安装 双击运行 等待安装完成 确认安装成功 管理员运行cmd 查看版本号

buildadmin+tp8表格操作(2)----表头上方按钮绑定事件处理,实现功能(全选/全不选)

buildAdmin 表格上方的按钮添加完成之后, 就要对其实现功能了 有了上面的说明, 我就只要得到了 ref 中的表格对象, 就可以象el-table 一样来操作表格的属性和方法了 我们来实现上面的几个按钮的方法 全选/全不选 上面就是添加按钮功能的全过…

Activiti,Apache camel,Netflex conductor对比,业务选型

Activiti,Apache camel,Netflex conductor对比,业务选型 1.activiti是审批流,主要应用于人->系统交互,典型应用场景:请假,离职等审批 详情可见【精选】activti实际使用_activiti通过事件监听器实现的优势_记录点滴…

某60区块链安全之重入漏洞实战记录

区块链安全 文章目录 区块链安全重入漏洞实战实验目的实验环境实验工具实验原理实验内容 重入漏洞实战 实验目的 学会使用python3的web3模块 学会以太坊重入漏洞分析及利用 实验环境 Ubuntu18.04操作机 实验工具 python3 实验原理 以太坊智能合约的特点之一是能够调用和…

搭建内部知识库,解决企业内部琐碎信息问题

企业内部面临着大量琐碎的信息,这些信息可能分散在各个部门、员工之间,导致查找和共享变得困难。这种情况下,搭建一个内部知识库可以解决这一问题。通过内部知识库,企业可以将琐碎的信息整理、分类,并提供一个集中存储…

在vmware中给linux添加硬盘

1.必须在断开linux电源的情况下,才能添加硬盘成功。注:自己好几次在开机状态下添加硬盘都失败了,然后关机后,又试了下,居然成功了。

【开源】基于Vue.js的开放实验室管理系统的设计和实现

项目编号: S 013 ,文末获取源码。 \color{red}{项目编号:S013,文末获取源码。} 项目编号:S013,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实…

机器视觉工程师吐槽的常见100个名场面

学了后发现真没用,只能越干越多 德创跑的快,苏映视裁的快,上帝说,要有光,我是凌云光。 这群里面有多少从德创跑路的 去年我辛辛苦苦干一年顶两年了,单双休变单休或者无休,节假日全部对半砍。加班…

「git 系列」git 如何存储代码的?

这里写自定义目录标题 git 文件存储位置git 数据模型示例分析分析前准备命令哈希值 具体示例 不同版本的提交,git 做了什么工作?snapshot vs delta-based vs backup参考资料 git 文件存储位置 想要了解如何存储,首先需要知道存储位置。 当我…

从智能到“致用”,安第斯大模型与潘塔纳尔系统的一次会师

为2023年的手机行业找一个关键词,“大模型”应该有很大概率当选。 国内手机厂商都纷纷宣布将大模型应用于手机。基于大模型的AI能力,成为手机市场新的价值增长点,也将主流厂商推向新的起跑线。 但这些复杂的算法和功能来到移动设备&#xff0…

【网络通信】探索UDP与TCP协议、IP地址和端口号的奥妙

🌺个人主页:Dawn黎明开始 🎀系列专栏:网络奇幻之旅 ⭐每日一句:往前走,朝着光 📢欢迎大家:关注🔍点赞👍评论📝收藏⭐️ 文章目录 📋前…

window系统vscode 编译wvp前端代码

下载代码 wvp-GB28181-pro: WEB VIDEO PLATFORM是一个基于GB28181-2016标准实现的网络视频平台,负责实现核心信令与设备管理后台部分,支持NAT穿透,支持海康、大华、宇视等品牌的IPC、NVR、DVR接入。支持国标级联,支持rtsp/rtmp等…

Java20新增特性

版本介绍 Java 20是在2023年3月21日发布的,发布公司是甲骨文。这是标准Java的最新升级,提供了一系列的新特性和改进,以帮助开发者更高效地编写和维护代码。 版本特性 以下是一些Java 20的新特性: 局部变量类型推断 &#xff1a…

趣学python编程 (三、计算机基础知识)

如果不了解些计算机的基础知识上来就编程,往往容易“不识庐山真面目,只缘身在此山中”。因此对于计算机的一些基础知识,在开始编程前,需要理解和掌握。 计算机软件系统 计算机软件是控制计算机实现用户需求的计算机操作以及管理计…

AIGC实战——卷积神经网络(Convolutional Neural Network, CNN)

AIGC实战——卷积神经网络 0. 前言1. 卷积神经网络1.1 卷积层1.2 叠加卷积层1.3 检查模型 2. 批归一化2.1 协变量漂移2.2 使用批归一化进行训练2.3 使用批归一化进行预测 3. Dropout4. 构建卷积神经网络小结系列链接 0. 前言 在深度学习一节中,我们使用 Keras 构建…