作者简介:大家好我是Apathfinder,目前是一名在校大学生,软件工程专业,记录学习路上的点点滴滴。
个人主页:Apathfinder本文专栏:Hadoop学习
前言 :本文主要是初识HDFS以及对HDFS基本概念的介绍
目录
正文
一.DFS介绍
1.什么是DFS
由于一台机器的存储容量有限,一旦数据量达到足够的级别,就需要将数据存放在多台机器上,这就是分布式文件系统,即DFS(Distributed File System) ,DFS是HDFS的基础。
分布式文件系统DFS基于Master/Slave模式,通常一个分布式文件系统提供多个供用户访问的服务器,一般都会提供备份和容错的功能。分布式文件系统管理的物理资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连,而非文件系统管理的物理存储资源一定直接连在本地节点上。
2.DFS的结构
分布式文件系统在物理结构上是由计算机集群中的多个节点构成的,。这些节点分为两类,一类叫"主节点”(Master Node) ,也被称为"名称节点”(NameNode) ;另一类叫"从节点”(SlaveNode) ,也被称为"数据节点”(DataNode) 。
![](https://i-blog.csdnimg.cn/blog_migrate/a51b0bdb8021cc4b10d1975ee46dae7e.png)
二.HDFS介绍
HDFS是Hadoop自带的分布式文件系统,即Hadoop Distributed File System.HDFS是一个使用Java语言实现的分布式、可横向扩展的文件系统。
HDFS包括一个名称节点(NameNode)和若干个数据节点(DataNode),属于主/从(Master/Slave)关系的结构模型。 名称节点(NameNode)负责管理文件系统的命名空间及客户端对文件的访问,也就是中心服务器。而集群中的数据节点(DataNode)一般是一个节点运行一个数据节点(DataNode)进程,其中每个数据节点(DataNode)上的数据实际上是保存在本地的Linux文件系统中,并在名称节点的统—调动下,负责处理文件系统客宫户端的读/写请求,或删除、创建和复制数据块等操作。
1.HDFS设计理念
作为Hadoop生态圈的基础,HDFS非常适合运行在廉价硬件集群之上,以流式数据访问模式来存储超大文件。简单的一句话,已经勾勒出HDFS的特点。
1.适合存储大数据集:
存储在HDFS的文件大多在GB甚至TB级别,目前阿里巴巴的集群存储的数据已经达到了60 PB。
2.基于廉价硬件,容错率高:
HDFS在设计的时候,就已经认为在集群规模足够大的时候,节点故障并不是小概率事件,而可以认为是一种常态。例如,一个节点故障的概率如果是千分之一,那么当集群规模是1 000台时,正常情况每天都会有节点故障。当节点发生故障时,HDFS能够继续运行并且不让用户察觉到明显的中断,所以HDFS并不需要运行在高可靠且昂贵的服务器上,普通的PC Server即可。
3.流式数据访问:
HDFS认为,一次写入,多次读取是最高效的访问模式。HDFS存储的数据集作为Hadoop的分析对象,在数据集生成后,会长时间在此数据集上进行各种分析。每次分析都将涉及该数据集的大部分数据甚至全部数据,因此读取整个数据集的时间延迟比读取第一条记录的时间延迟更重要。
4.顺序访问数据:
HDFS适用于处理批量数据,不适合随机定位访问。
2.HDFS的优缺点
1.HDFS的优点
- 高容错性:数据自动保存多个副本,副本丢失后自动恢复。
- 适合批处理:移动计算而非数据,数据位置暴露给计算机框架。
- 适合大数据处理:GB、TB,甚至PB级数据,百万规模以上的文件数量,10k+节点。
- 可构建在廉价机器上:通过副本提高可靠性,提供了容错和恢复机制。
2.HDFS的缺点
- 不适合低延时数据访问:寻址时间长,适合读取大文件,低延迟与高吞吐率。
- 不适合小文件存取:占用NameNode大量内存,寻找时间超过读取时间。
- 并发写入、文件随机修改:一个文件只能有一个写入者,仅支持append(日志),不允许修改文件。
三.HDFS架构
1.block(数据块)
每个磁盘都有默认的数据块大小,这是磁盘进行数据读/写的最小单位。HDFS也有块的概念,在HDFS 1.x中默认数据块大小为64MB,在HDFS 2.x中默认数据块大小为128MB。
与单一磁盘上的文件系统相似,HDFS上的文件也被划分成块大小的多个分块(chunk),作为独立的存储单元。但与面向单一的文件磁盘系统不同的是,HDFS中小于一个块大小的文件不会占据整个块的空间(例如一个1MB的文件存储在一个128MB的块中时,文件只会使用1MB的磁盘空间,而不是128MB)。
2.chunk(分块)
chunk是最小的单位,它是client向DataNode,或DataNode的PipLine之间进行数据校验的基本单位,默认512Byte,因为用作校验,故每个chunk需要带有4Byte的校验位。所以实际每个chunk写入packet的大小为516Byte。由此可见真实数据与校验值数据的比值约为128 : 1。(即64*1024 / 512)
3.packet
packet是第二大的单位,它是client端向DataNode,或DataNode的PipLine之间传数据的基本单位,默认64KB。
4.NameNode
NameNode为HDFS集群的管理节点,一个集群通常只有一台活动的NameNode,它存放了HDFS的元数据且一个集群只有一份元数据。NameNode的主要功能是接受客户端的读写服务,NameNode保存的Metadata信息包括文件ownership、文件的permissions,以及文件包括哪些Block、Block保存在哪个DataNode等信息。这些信息在启动后会加载到内存中。
5.DataNode
DataNode中文件的储存方式是按大小分成若干个Block,存储到不同的节点上,Block大小和副本数通过Client端上传文件时设置,文件上传成功后副本数可以变更,BlockSize不可变更。默认情况下每个Block都有3个副本。
6.SecondaryNameNode
SecondaryNameNode (简称SNN),它的主要工作是帮助NameNode合产edits,减少NameNode启动时间。
7.元数据
元数据保存在NameNode的内存中,以便快速查询,主要包括fsimage和edits。
- fsimage:元数据镜像文件(保存文件系统的目录树)。
- edits:元数据操作日志(针对目录树的修改操作)被写入共享存储系统中,比如NFS、JournalNode,内存中保存一份最新的元数据镜像(fsimage+edits)。
四.HDFS守护进程
写在最后
今天的文章就到这里,如果你觉得写的不错,可以动动小手给博主一个免费的关注和点赞👍;如果你觉得存在问题的话,欢迎在下方评论区指出和讨论。
谢谢观看,你的支持就是我前进的动力!