HDFS架构

HDFS架构

HDFS(Hadoop Distributed File System)是建立在一组分布式服务器节点上的本地文件系统之上的分布式文件系统。HDFS采用的是经典的主-从式结构。

  • 一个HDFS文件系统包括一个主控节点NameNode和一组DataNode从节点。此外,还会又HDFS客户端以及Secondary NameNode等组成。也就是说一个HDFS主要由四个部分组成,分别是HDFS Client, NameNode, DataNode和Secondary NameNode。HDFS基本组成结构图如下图所示:
    HDFS架构_第1张图片
  • 1.Client
    (1) 文件切分。Client讲上传的文件切分成一个一个的Block,可以提高硬盘的效率,同时Block作为该文件系统中数据的读写单位。数据块的信息对于用户来说是透明的,HDFS默认的数据块大小是64MB,实际部署中默认会被设置为128M甚至更多。
    (2) 与NameNode和DataNode交互,前者用于获取文件的位置,后者用于读取和写入数据
    (3)通过指令来管理HDFS
  • 2.NameNode
    (1) 管理HDFS的命名空间和元数据:命名空间是指整个HDFS目录结构
    (2) 管理数据块映射信息
    (3)处理客户端的读写请求
    NameNode中保存了文件系统的三种元数据:命名空间,数据块与文件名的映射表,每个数据块副本的位置信息(每个数据块默认3个副本)
  • 3.DataNode
    (1) 存储实际的Block
    (2)执行数据块的读、写操作
  • 4.Secondary NameNoda
    (1)Secondary 并不是NameNode的热备,只是辅助操作,NameNode中的元数据都是存储在内存中的,有时需要对元数据进行更新操作,任务量巨大,Sencondary就可以帮助namemnode减轻一些压力。NameNode挂掉之后,Secondary NameNode也就没有了存在的意义了。
    (2)定期配合fsimages 和 fsedits,推送给NameNode
    (3)紧急情况下可以帮助辅助NameNode

HDFS架构_第2张图片

  • Note:
  • 由于NameNode的元数据信息是保存在内存中的,因此需要对数据进行持久化管理,分别使用了fsimage和edits两个文件来实现持久化。
  • fsimage 存储元数据的镜像文件;eidts存储记录最近一段时间对元数据的操作的日志文件。
  • 注意:fsimage镜像并不是和内存完全同步的,也就是镜像数据不是最新的。例如:NameNode在12点这一时刻重启了,而此时fsimage中并没有备份12点这一时刻的数据信息,但是eidts文件中保存了最近一段时间的操作日志信息,可以通过edits日志文件记录12点之前的一段时间的操作信息,两者协作才是某一时刻最新的元数据信息。
    问题当NameNode长时间没有重启,edits文件记录的日志操作会越来越多,占用的空间越来越大,怎么处理?
  • 在实际应用中,Sercondaru NameNode是装在另外一台主机上,针对上述这一情况,会每隔一段时间将NameNode主机中的fsimage和edits文件拷贝过来。触发条件为:
    (1)根据时间触发,一小时拷贝一次。
    (2)根据文件大小 > 64M时拷贝一次
    会将这两个文件合并成一个新的fsimage文件,之后将原来的NameNode中的日志文件edits进行清空,最后将合并的fsimage替换NameNode中的fsimage文件。
  • Secondary NameNode
    1.提前完成了NameNode的重启时需要完成的工作。
    2.大大提高了NameNode的重启效率。
    3.避免了edits日志文件过大。

fsimage 和 edits 文件的路径配置文件是在 hfds-site.xml文件中进行配置。

你可能感兴趣的:(Hadoop,java,大数据,hadoop,hdfs)