HDFS(分布式文件系统)

Block(数据块):

  1. HDFS上面基本默认的基本存储单位,大小一般为128M
  2. 一个大的文件会被拆分成一个个的数据块,然后存储在不同的机器。若小于block的大小,则实际占用的空间为其文件的大小
  3. 基本的读写单位,每次读的都是一个块,每个块都会被复制到多台机器

HDFS采用的是master/slave 架构。一个HDFS集群是由一个NameNode和多个DataNode构成。

NameNode(元数据节点)和DataNode(数据节点):
NameNode是集群的中心服务器,负责管理集群,以及存储元数据,DataNode就是真正存储数据的节点。
NameNode作为集群的中心服务器,主要存储两个东西:

  1. 所有数据的命名空间(Namespace Image),包括文件名,副本数,文件路径等
  2. 用户对数据的操作日志(edit log)
    DataNode会以数据块的形式存储数据。负责处理Client的读写数据的请求,并周期性发送心跳信号和块状态报告到NameNode。DataNode之间也会进行通信,复制数据块,保证数据的冗余性
HDFS(分布式文件系统)_第1张图片
4190914-482bdf7b058b8c1c.png

NameNode的单点问题:
Namenode是整个分布式文件系统的一个单点故障,一旦故障,整个分布式文件系统就无法使用了,因为无法从blocks中重构出相应的文件了。所以确保Namenode能从失败中及时恢复是很重要的一件事。

一般应对的方法有两种:

  1. 备份NameNode中保存的永久信息
    保存多份数据,最常用的做法是把永久信息保存到本地文件系统和某个远程NFS上去。这些多写操作是同步和原子性的,因为NameNode上都是源数据,写少读多,每次保存的量比较小,消耗一些写的性能,来保证集群的健壮,还是值得的。
  2. 运行一个Secondary NameNode
    它最主要的工作就是把namespace image检查点文件与edit log相融合(以防止edit log过大)并把融合后的namespace image保存在自己的本地文件系统上,同时发送这个新的备份给namenode。
    由于secondary namenode上保存的状态信息总是要滞后于namenode上的状态信息的缘故(未融合的edit log记录了这一部分改变),如果namenode完全失败,数据肯定要丢失一部分。
    最保险最常用的方式,是把上述两种方法结合起来,也即当namenode故障时,把远端NFS上的namespace image拷贝到secondary namenode上,然后把secondary namenode当做namenode来运行。

DataNode的数据存储和读取:

  1. 写入数据:


    HDFS(分布式文件系统)_第2张图片
    4190914-3c29b45ea3f3c31a.png
  2. 读取数据:


    HDFS(分布式文件系统)_第3张图片
    4190914-5e7e9202d5819b72.png

你可能感兴趣的:(HDFS(分布式文件系统))