内容简介:分布式文件存储随着数据量的不断增大,文件的大小取决于单机存储的上限,这显然满足不了我们的需求。HDFS将大文件切块,部署到不同的机器节点上,完成分布式存储。
分布式文件存储
随着数据量的不断增大,文件的大小取决于单机存储的上限,这显然满足不了我们的需求。HDFS将大文件切块,部署到不同的机器节点上,完成分布式存储。
在分布式系统中,计算机节点放在机架上,每个机架存在很多节点,不同机架之间通过交换机通信,同一机架不同节点之间通过网络互连。
远程调用:远程过程调用(RPC)是一种常用的分布式网络通信协议,它允许运行于 一台计算机的程序调用另一台计算机的子程序,同时将网络的通信细节隐藏起来, 使得用户无须额外地为这个交互作用编程。分布式系统之间的通信大都通过RPC实现。
二、HDFS结构
- 名称节点(NameNode) 主节点(Master)
- 数据节点 (DataNode) 从节点(Slave)
名称节点负责文件和目录的创建、删除和重命名等,同时管理数据节点与文件块的映射关系;数据节点负责数据的存储和读取。
客户端读数据会先访问名称节点,获取数据块对应数据节点的位置,进而读取数据,写入数据也会由名称节点分配存储位置,再向对应数据节点写入数据。
1. 名称节点
名称节点的两个核心数据结构:
-
FsImage
FsImage用于维护文件系统树以及文件树中所有的文件和文件夹的元数据
元数据信息包括文件的复制等级、修改和访问时间、访问权限、块大小以及组成文件的块
注:FsImage文件没有记录块存储在哪个节点,数据块和节点映射信息保存在NameNode的内存中。
-
EditLog
记录对所有文件创建、删除、重命名等操作。
SecondaryNameNode
-
secondDaryNameNode会定期与NameNode通信,暂停EditLog,创建新的EditNew,瞬间完成 。
-
FsImage和EditLog会不断增大,secondDaryNameNode可以解决这个问题,它会定期拉取这两个文件,进行一个合并过程,通过执行EditLog文件,得到最新的FsImage,推送到NameNode, 代替原有的FsImage,同时使用editNew代替原有EditLog文件。
-
secondDaryNameNode 还可以作为冷备份,在NameNode宕机后使用它进行恢复
2. 数据节点
HdFS按块存储,每个块默认大小是128M,远远大于普通文件系统,这样做的目的是为了最小化寻址开销。
2.1 文件系统存储原理
文件存储在磁盘上,磁盘读取数据靠的是机械运动。
- 当需要从磁盘读取数据时,系统会将数据逻辑地址传给磁盘,磁盘的控制电路按照寻址逻辑将逻辑地址翻译成物理地址,即确定要读的数据在哪个磁道,哪个扇区。为了读取这个扇区的数据,需要将磁头放到这个扇区上方,
- 为了实现这一点,磁头需要移动对准相应磁道,这个过程叫做寻道,所耗费时间叫做寻道时间,然后磁盘旋转将目标扇区旋转到磁头下,这个过程耗费的时间叫做旋转时间。
- 最后是对读取数据的传输。
所以每次读取数据花费的时间可以分为 寻道时间、旋转延迟、传输时间 三个部分
HDFS读取文件的时间就可以分为寻址时间和数据传输时间,如果文件太小,在名称节点的映射列表会过大,影响寻址时间,寻址时间如果大于传输时间,就没有意义了。所以设置成大文件。
如果Block设置过大,在MapReduce任务中,Map或者Reduce任务的个数小于集群机器数量,会使得作业运行效率很低。
2.2 数据冗余
HDFS采取多副本进行数据冗余,一个数据块默认冗余三个副本,其中一个副本放到不同机架上,其它两个副本放在同一个机架不同节点上。
如图,数据块1被分别存放到数据节点A和C上,数据块2被存放在数据节点A和B上
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Learning PHP 5
David Sklar / O'Reilly / July, 2004 / $29.95
Learning PHP 5 is the ideal tutorial for graphic designers, bloggers, and other web crafters who want a thorough but non-intimidating way to understand the code that makes web sites dynamic. The book ......一起来看看 《Learning PHP 5》 这本书的介绍吧!