【Hadoop】HDFS体系结构分析

news2024/9/27 9:26:06

文章目录

  • 1. NameNode
  • 2. Secondary NameNode
  • 3. DataNode

HDFS主要包含NameNode、Secondary NameNode和DataNode三部分,且这三部分在分布式文件系统中分属不同的机器,其中Secondary NameNode不是必须的,在HA架构中Standby NameNode可以替代它。 (这一部分如果看不懂没关系,先看对各部分的功能介绍,如果你不先了解他们是干嘛的,那么这些抽象的名词没有任何意义。)
在这里插入图片描述

1. NameNode

NameNode主要维护着整个文件系统的文件目录树、文件/目录的信息和每个文件对应的数据块列表,并且还负责接收用户的操作请求。

  • 目录树:表示目录之间的层级关系,就是我们在HDFS上执行ls命令可以看到的那个目录结构信息。
  • 文件/目录的信息:表示文件/目录的的一些基本信息(所有者、属组、修改时间、文件大小等信息)
  • 每个文件对应的数据块列表:如果一个文件太大,那么在集群中存储的时候会对文件进行切割,这个时候就类似于会给文件分成一块一块的,存储到不同机器上面。所以HDFS还要记录一下一个文件到底被分了多少块,每一块都在什么地方存储着(这些信息记录在fsimage文件中)。
  • 接收用户的操作请求:我们在命令行使用hdfs操作的时候,是需要先和namenode通信才能开始去操作数据。

NameNode主要包含四个主要文件,这四个文件分别是fsimage、edits、seen_txid和VERSION,他们十分重要,下面会依次介绍。

  1. fsimage文件
    fsimage文件是元数据镜像文件,存储某一时刻NameNode内存中的元数据信息,类似于定时的快照操作(这里的元数据信息是指文件目录树、文件/目录的信息、每个文件对应的数据块列表),可以说fsimage中存放了hdfs最核心的数据。
  2. edits文件
    edits文件是操作日志文件(事务文件),这里面会实时记录用户的所有操作。固化的一些文件内容是存储在fsimage文件中,而当前正在上传的文件信息存储在edits文件之中,edit文件不唯一,这些细致的操作信息会放在多个文件中,文件统一命名为edits_*(这里的*代表数字编号)。edits文件中的信息非常细致,举个例子:上传一个120M的文件,这个事件在fsimage中可能只记录了最终的上传结果信息以及分块编号和地址等,而在edits文件中将记录如下的完整过程:
    在这里插入图片描述
    由此可见,edits文件中的记录是非常细致,而且HDFS的增删改查会在edit文件和fsimage文件中都留下记录,但是edits的记录明显更加细致,因此实际上fsimage文件中的内容是由edits文件定期合成的,这个操作就是由Secondary NameNode完成的,且这个进程只负责这一件事,之所以在前面说这个进程不是必须的,是因为在存在多个NameNode的HA架构中,这一部分工作可以由其他的NameNode(也就是Standby NameNode)来完成。关于HA结构的介绍陈述,可以在下一篇博客中看到。
  3. seen_txid文件
    seen_txid文件中只记录一个数字,其代表的是NameNode里面最后一个edits文件的编号,NameNode重启的时候,会按照seen_txid的数字,顺序从edits_0000001开始运行edits文件。如果根据对应的seen_txid无法加载到对应的文件,NameNode进程将不会完成启动以保护数据一致性。格式化后seen_txid文件记录的数字为0。
  4. VERSION文件
    VERSION文件保存集群的版本信息,与DataNode文件的版本信息保持一致,当集群被格式化之后会发生变化(但重复格式化后DataNode的版本信息不会变,会出现版本信息不匹配问题导致bug)。

2. Secondary NameNode

在上文对edits文件的介绍中已经提及了Secondary NameNode的作用,即定期的把edits文件中的内容合并到fsimage中,这个合并操作称为checkpoint。上文也有说过Secondary NameNode并不是必须的,因为在存在多个NameNode的HA架构中,这一部分工作可以由其他的NameNode(也就是Standby NameNode)来完成。

3. DataNode

DataNode提供真实文件数据的存储服务,针对datanode主要掌握两个概念,一个是block,一个是replication。

  • block:HDFS会按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block,HDFS默认Block大小是 128MB,Blokc块是HDFS读写数据的基本单位。若一个文件不足128M,那么该文件独占一个Block块,这时该块大小不为128M,而是这个文件的大小。
  • replication:译为复制,这里指副本,默认每个文件的副本为3份(在hdfs-site.xml配置文件中进行配置),且分别存储在不同的DataNode机器上。

最后,举一个例子加深理解:假设我们上传了两个10M的文件,又上传了一个200M的文件,那么会产生多少个block块?在HDFS中又会显示几个文件?
答:会产生4个block块,因为默认每个block的大小为128M,因此200M的文件会被分为两个块,分别是128M和72M。在HDFS中会显示3个文件。

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

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

相关文章

【深度学习】详解 SimCLR

目录 摘要 一、引言 二、方法 2.1 The Contrastive Learning Framework 2.2. Training with Large Batch Size 2.3. Evaluation Protocol 三、用于对比表示学习的数据增广 3.1 Composition of data augmentation operations is crucial for learning good representa…

5-2中央处理器-指令周期的数据流

文章目录一.指令周期二.数据流向1.取指周期2.间址周期3.执行周期4.中断周期三.指令执行方案1.单指令周期2.多指令周期3.流水线方案一.指令周期 指令周期:CPU从主存中每取出并执行一条指令所需的全部时间。 此处:取指周期取指令指令译码 指令周期常用若…

SSM整合(Spring + SpringMVC + MyBatis)

SSM Spring SpringMVC MyBatis 准备数据库 SET FOREIGN_KEY_CHECKS0; DROP TABLE IF EXISTS user; CREATE TABLE user (id int(11) NOT NULL AUTO_INCREMENT,username varchar(20) NOT NULL COMMENT 用户名,password varchar(255) NOT NULL COMMENT 密码,real_name varchar(…

Linux常用命令——startx命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) startx 用来启动X Window 补充说明 startx命令用来启动X Window,实际上启动X Window的程序为xinit。 语法 startx(参数)参数 客户端及选项:X客户端及选项;服务器及选项&a…

[LeetCode周赛复盘] 第 329 场周赛20230122

[LeetCode周赛复盘] 第 329 场周赛20230122 一、本周周赛总结二、 [Easy] 6296. 交替数字和1. 题目描述2. 思路分析3. 代码实现三、[Medium] 6297. 根据第 K 场考试的分数排序1. 题目描述2. 思路分析3. 代码实现四、[Medium] 6298. 执行逐位运算使字符串相等1. 题目描述2. 思路…

深入理解 OpenMP 线程同步机制

深入理解 OpenMP 线程同步机制 前言 在本篇文章当中主要给大家介绍 OpenMP 当中线程的同步和互斥机制,在 OpenMP 当中主要有三种不同的线程之间的互斥方式: 使用 critical 子句,使用这个子句主要是用于创建临界区和 OpenMP 提供的运行时库…

连续系统的数字PID控制仿真-1

被控对象为一电机模型传递函数:式中,J 0.0067;B0.10。采用M函数的形式,利用ODE45的方法求解连续对象方程,输入指令信号为yd(k)0.50sin(2*3.14*t),采用PID控制方法设计控制器,其中kp20.0 ,kd0.50。PID正弦跟…

12个开源的后台管理系统

1. D2admin 开源地址:https://github.com/d2-projects/d2-admin 文档地址:https://d2.pub/zh/doc/d2-admin/ 效果预览:https://d2.pub/d2-admin/preview/#/index 开源协议:MIT 2. vue-element-admin 开源地址:htt…

Kettle(3):快速入门

1 需求 有一个txt文件,内容如下: id,name,age,gender,province,city,region,phone,birthday,hobby,register_date 392456197008193000,张三,20,0,北京市,昌平区,回龙观,18589407692,1970-8-19,美食;篮球;足球,2018-8-6 9:44 267456198006210000,李四,2…

Vue3 – Composition API

1、认识CompositionAPI 1.1、Options API的弊端 在Vue2中,我们编写组件的方式是Options API: Options API的一大特点就是在对应的属性中编写对应的功能模块;比如data定义数据、methods中定义方法、computed中定义计算属性、watch中监听属性…

【快速简单登录认证】SpringBoot使用Sa-Token-Quick-Login插件快速登录认证

一、解决的问题 Sa-Token-Quick-Login 可以为一个系统快速的、零代码 注入一个登录页面 试想一下,假如我们开发了一个非常简单的小系统,比如说:服务器性能监控页面, 我们将它部署在服务器上,通过访问这个页面&#xf…

学习字符串函数和内存函数必看

字符串函数 1.strlen函数 strlen库函数 #include<stdio.h> #include<string.h> int main() {char arr[] "abc";char arr1[] { a,b,c };int len strlen(arr);int len1 strlen(arr1);//没有\0就无法停止printf("%d\n",len);printf("%…

VUE中的provide和inject用法

一、Vue中 常见的组件通信方式可分为三类 父子通信 父向子传递数据是通过 props&#xff0c;子向父是通过 events&#xff08;$emit&#xff09;&#xff1b; 通过父链 / 子链也可以通信&#xff08;$parent / $children&#xff09;&#xff1b; ref 也可以访问组件实例&…

XLSReadWriteII 写了一个DBGrdiEh创建EXCEL表的函数

XLSReadWriteII 写了一个DBGrdiEh创建EXCEL表的函数 自己通过XLSReadWriteII&#xff0c;写了一个由DBGridEh数据集&#xff0c;通过参数调用&#xff0c;创建EXCEL表格的函数&#xff0c;通过调用的参数设置&#xff0c;可以较为方便地&#xff0c;创建指定数据集的常用EXCEL表…

自动化和Selenium

作者&#xff1a;~小明学编程 文章专栏&#xff1a;测试开发 格言&#xff1a;热爱编程的&#xff0c;终将被编程所厚爱。 目录 什么是自动化&#xff0c;我们为什么需要自动化的测试&#xff1f; 为什么选择selenium来作为我们的web自动化测试的工具&#xff1f; 定位元素…

【C进阶】找单身狗

⭐博客主页&#xff1a;️CS semi主页 ⭐欢迎关注&#xff1a;点赞收藏留言 ⭐系列专栏&#xff1a;C语言进阶 ⭐代码仓库&#xff1a;C Advanced 家人们更新不易&#xff0c;你们的点赞和关注对我而言十分重要&#xff0c;友友们麻烦多多点赞&#xff0b;关注&#xff0c;你们…

Spring事务(事务的实现、隔离级别、传播机制)

目录 一、事务的定义和意义 二、事务的实现 1、MySQL事务的回顾 2、Spring声明式事务&#xff08;利⽤注解⾃动开启和提交事务&#xff09; 前置知识及概念 实例分析&#xff1a;事务的回滚 &#x1f514;特殊情况&#xff08;无自动回滚&#xff09; &#x1f514;事务…

VueJs中如何使用provide与inject

前言在vue2.0里面provide与inject是以选项式(配置)API的方式在组件中进行使用的,解决的是跨组件(祖孙)间通信的一种方式也就是父子组件间的通信,父组件上通过自定义属性,而子组件间通过props这种方式接收,如果想要一层一层的传递,这种方式就会比较麻烦,不灵活provide与inject就…

Linux下的进程信号

目录 信号背景&#xff1a; 信号产生前 Core Dump 信号产生中 信号产生后 其他概念 不可重入函数 volatile关键字 SIGCHLD 17号信号 信号背景&#xff1a; 在生活中处处都存在的信号&#xff0c;比如信号灯&#xff0c;要想处理信号&#xff0c;我们就必须具备两种…

day26-XML/枚举/注解

1.xml 1.1概述【理解】 万维网联盟(W3C) 万维网联盟(W3C)创建于1994年&#xff0c;又称W3C理事会。1994年10月在麻省理工学院计算机科学实验室成立。 建立者&#xff1a; Tim Berners-Lee (蒂姆伯纳斯李)。 是Web技术领域最具权威和影响力的国际中立性技术标准机构。 到目前为…