HDFS

2020-07-17  本文已影响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)的方式保存,两者的作用分别是:

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

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

上一篇 下一篇

猜你喜欢

热点阅读