【赵渝强老师】史上最详细:Hadoop HDFS的体系架构

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: HDFS(Hadoop分布式文件系统)由三个核心组件构成:NameNode、DataNode和SecondaryNameNode。NameNode负责管理文件系统的命名空间和客户端请求,维护元数据文件fsimage和edits;DataNode存储实际的数据块,默认大小为128MB;SecondaryNameNode定期合并edits日志到fsimage中,但不作为NameNode的热备份。通过这些组件的协同工作,HDFS实现了高效、可靠的大规模数据存储与管理。

b209.png

Hadoop HDFS的体系架构中,包含了三个组成部分。它们分别是:NameNode、DataNode和SecondaryNameNode。下图摘至Hadoop官方的网站,它说明了HDFS的体系架构。

image.png


视频讲解如下:


一、NameNode的职责


NameNode,即名称节点,它是HDFS的主节点,其主要作用体现在以下几个方面。


1、管理和维护HDFS


NameNode管理和维护HDFS的元信息文件fsimage文件和操作日志文件edits文件,以及管理和维护HDFS命名空间。


1.1  HDFS的元信息文件


fsimage文件是HDFS的元信息文件,该文件中保存了目录和文件的相关信息。通过读取fsimage文件就能获取到HDFS的数据分布情况。在部署好的环境中,可以在$HADOOP_HOME/tmp/dfs/name/current目录中找到该文件,如下图所示。

image.png


HDFS提供了元信息查看器,帮助我们来查看元信息文件中的内容。执行下面的命令:


hdfs oiv -i fsimage_0000000000000016309 -o /root/a.xml -p XML


该命令将fsimage元信息文件格式化生成一个XML文件。查看XML文件的内容如下图所示。这里可以看到HDFS中有一个input目录和一个data.txt文件。

image.png


1.2  HDFS的操作日志文件


NameNode维护的另一个系统文件就是edits文件,该文件中记录的客户端操作。HDFS也提供了日志查看器用来查看edits文件中的内容。edits文件与fsimage文件存放在同一个目录下。执行下面的命令:


hdfs oev -i edits_inprogress_0000000000000000105 -o /root/b.xml


该命令将edits日志文件格式化生成一个XML文件。查看XML文件的内容如下图所示,可以看成这条日志记录的是创建一个目录的操作。

image.png


2、接收客户端的请求


客户端的操作请求,无论是上传数据或者下载数据都是由NameNode负责接收和处理。最终将数据按照数据块的形式保存到数据节点DataNode上。下图说明了HDFS数据上传的过程。

image.png


假设需要上传200M大小的一个文件。按照数据块128M的大小为单位进行切块,该文件就会被切分成两个数据块。客户端发出上传命令后,由DistributedFileSystem对象创建一个DFSClient对象,该对象负责与NameNode建立RPC通信,并请求NameNode生成文件的元信息。当NameNode接收到请求后,会生成对应的元信息,如图3.5中的第4步所示。元信息包含了以下的内容:数据块的个数、存储的位置,以及冗余的位置。例如:数据块1将保存到了DataNode1上,同时,对应的两份冗余存储在DataNode2和DataNode3上。NameNode会将生成的元信息返回给DistributedFileSystem对象,并由其创建输出流对象FSDataOutputStream。然后根据生成的元信息上传数据块。例如图3.5中的第7步所示,客户端会将数据块1上传到了DataNode1上,并通过水平复制将其复制到其他的冗余节点上,最终保证数据块冗余度的要求。通过这样的方式,直到所有的数据块上传成功。


了解到了HDFS数据上传的过程,下图说明了HDFS数据下载的过程。

image.png


二、DataNode的职责


数据节点的主要职责是按照数据块来保存数据。从Hadoop 2.x开始,数据块默认大小是128M。在配置好的环境中,数据块默认保存到了Hadoop安装目录下的tmp目录下,如下图所示。

image.png


从上图可以看出每个数据块文件都是以blk的前缀开头,并且默认大小是134217728字节,即128M。


三、SecondaryNameNode的职责


SecondaryNameNode是HDFS的第二名称节点,其主要作用是合并日志。因为HDFS的最新状态信息是记录在edits日志中,而数据的元信息需要记录在fsimage中。换而言之,fsimage文件维护的并不是最新的HDFS状态信息。因此需要一种机制将edits日志中的最新状态信息合并写入fsimage文件中,这个工作就是由SecondaryNameNode完成的。

SecondaryNameNode不是NameNode的热备,因此当NameNode出现问题的时候,不能由SecondaryNameNode顶替NameNode的工作。下图说明的SecondaryNameNode合并日志的过程。

image.png


那么SecondaryNameNode会在什么情况下执行日志文件的合并呢?触发的条件就是当HDFS发出检查点的时候。在默认情况下,Secondary NameNode每小时或在每100万次事务后执行检查点操作,以先到者为准。可以根据以下两个条参数配置检查点操作的频率:

dfs.namenode.checkpoint.txns:
该值默认值是"1000000",即100w条记录。该属性可以指定自上次执行检查点操作以来的编辑日志事务数。
dfs.namenode.checkpoint.period:
该值默认值是"3600s",即1小时。该属性可以指定自上次执行检查点操作以来经过的时间。


相关文章
|
10天前
|
存储 关系型数据库 MySQL
【赵渝强老师】TiDB的体系架构
TiDB是由PingCAP公司自主研发的开源分布式关系型数据库,支持HTAP(混合事务分析处理),具备弹性扩缩容、金融级高可用、实时分析等特性,兼容MySQL协议。其架构分为存储集群(行存TiKV与列存TiFlash)、调度集群(PD实例)和计算集群(TiDB实例)。相比传统单机数据库,TiDB优势显著:纯分布式设计、高扩展性、自动故障恢复、ACID事务支持及丰富的工具生态,适用于高可用与强一致要求的场景。
57 10
|
5月前
|
大数据
【赵渝强老师】大数据主从架构的单点故障
大数据体系架构中,核心组件采用主从架构,存在单点故障问题。为提高系统可用性,需实现高可用(HA)架构,通常借助ZooKeeper来实现。ZooKeeper提供配置维护、分布式同步等功能,确保集群稳定运行。下图展示了基于ZooKeeper的HDFS HA架构。
123 0
|
29天前
|
存储 SQL 并行计算
【赵渝强老师】达梦数据库MPP集群的架构
达梦数据库提供大规模并行处理(MPP)架构,以低成本实现高性能并行计算,满足海量数据存储和复杂查询需求。DM MPP采用完全对等无共享体系,消除主节点瓶颈,通过多节点并行执行提升性能。其执行流程包括主EP生成计划、分发任务、各EP并行处理及结果汇总返回。为确保高可用性,建议结合数据守护部署。
|
3月前
|
存储 分布式计算 Hadoop
MPP 架构与 Hadoop 架构技术选型指南
MPP架构与Hadoop架构是处理海量数据的两大选择。MPP通过大规模并行处理实现快速查询响应,适用于企业级数据仓库和OLAP应用;Hadoop则以分布式存储和计算为核心,擅长处理非结构化数据和大数据分析。两者各有优劣,MPP适合结构化数据和高性能需求场景,而Hadoop在扩展性和容错性上表现更佳。选择时需综合考虑业务需求、预算和技术能力。
278 14
|
5月前
|
存储 缓存 NoSQL
【赵渝强老师】Memcached集群的架构
Memcached 是一个高性能的分布式内存对象缓存系统,通过在内存中维护一个巨大的 Hash 表来存储各种格式的数据,如图像、视频、文件及数据库检索结果等。它主要用于减轻数据库压力,提高网站系统的性能。Memcached 不支持数据持久化,因此仅作为缓存技术使用。其数据分布式存储由客户端应用程序实现,而非服务端。
149 0
【赵渝强老师】Memcached集群的架构
|
5月前
|
分布式计算 资源调度 Hadoop
【赵渝强老师】基于ZooKeeper实现Hadoop HA
本文介绍了如何在4个节点(bigdata112、bigdata113、bigdata114和bigdata115)上部署HDFS高可用(HA)架构,并同时部署Yarn的HA。详细步骤包括环境变量设置、配置文件修改、ZooKeeper集群启动、JournalNode启动、HDFS格式化、ZooKeeper格式化以及启动Hadoop集群等。最后通过jps命令检查各节点上的后台进程,确保部署成功。
249 0
|
5月前
|
调度 Docker 容器
【赵渝强老师】Docker Swarm集群的体系架构
Docker Swarm自1.12.0版本起集成至Docker引擎,无需单独安装。它内置服务发现功能,支持跨多服务器或宿主机创建容器,形成集群提供服务。相比之下,Docker Compose仅限于单个宿主机。Docker Swarm采用主从架构,Swarm Manager负责管理和调度集群中的容器资源,用户通过其接口发送指令,Swarm Node根据指令创建容器运行应用。
|
5月前
|
存储 缓存 分布式计算
【赵渝强老师】基于RBF的HDFS联邦架构
最新版Hadoop实现了基于Router的联盟架构,增强了集群管理能力。Router将挂载表从客户端中分离,解决了ViewFS的问题。RBF架构包括Router和State Store两个模块,其中Router作为代理服务,负责解析ViewFS并转发请求至正确子集群,State Store则维护子集群的状态和挂载表信息。
117 0
|
6月前
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
327 6
|
6月前
|
SQL 分布式计算 监控
Hadoop-20 Flume 采集数据双写至本地+HDFS中 监控目录变化 3个Agent MemoryChannel Source对比
Hadoop-20 Flume 采集数据双写至本地+HDFS中 监控目录变化 3个Agent MemoryChannel Source对比
120 3