概述
--内容来自厦门大学林子雨教授的《大数据技术原理》课程,作为学习笔记。
- 分布式文件系统是大数据时代解决大规模数据存储问题的有效解决方案,HDFS开源实现了谷歌GFS,可以利用由廉价硬件构成的计算机集群实现海量数据的分布式存储;
- HDFS具有兼容廉价的硬件设备、流数据读写、大数据集、简单的文件模型、强大的跨平台兼容性等特点。缺点:不适合低延迟数据访问,无法高效存储大量小文件、不支持多用户写入,以及任意修改文件等;
- 块是HDFS核心的概念,一个大的文件会被拆分成很多个块。HDFS采用抽象的块概念,具有支持大规模文件存储,简化系统设计,适合数据备份等特点;
- HDFS采用了主从(Master/Slave)结构模型,一个HDFS集群包括一个名称节点和若干个数据节点。名称节点负责管理分布式文件系统的命名空间;数据节点是分布式文件系统HDFS的工作节点,负责数据的存储和读取;
- HDFS采用了冗余数据存储,增强了数据可靠性,加快了数据传输速度。HDFS还采用了相同的数据存放、数据读取和数据复制策略,来提升系统整体读写响应性能。HDFS把硬件出错看作一种常态,设计了错误恢复机制;
- 3.1分布式文件系统
- 3.2HDFS简介
- 3.3HDFS相关概念
- 3.4HDFS体系结构
- 3.5HDFS存储原理
- 3.6HDFS数据读写过程
3.1.1 分布式文件系统把文件分布存储到多个计算机节点上,成千上万的计算机节点构成计算机集群;
与之前使用多个处理器和专用高级硬件的并行化处理装置不同的是,目前的分布式文件系统所采用的计算机集群,都是由普通硬件构成,这就大大降低了硬件上的开销;
3.1.2分布式文件系统在物理机构上是由计算机集群中的多个节点构成的,这些节点分为两类:“主节点”(Name Node),“从节点”(DataNode)
3.2HDFS要实现的目标
- 兼容廉价的硬件设备
- 流数据读写
- 大数据集
- 简单的文件模型
- 强大的跨平台兼容性
HDFS特殊的设计,在实现以上特性的同时也使得自身具有一些局限性:
- 不适合低延迟数据访问
- 无法高效存储大量小文件
- 不支持多用户写入和任意修改文件
3.3.1 块
HDFS默认一个块128MB,一个文件被分为多个块,块作为存储单位,块的大小远大于普通文件系统,可以最小化寻址开销
HDFS采用抽象的块概念可以带来以下几个明显的好处:
- 支持大规模文件存储:文件以块为单位存储,一个大文件可以被拆分成若干个文件块,不同的文件块可以被分发到不同的节点上,因此,一个文件的大小不会受到单个接待你的存储容量的限制,可以远大于网络中任意接待你的存储容量;
- 简化系统设计:首先,大大简化了存储管理,因为文件块大小是固定的,这样就可以很容易计算出一个节点可以存储多少文件块;其次,方便了元数据的管理,元数据不需要和文件块一起存储,可以由其他系统负责管理元数据;
- 适合数据备份:每个文件块都可以冗余存储到多个节点上,大大提高了系统的容错性和可用性;
- 3.3.2 名称节点和数据节点
NameNode | DataNode |
存储元数据 | 存储文件内容 |
元数据保存在内存中 | 文件内容保存在磁盘中 |
保存文件,block,datanode之间的映射关系 | 维护了block id到datanode本地文件的映射关系 |
名称节点的数据结构:
在HDFS中,名称节点负责管理分布式文件系统的命名空间,保存了两个核心的数据结构:FsImage和EditLog
- FsImage用于维护文件系统树以及文件树中所有的文件和文件夹的元数据;FsImage文件包含文件系统中所有文件夹和文件inode的序列化形式。每个inode是一个文件或目录的元数据的内部表示,并包含此类信息:文件的复制等级,修改和访问时间、访问权限、块大小以及组成文件的块。对于文件夹,则存储修改时间、权限和配额元数据。文件没有记录块存储在那个数据节点,而是由名称节点把这些映射保存在内存中,当数据节点加入HDFS集群时,数据节点会把自己所包含的快列表告知给名称节点,此后会定期执行这种告知操作,以确保名称节点的块映射是最新的。
- EditLog中记录了所有针对文件的创建、删除、重命名等操作;
名称节点记录了每个文件中各个块所在的数据节点的位置信息。
名称节点的启动
在名称节点启动的时候,它会将FsImage文件中的内容加载到内存中,之后再执行EditLog文件中的各项操作,是的内存中的元数据和实际的同步,存在内存中的元数据客户端的读操作。
一旦再内存中成功简历文件系统元数据的映射,则创建一个新的FsImage文件和一个空的EditLog文件。
名称节点起来后,HDFS中的更新操作会重新写道EditLog文件中,因为FsImage文件一般都很大(GB级别),如果所有的更新操作都写在FsImage中,会导致系统运行十分缓慢,但是,如果写道EditLog文件中就不会这样,因为EditLog要小的多。每次执行写操作周,且在向客户端发送成功代码前,edits文件都需要同步更新。
最后
以上就是矮小芒果为你收集整理的分布式文件系统HDFS的结构及运行的全部内容,希望文章能够帮你解决分布式文件系统HDFS的结构及运行所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复