分布式文件系统_分布式文件系统HDFS

HDFS是Hadoop的分布式文件系统,用于处理大规模数据。它将大文件切分为块进行存储,每个块通常有多个副本以提供容错性。NameNode管理文件系统的命名空间和元数据,DataNode存储数据块。SecondaryNameNode协助NameNode维护元数据,定期合并Fslmage和EditLog。HDFS支持流式数据访问,适用于一次写入多次读取的场景。
摘要由CSDN通过智能技术生成

5dd65f680c972b082092b1cbace65902.png

为了解决海量数据存储问题,Google开发了分布式文件系统GFSo HDFS是GFS的开源实现, 它是Hadoop的核心组件之一。HDFS提供了在通用硬件集群中进行分布式文件存储的能力,是一 个高容错性和高吞吐量的海量数据存储解决方案。

HDFS 简介

HDFS (Hadoop Distributed Filesystem, Hadoop分布式文件系统)以流式数据访问模式来存储 超大文件,运行在由廉价普通机器组成的集群上,是管理网络中跨多台计算机存储的文件系统。它 的基本原理是将文件切分成同等大小的数据块,存储到多台机器上,将数据切分、容错、负载均衡 等功能透明化。

HDFS上的文件被划分为相同大小的多个block块,以块作为独立的存储单位(称为数据块)为什么要弄成块来存储?第一,大文件用一个节点是存不下来的,势必分成块;第二,网络传输时 万一宕掉,可以小部分重传;第三,简化了存储管理,同时元数据就不需要和块一同存储了,用一 个单独的系统就可以管理这些块的元数据。所以block块是HDFS中最基本的存储单位。一个文件 Hadoop 2.x版本的HDFS块默认大小是128MB (Hadoop 1.X版本默认块大小是64MB)。默认块 大小是可以修改的,可以通过dfs.block.size设置。

除了将文件分块,每个块文件也有副本,这是为了容错性。当一个机器挂了,想要恢复里面 的文件,就可以去其他机器找文件的副本。默认是三个副本,也可通过hdfs-site.xml中的replication 属性修改副本数量。

HDFS的副本放置策略是将第一个副本放在本地节点,将第二个副本放到本地机架上的另外一 个节点,而将第三个副本放到不同机架上的节点。这种方式减少了机架间的写流量,从而提高了写 的性能。机架故障的概率远小于节点故障。将第三个副本放置在不同的机架上,这也防止了机架故障时数据的丢失。

总之,HDFS在设计之初就是针对超大文件存储的,小文件不会提高访问和存储速度,反而会 降低。其次它釆用了流式数据访问,特点是一次写入多次读取。再有就是它运行在普通的标准硬件 (如PC服务器)之上,即使硬件故障,也可以通过副本冗余容错机制来保证数据的高可用。

HDFS架构概述

HDFS 釆用主从(Master/Slave)架构模型,分为 NameNode (名称节点)、SecondaryNameNode (第二名称节点)、DataNode (数据节点)这几个角色

79e6ce037bb9b28dbb77d9d180c05c67.png

—个典型的HDFS集群是由一个NameNode个SecondaryNameNode和若干个DataNode(通 常大于3个)组成的,通常是一个节点一个机器,它来管理对应节点的存储。

(1) NameNode:主要负责文件系统命名空间的管理、存储文件目录的Metadata元数据信息, 主要包括文件目录、block块和文件对应关系,以及block块和DataNode数据节点的对耳关系。

(2) SecondaryNameNode:是NameNode的冷备份,用来减少NameNode的工作量。

(3) DataNode:负责存储客户端(Client)发来的Block数据块,执行数据块的读写操作。

HDFS命名空间管理

HDFS的命名空间包含目录、文件和块。在HDFS1.0架构中,在整个HDFS集群中只有一个 命名空间,并且只有唯一一个NameNode,负责对这个命名空间进行管理。HDFS使用的是传统的分级文件体系,因此用户可以像使用普通文件系统一样创建、删除目录和文件以及在目录间移动文 件、重命名文件等。HDFS2.0新特性federation联邦功能支持多个命名空间,并且允许在HDFS中 同时存在多个NameNode

NameNode

HDFS集群的命名空间是由NameNode来存储的。NameNode使用Fslmage和EditLog两个核 心的数据结构,如图所示。EditLog事务日志文件记录每一个对文件系统元数据的改变,如在 HDFS中创建一个新的文件,名称节点将会在EditLog中插入一条记录来记录这个改变。整个命名 空间的信息包括文件块的映射表等都存放在Fslmage文件中。

05de6251e75e9f35d578dd2a96e3bea1.png

名称节点启动时,它将从磁盘中读取Fslmage和EditLog,将EditLog中的所有事务应用到 Fslmage,然后将新的Fslmage刷新到本地磁盘中,因为事务已经被处理并已经持久化到Fslmage 中,然后就可以截去旧的EditLog。这个过程叫作检査点。

Fslmage和Editlog是HDFS的重要数据结构,如果这些文件损坏,就会导致整个集群的失效。 因此可以配置成复制多个Fslmage和EditLog的副本,一般会在本地磁盘和网络文件系统NFS中 分别存放。

SecondaryNameNode

SecondaryNameNode是HDFS架构中的一个组成部分,它用来保存名称节点中对HDFS元数 据信息的备份,减小Editlog文件大小,从而缩短名称节点重启的时间。它一般是单独运行在一台 机器上。

(1) SecondaryNameNode会定期和NameNode通信,请求其停止使用EditLog文件,暂时将 新的写操作写到一个新的文件edit.new中,这个操作是瞬间完成的,上层写日志的函数完全感觉不到差别。

(2) SecondaryNameNode 通过 HTTP GET 方式从 NameNode 上获取到 Fslmage 和 EditLog 文 件,并下载到本地的相应目录下。

(3) SecondaryNameNode将下载下来的Fslmage载入到内存,然后一条一条地执行EditLog 文件中的各项更新操作,使内存中的Fslmage保持最新。这个过程就是EditLog和Fslmage文件合 并。

(4) SecondaryNameNode执行完(3)操作之后,会通过post方式将新的Fslmage文件发送 到NameNode节点上。

(5) NameNode将从SecondaryNameNode接收到的新的Fslmage替换旧的Fslmage文件,同 时将Edit.new替换EditLog文件,从而减小EditLog文件大小。

b29c88f74d4b740c9ed7e66e7ab5ca54.png

第二名称节点相当于为名称节点设置一个“检査点”,周期性备份 名称节点中的元数据信息,但第二名称节点在HDFS设计中只是一个冷备份,并不能起到“热备 份”的作用。HDFS设计并不支持当名称节点故障时直接切换到第二名称节点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值