《Hadoop》"呶呶不休"(二)HDFS体系结构概述

HDFS的体系结构 在HDFS中使用的是主从结构,即一个主节点,多个从节点。 在HDFS中主要包含四部分:Client(Shell命令/API/Java Application)、NameNode、DataNode、SecondaryNameNode。 NameNode节点负责维护DataNode上各个块的metadata以及整个HDFS的目录树结构,并且还会将内存中的块的metadata以及fsimage、edits等持久化文件进行备份,以防宕机时数据丢失。 fsimage文件中保存了整个HDFS中的目录树结构、我们的 阅读详情

在上一章中,我们了解了HDFS的设计思想,从而引出了一些相关概念,比如块、名称节点(Namenode)、数据节点(Datanode)、还有SecondaryNamenode等等。在这一章,我们从HDFS的整体结构上再来全面了解一下。

一、体系结构简介

HDFS 采用的是master/slaves这种主从的结构模型来管理数据,这种结构模型主要由四个部分组成,分别是Client(客户端)、Namenode(名称节点)、Datanode(数据节点)和SecondaryNameNode(第二节点,上面的图解中没有涉及到,下面会讲解)。真正的一个HDFS集群包括一个Namenode和若干数目的Datanode。Namenode是一个中心服务器,负责管理文件系统的命名空间 (Namespace )及客户端对文件的访问。集群中的Datanode一般是一个节点运行一个DataNode进程,负责管理客户端的读写请求,在Namenode的统一调度下进行数据块的创建、删除和复制等操作。数据块实际上都是保存在Datanode本地的Linux文件系统中的。每个Datanode会定期的向Namenode发送数据,报告自己的状态(我们称之为心跳机制)。没有按时发送心跳信息的Datanode会被Namenode标记为“宕机”,不会再给他分配任何I/O请求。

用户在使用Client进行I/O操作时,仍然可以像使用普通文件系统那样,使用文件名去存储和访问文件,只不过,在HDFS内部,一个文件会被切分成若干个数据块,然后被分布存储在若干个Datanode上。

比如,用户在Client上需要访问一个文件时,HDFS的实际工作流程如此:客户端先把文件名发送给Namenode,Namenode根据文件名找到对应的数据块信息及其每个数据块所在的Datanode位置,然后把这些信息发送给客户端。之后,客户端就直接与这些Datanode进行通信,来获取数据(这个过程,Namenode并不参与数据块的传输)。这种设计方式,实现了并发访问,大大提高了数据的访问速度。

HDFS集群中只有唯一的一个Namenode,负责所有元数据的管理工作。这种方式保证了Datanode不会脱离Namenode的控制,同时,用户数据也永远不会经过Namenode,大大减轻了Namenode的工作负担,使之更方便管理工作。通常在部署集群中,我们要选择一台性能较好的机器来作为Namenode。当然,一台机器上也可以运行多个Datanode,甚至Namenode和Datanode也可以在一台机器上,只不过实际部署中,通常不会这么做的哦。

二、体系解析

1、Client

严格意义上,HDFS集群上是没有客户端这一部分的,它只是提供了用户操作HDFS的程序接口。HDFS提供了各种各样的客户端接口,比如命令行接口、Java API, Thrift接口、C语言库、用户空间文件系统〔Filesystem in Userspace,FUSE)等。这样,用户就可以有选择的使用客户端程序来操纵HDFS进行浏览、读取和写入等操作了。

客户端程序可以在集群外的任意一台机器上,也可以在集群中的一个节点上。只要客户端能拥有Namenode的ip地址以及端口号信息。

2、Namenode

Namenode是集群主从(master/slaves)结构模型中的唯一一个管理者(master),它负责维护HDFS文件系统的命名空间,以及管理数据块位置信息,也管理着客户端的读写操作。

命名空间(Namespace)的管理:命名空间指的就是文件系统树及整棵树内的所有文件和目录的元数据,每个Namenode只能管理唯一的一命名空间。HDFS暂不支持软链接和硬连接。Namenode会在内存里维护文件系统的元数据,同时还使用fsimage和editlog两个文件来辅助管理元数据,并持久化到本地磁盘上。

fsimage:命名空间镜像文件,它是文件系统元数据的一个完整的永久检查点,内部维护的是最近一次检查点的文件系统树和整棵树内部的所有文件和目录的元数据,如修改时间,访问时间,访问权限,副本数据,块大小,文件的块列表信息等等。
使用XML格式查看fsimage文件:
$ hdfs oiv -i  【fsimage_xxxxxxxxxxxx】 -o  【目标文件路径】 -p  XML
如:$ hdfs oiv -i fsimage_0000000000000000052 -o ~/fs52.xml  -p  XML

editlog:编辑日志文件,当hdfs文件系统发生打开、关闭、创建、删除、重命名等操作产生的信息除了在保存在内存中外,还会持久化到编辑日志文件。比如上传一个文件后,日志文件里记录的有这次事务的txid,文件的inodeid,数据块的副本数,数据块的id,数据块大小,访问时间,修改时间等
查看editlog文件的方式:
$ hdfs oev -i 【edits_inprogress_xxxxxxxxxxxxxx】 -o 【目标文件路径】
如: $ hdfs oev -i edits_inprogress_000000000000000003  -o  ~/ed3.xml

Namenode在内存中,也记录着每个文件的各个块所在的数据节点的位置信息(数据块-Datanode映射信息),但是并不持久保存位置信息,因为这些信息会在文件系统启动时动态的重建这些信息(心跳机制,blockreport)。

当然,Namenode也管理着客户端对文件的访问等操作,比如客户端想要访问一个文件,得需要通过Namenode的检查,比如权限检查,文件是否存在,及其数据块的Datanode列表信息等。

3、Datanode

Datanode是HDFS主从结构模式中的工作者,在HDFS集群上,有若干个Datanode。Datanode负责数据块的存储和读取(会根据客户端或者Namenode的调度来进行数据的存储和检索),数据块会存储在节点的本地Linux文件系统中(包括block和block.meta)。Datanode会定期向Namenode发送自己所存储的块的列表(心跳机制,blockreport)。

HDFS集群中,有一个Namenode和若干个Datanode,这些节点通常分布在不同的机架(Rack)上,每个机架上可存放8~64个Datanode。一个机架上的不同节点使用同一个网络连接进行互通,机架之间使用另一级网络或交换机互联。

4、SecondaryNamenode

SecondaryNamenode,是HDFS集群中的重要组成部分,它可以辅助Namenode进行fsimage和editlog的合并工作,减小editlog文件大小,以便缩短下次Namenode的重启时间,能尽快退出安全模式。

两个文件的合并周期,称之为检查点机制(checkpoint),是可以通过hdfs-default.xml配置文件进行修改的:

<property>
  <name>dfs.namenode.checkpoint.period</name>
  <value>3600</value>
  <description>两次检查点间隔的秒数,默认是1个小时</description>
</property>

<property>
  <name>dfs.namenode.checkpoint.txns</name>
  <value>1000000</value>
  <description>txid执行的次数达到100w次,也执行checkpoint</description>
</property>

<property>
  <name>dfs.namenode.checkpoint.check.period</name>
  <value>60</value>
  <description>60秒一检查txid的执行次数</description>
</property>

我们再来看看SecondaryName是如何创建检查点的?

创建检查点(参考图片)的步骤如下:

1)、SecondaryNamenode请求Namenode停止使用正在编辑的editlog文件,Namenode会创建新的editlog文件(小了吧),同时更新seed_txid文件。
2)、SecondaryNamenode通过HTTP协议获取Namenode上的fsimage和editlog文件。
3)、SecondaryNamenode将fsimage读进内存当中,并逐步分析editlog文件里的数据,进行合并操作,然后写入新文件fsimage_x.ckpt文件中。
4)、SecondaryNamenode将新文件fsimage_x.ckpt通过HTTP协议发送回Namenode。
5)、Namenode再进行更名操作。

这个过程清晰的解释了SecondaryNamenode和Namenode要有相近的内存需求才行,两者都会将fsimage加载到内存里,因此,在一些大型集群中,SecondaryNamenode通常都要运行在一台专用机器上。

我们应该还可以想到,在创建检查点的过程中,Namenode上的新的editlog可能已经记录了一些新的操作日志。如果在这个过程中,Namenode发生了故障,那么就会丢失部分元数据,在HDFS的设计中,也并不支持把系统直接切换到SecondaryNamenode,因此从这个角度来讲,SecondaryNamenode只是起到了名称节点的“检查点”作用,并不能起到“热备份”作用。

5、安全模式

Namenode启动时,首先要加载fsimage文件到内存,并逐条执行editlog文件里的事务操作,在这个期间一但在内存中成功建立文件系统元数据的映像,就会新创建一个fsimage文件(该操作不需要SecondaryNamenode)和一个空的editlog文件。在这个过程中,namenode是运行在安全模式下的,Namenode的文件系统对于客户端来说是只读的,文件修改操作如写,删除,重命名等均会失败。

Namenode不会存储数据块的位置信息,因此Namenode在启动后,还会等待接受Datanode的blockreport(数据块的状态报告)。严格来说,只有接受到状态报告后,客户端的读操作才能成功完成。

PS:启动一个刚刚格式化完的集群时,HDFS还没有任何操作呢,因此Namenode不会进入安全模式。

查看namenode是否处于安全模式:

[michael@master current]$ hdfs dfsadmin -safemode get  
Safe mode is ON

管理员可以随时让Namenode进入或离开安全模式,这项功能在维护和升级集群时非常关键

[michael@master current]$ hdfs dfsadmin -safemode enter
Safe mode is ON
[michael@master current]$ hdfs dfsadmin -safemode leave
Safe mode is OFF

将下面的属性的值设置为大于1,将永远不会离开安全模式

<property>
  <name>dfs.namenode.safemode.threshold-pct</name>
  <value>0.999f</value>
</property>

有时,在安全模式下,用户想要执行某条命令,特别是在脚本中,此时可以先让安全模式进入等待状态

[michael@master current]$ hdfs dfsadmin -safemode wait
# command to read or write a file

6、通信协议

所有的HDFS通信协议都是构建在TCP / IP协议基础之上的。客户端通过可配置的TCP端口主动向Namenode发送TCP请求建立连接。它将使用客户端协议与NameNode进行通信。Datanode使用Datanode协议与Namenode通信。客户端和Datanode使用远程过程调用(RPC)进行通信。NameNode永远不会主动启动任何RPC,它只响应DataNodes或客户端发出的RPC请求。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

openclaw + ollama本地模型 + 飞书平台 windows平台部署教程 本教程将指导您在 Windows 10/11 环境下,通过 Ollama 运行本地模型,并结合 OpenClaw 接入飞书,搭建一个完全本地化的 AI 助手。 阅读详情

相关推荐

帆软js--获取控件和单元格

参数面板: 获取面板控件 ,name为控件名称:_g().parameterEl.getWidgetByName("name") 取值:_g().parameterEl.getWidgetByName("tt3").getValue()2323 赋值:_g().parameterEl.getWidgetByName("tt2").setValue("987") 调用对应的事件比...

江湖行骗老中医 7198

大数据篇--HDFS

文章目录一、准备工作 一、准备工作 首先安装好Zookeeper: 在pom.xml中添加: <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.5</version> &

小强签名设计 的博客 2085

从Datasheet到可用的Verilog模块:手把手教你为N25Q128 SPI Flash写状态机驱动

本文详细介绍了如何从Datasheet到实现可用的Verilog模块,手把手教你为N25Q128 SPI Flash编写状态机驱动。文章涵盖SPI Flash的核心工作机制、数据手册解析方法、Verilog状态机设计实践以及调试与性能优化技巧,特别适合FPGA开发者和硬件设计工程师参考。

weixin_30596023的博客 176

Hadoop体系结构之 HDFS

    HDFS采用主从(Master/Slave)结构模型,一个HDFS集群是由一个NameNode和若干个DataNode组成的(在最新的Hadoop2.2版本已经实现多个NameNode的配置-这也是一些大公司通过修改hadoop源代码实现的功能,在最新的版本中就已经实现了)。NameNode作为主服务器,管理文件系统命名空间和客户端对文件的访问操作。DataNode管理存储的数据。HDFS...

weixin_34367845的博客 413

开源实战 | 基于SolidWorks与Matlab的并联索驱机器人轨迹规划全流程

本文详细介绍了基于SolidWorks与Matlab的并联索驱机器人轨迹规划全流程,涵盖从基础概念到实战技巧的各个环节。通过SolidWorks建模、Matlab运动学实现及轨迹优化策略,展示了如何实现高精度轨迹规划,适用于摄影、医疗等领域的机器人应用。

weixin_28331555的博客 404

【EMC电磁兼容】02.04——原理图的实战落地细节

原理图上的关于EMC的落地体现一、元器件的选型二、原理图上的EMC体现在哪里?1.芯片电源管脚滤波去耦:2.时钟电路滤波设计3.低速电路滤波抗干扰设计4.通讯接口电路的防护滤波5.系统输入电源端口电路的防护滤波6.系统接地的定义7.芯片软件功能的审查 一、元器件的选型 ​ 原理图最初设计涉及到选型元器件方面: 元器件选型 不仅仅功能需要满足要求,还需要考虑其它细节参数在不同应力下的反应,封装的不同也会产生不同的变化。 元器件替代 常常因为成本原因进行器件替代,除了要考虑功能参数相同时也要考虑系统参数

Time to Forget 2244

Hadoop简介和体系架构

目录 2.1 Hadoop简介 2.1.1 Hadoop由来 2.1.2 Hadoop发展历程 2.1.3 Hadoop生态系统 2.2 Hadoop的体系架构 2.2.1 分布式文件系统HDFS 2.2.2 分布式计算框架MapReduce 2.2.3 分布式资源调度系统YARN 2. 2. 4三大发行版本 2.1 Hadoop简介 自从大数据的概念被提出后,出现了很多相关技术,其中对大数据发展最有影响力的就是开源分布式计算平台Hadoop,它就像软件发展史上的Win...

rm -rf/坏习惯 8328

Starlink第三代终端与第二代终端的差异分析

SpaceX星链第三代终端实现显著升级,硬件售价维持599美元不变但性能全面提升。相比第二代产品,第三代终端取消自动调节电机改为手动定向,防水防尘等级提升至IP67,天线面积扩大46%,支持235台设备连接(提升87%),下载速度可达1Gbps(提升4倍),延迟降至20ms以下。新增3个千兆接口和WiFi6支持,同时推出199美元单独路由器选项。这些改进使第三代终端在保持价格优势的同时,更好地满足户外、移动和商业场景需求,标志着SpaceX卫星互联网服务从亏损销售转向盈利模式的重要转折。

通信行业老兵、物联网从业者,做一个有趣的普通人。 3030

Hadoop大数据系统架构(深入浅出)

Hadoop大数据系统架构

weixin_46713695的博客 3667

Unreal5从入门到精通之一文搞懂Unreal的C++代码编译之谜

我们在开发Unreal项目时,如果时蓝图模板的项目,一般问题不大,因为当你修改完蓝图,点击编译Compile+保存Save,就可以继续开发了。这对于开发者来说也非常友好。但是,如果你使用的C++模板开发项目,代码编译一切都变得魔幻起来,IDE(VS/Rider)里面有编译,编辑器里面也有编译,有什么区别呢?我们来列举几个新手常碰到的问题。1.代码我明明新建了,编辑器里怎么看不到?2.昨天我新家的功能运行的好好的,今天怎么感觉还是老逻辑。或者昨天加的新代码,新蓝图不见了。

TxNet 1606

在 SAP S/4HANA 分析模型中添加 Measures,Calculated、Restricted、Currency Conversion 与 Unit Conversion 的建模思路

摘要: SAP S/4HANA分析查询建模中,度量(measure)的加工层级是关键难点,涉及聚合时机、币种/单位语义、过滤上下文等复杂因素。度量不仅是数字字段,还需处理计算口径(Calculated Measures)、上下文绑定(Restricted Measures)和单位转换等问题。Calculated Measures适合派生指标(如毛利率),需注意聚合前后计算差异;Restricted Measures通过固化过滤条件(如区分实际/计划金额)确保业务语义一致性。建模时应将业务逻辑下沉到分析模型层

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1022

Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解

摘要:通过对Hadoop分布式计算平台最核心的分布式文件系统HDFS、MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase的介绍,基本涵盖了Hadoop分布式平台的所有技术核心。 编者按:HDFS和MapReduce是Hadoop的两大核心,除此之外Hbase、Hive这两个核心工具也随着Hadoop发展变得越来越重要。本文作者张震的博文《Thinking i

whaoXYSH的专栏 2362

手机开发实战58——小区广播介绍2

业务 针对小区广播短消息的特点,可以提供一些基于目前短消息不能或不适合提供的服务: 1. 显示网络服务基站名称:用户可以随时了解手机登记在哪个基站下,特别是在边界交叉覆盖区域,用户可以清楚的知道通话建立在哪个基站下,在用户投诉和故障描述中也会有所帮助; 2. 提供用户问候信息:可以在覆盖机场、车站等地区的基站广播一些用户问候语或一些企业形象广告语; 3. 充分利用小区广播地

xjbclz的专栏 772

《Hadoop》"呶呶不休"(三)HDFS的存储原理

一、数据块的冗余 为了保证系统的容错性和可用性,hdfs采用了多副本方式对数据块进行冗余存储,也就是一个数据块的多个副本会被分布到不同的Datanode上,存储在Datanode的本地文件系统中。 这种多副本的存储方式有以下优点: 1)加快数据传输速度。当多个客户端需要同时访问同一个文件时,这些客户端可以从不同的数据块副本中读取数据,大大提高了数据的传输速度。2)容易检查数据错误。HDFS...

从明老师的博客 2279

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

《Hadoop》"呶呶不休"(一)HDFS设计思想和相关概念

一、HDFS简介 1、简单介绍 HDFS(Hadoop  Distributed  FileSystem),是Hadoop项目的两大核心之一,源自于Google于2003年10月发表的GFS论文,是对GFS的开源实现。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。 HDFS在设计之初,就是要运行在通用硬件(commodity hardware)上,即廉价的大型...

从明老师的博客 752

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

《Hadoop》"呶呶不休"(四)HDFS读写流程的详解

在这一章里,我们来具体了解一下客户端与HDFS、Namenode和Datanode之间的数据流到底是什么样子的。我们分别从两个方面来了解数据流,一个是客户端从HDFS中读数据,一个是客户端向HDFS中写数据。 一、读流程解析 我们来结合一下代码和流程图来解析一下HDFS的读流程。 public static void main(String[] args) throws Exception...

从明老师的博客 647

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

《Hadoop》"呶呶不休"(五)Windows10下的Eclipse搭建Hadoop2.7.3开发环境

在这一章里,我们来学习如何在Windows操作系统下,搭建Hadoop2.7.3集群的Eclipse开发环境。 一、准备工作 1、安装Hadoop2.7.3集群 我们使用VMware工具安装多台Linux系统,然后在Linux系统上搭建我们所需要的Hadoop2.7.3完全分布式集群。具体步骤可以参考我写的《Hadoop》之"踽踽独行"(十)快速搭建一个Hadoop完全分布式集群或者是另一篇...

从明老师的博客 754

Hadoop的体系结构简介

主题:Hadoop的体系结构详解(重点) 注意:大数据的一些组件的结构基本上都是主从式的结构 一、Hadoop的分布式文件存储系统HDFS的体系结构 HDFS的体系结构图: HDFS的伪分布环境下的结构: HDFS体系结构包括: (1)、NameNode名称节点 作用: (*)...

聚焦大数据、AI、数据库三大核心领域,分享 Flink/Spark 实时计算、数仓架构设计、AI 模型落地、数据库性能调优的实战干货,附可直接运行的源码与方案。提供企业技术内训、项目咨询与定制化服务,助力开发者与企业高效搞定数智技术难题。 3682

Hadoop生态圈(十二)- HDFS架构深入学习

HDFS整体概述,HDFS重要特性,HDFS Web Interfaces,HDFS读写流程,Pipeline管道、ACK应答响应,默认3副本存储策略,网络拓扑——节点距离计算,主从架构,分块机制,副本机制,Namespace,元数据管理,数据块存储

程序园@大Null 3894

Hadoop核心架构体系(HDFS+MapReduce+Hbase+Hive+Yarn)

Hadoop核心体系结构详解,超详细

蔡小白的博客 1万+

HDFS:架构详解

HDFS架构解读。

easonwx的博客 1564

Hadoop——大数据生态体系详解

这是管理队列及工作者集群的另一种方式。1)Sqoop:sqoop 是一款开源的工具,主要用于在 Hadoop(Hive)与传统的数据库(mysql)间进 行数据的传递,可以将一个关系型数据库(例如 :MySQL ,Oracle 等)中的数据导进到 Hadoop 的 HDFS 中,也可以将 HDFS 的数据导进到关系型数据库中。2)Flume:Flume 是 Cloudera 提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume 支持在日志系统中定制各类数据发送方,用于收集数据;

Rocky006的博客 2991

Hadoop 简介

起源 Hadoop 是 Apache 软件基金会旗下的一个分布式计算开源软件。Hadoop 项目起源于 Apache Nutch(爬虫系统),项目自身是 Lucene(全文搜索引擎)项目的一部分。2002年,Lucene 项目引入 Nutch 项目作为其子项目,可用于网页抓去工具和搜索引擎系统,但是不能很好地处理一定量级(数十亿级)的网页搜索。2003年10月Sanjay Ghemawat 等在19届ACM Symposium on Operating System Principles 上公开发表论文,描

司马懿的西山居 2055

Hadoop体系结构与目录结构

目前Hadoop已经升级到3.x版本,相比较于2.x版本,只是对性能进行了调优。

wusuoweiieq的博客 601

hadoop组成及其架构

HDFS读写数据流程以及优缺点 MapReduce工作原理及shuffle详解 yarn工作机制、调度器及调度算法

shenBaoYun的博客 8288

Hadoop-HDFS角色工作机制

1、HDFS,分布式文件系统)HDFS是Hadoop应用程序使用分布式存储,HDFS集群主要由管理文件系统元数据的NameNode和存储实际数据的DataNode组成。2、两个核心概念:三副本存储和Pipeline管道;3、上传流程详解;...

weixin_44894162的博客 1396
上一篇: 《Hadoop》"呶呶不休"(一)HDFS设计思想和相关概念
下一篇: 《Hadoop》"呶呶不休"(三)HDFS的存储原理
从明老师
博客等级 码龄8年 263粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值