HDFS

作者: 懒猫随笔 | 来源:发表于2020-07-17 18:12 被阅读0次

介绍

image.png

HDFS,它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。主要由四部分组成:

  1. Client:就是客户端。
  2. NameNode:就是Master,它是一个主管、管理者。
  3. DataNode:就是Slave。NameNode下达命令,DataNode执行实际的操作
  4. SecondaryNameNode:并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务。

block

HDFS中的文件在物理上是分块存储(block),块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在hadoop2.x版本中是128M,老版本中是64M。
假如存一个200M的文件,这个文件会拆成两部分:dataNode1(128M)和dataNode2(74M)
读写一个block的时候,要先寻址,然后进行数据传输,一般要求寻址时间占数据传输1%的比例,一般磁盘传输速度为100m/s,这样数据读写耗时1s,一个块在100M左右是合适的。
由于服务器就很容易出现故障,比如CPU,IO内存等等都可能会产生问题,所以block一般会存个副本,默认的副本数为3

<!--hdfs-site.xml>
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
</configuration>

NameNode

metaData

元数据信息以命名空间镜像文件(fsimage)和编辑日志(edits log)的方式保存,两者的作用分别是:

  • fsimage:元数据镜像文件,保存了文件系统目录树信息以及文件和块的对应关系;
  • edits log:日志文件,保存了文件的更改记录。
    Hadoop的NameNode要应对高并发,HDFS系统会收到很多文件的操作,要应对高并发场景,因此引入了日志的双缓冲机制。双缓冲机制就是指我们将会开辟两份一模一样的内存空间,一个为bufCurrent,另一个叫syncBuffer。产生的数据会直接写入bufCurrent,再在bufCurent写入的时候两片内存会发生交换,然后之前的bufCurrent就负责往磁盘上写入数据,之前的syncBuffer就继续接收客户端写入的数据。其实就是将向磁盘写数据的任务交给了后台去做。

secondary namenode

  1. 备份NameNode中的元数据
  2. 提高NameNode重启速度
  3. 必要的时候作为新的NameNode

当集群启动的时候,会记录下启动的时间,而随着一段时间过去后或者NameNode中的edits log文件存满后就会触发checkPoint操作,nameNode会把fsimage和edits log发给secondary namenode,secondary namenode中合并完成之后,再回传给NameNode。
NameNode节点挂掉重启后,它会把内存中的镜像文件fsimage读到内存当中,然后通过edits log所记录的所有操作重新执行一遍,把所有的元数据都恢复之后,才能回到关机之前的状态,这个过程十分缓慢。但是有了secondary namenode之后,通过它提供的fsimage.ckpt可以恢复很大一部分的元数据信息,再直接通过执行edits log中所记录下来的,从edits new中合并过来的新操作,就可以进行恢复。
而在NameNode确定无法重启之后,SecondaryNameNode就可以通过以下命令作为新的NameNode对外提供服务

hadoop-daemon.sh start namenode

但是这种方式非常地不优雅,因为在NameNode进行重启或者SecondaryNameNode进行上位的时间段中我们的集群肯定都会有一段空白期。

fsimage和Edits

namenode被格式化之后,将在/hadoop-2.7.2/data/tmp/dfs/name/current目录中产生如下文件

fsimage_0000000000000000000
fsimage_0000000000000000000.md5
seen_txid
VERSION
  • Fsimage文件:HDFS文件系统元数据的一个永久性的检查点,其中包含HDFS文件系统的所有目录和文件的序列化信息。
  • Edits文件:存放HDFS文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先会被记录到edits文件中。
  • seen_txid文件保存的是一个数字,就是最后一个edits_的数字

每次NameNode启动的时候都会将fsimage文件读入内存,并edits里面的更新操作,保证内存中的元数据信
息是最新的、同步的,可以看成NameNode启动的时候就将fsimage和edits文件进行了合并。

相关文章

网友评论

      本文标题:HDFS

      本文链接:https://www.haomeiwen.com/subject/rrjghktx.html