vlambda博客
学习文章列表

HDFS!一家分布式图书馆...


导语

小白和喵先生觉得今天天气不错去了一家图书馆,路上小白问喵先生什么是hdfs,喵先生说hdfs又称分布式文件系统,它运作原理就像图书馆运作原理一样,你听我慢慢道来:

目录

  1. 借书像hdfs读文件
  2. 新增图书像hdfs写文件
  3. SecondNameNode 帮 NameNode备份元数据


1、借书 像hdfs读文件

喵先生对小白说:“咱们去图书馆借书,肯定是4个步骤”

  1. 我们先到引导台检索图书在哪。
  2. 引导台会告诉书在哪个书架。
  3. 走到相应的书架上找到要借阅的书。
  4. 带着书在引导台处登记下,离开。

翻译过来就是以下的流程:


  1. 我们指hdfs client 用来连接hdfs的客户端、引导台指namenode 用来存储数据的信息以及所在路径,例如:book /home/foo/data 3**

  2. 此时当我们知道书架位置后是我们直接与书架打交道,所以这里的引导台(namenode)类似于负载的作用

  3. 书架指datanode,用来存放真实数据的地方,由于书可以在书架上存放多个副本,所以这里的数据也一样会备份多个放在多个datanode上,存储的格式是像以block(文件)形式存放 /home/foo/data/file1, /home/foo/data/file2...以及用于校验数据的本身md5值(用于校验后文件是否损坏的一种方式)。

4.当书被借走后,由于datanode与namenode保持着心跳,所以将书被借走的信息同步给namenode让其更新下元数据

小白点点头:"太形象啦"

2、新增图书 像hdfs写文件

突然就在他们要走出图书馆的时候,发现这时图书管理员拿了一堆新书——《数据测试之路》准备上架

喵先生打趣的跟小白说:”嘿嘿,录入图书的过程就像hdfs的写入一样,3步走:

  1. 引导台处查询是否有 重复的数据,没有则进行上架
  2. 为了安全考虑,管理员将书第1本放到了当前最近位置,然后副本分别放到了其他书架
  3. 最后管理员将这堆《数据测试之路》分别放置到不同的书架上,这个过程运用了一种 类似并行处理的方式

翻译过来就是以下流程:

  1. 管理员指hdfs client,首先在namenode上查询有没有这个数据的记录,没有则记录元数据。

  2. namenode根据一个hdfs放置策略,决定每个副本放到哪个datanode上,策略是:第1个副本肯定是放在跟hdfs clint所在同一个机架M1上一台服务器A,第2个副本会放到机架M2上一台服务器上B,第3个副本放到同一个机架M2的C.

HDFS!一家分布式图书馆...


  1. 管理员(hdfs clint)只与第一个服务器A建立tcp连接,A与B建立tcp连接,B与C建立tcp连接,A\B\C之间的连接就叫pipeline,同时hdfs clint将block(文件)切割成更小的单位packet,假设共需要备份5个packet传输, 且服务器之间传输1个packet耗时1毫秒,最终目标是需5个packet都备份到ABC服务器上:

通过这种pipeline类似并行处理方式:

HDFS!一家分布式图书馆...
这里写图片描述


第1个packet传递过程:当hdfs clint将packet(p0)传输给A时,A接收(p0),B等待传输,C等待传输,耗时1毫秒

第2个packet传递过程:当hdfs clint将packet(p1)传输给A时,A接收(p1)同时会传输p0给B,C等待传输,耗时1毫秒

第3个packet传递过程:当hdfs clint将packet(p2)传输给A时,A接收(p2)的同时会传输p1给B,B接收(p1)的同时会传输p0给CC接收p0,耗时1毫秒

第4个packet传递过程:当hdfs clint将packet(p3)传输给A时,A接收(p3)的同时会传输p2给B,B接收(p2)的同时会传输p1给C,C接收p1,耗时1毫秒

第5个packet传递过程:当hdfs clint将packet(p4)传输给A时,A接收(p4)的同时会传输p3给B,B接收(p3)的同时会传输p2给C,C接收p2,耗时1毫秒

最后,C接收p3/p4,耗时2毫秒

最终同步5个packet共耗时7毫秒,所以能看到这种pipeline像管道流水一样,能加快备份

3、SecondNameNode帮 NameNode备份元数据

小白听了后,略有所思说到:"namenode太重要了,负责映射真实数据与文件,万一它那天宕机了咋办呢。"

喵先生先是一愣,赶紧说到:“好问题,目前有2种方法用于恢复数据,


第一种通过记录日志文件,好处是:完整性好,什么操作都会被记录下来;缺点是:服务器运行越久日志数据越大,这样恢复也慢”

HDFS!一家分布式图书馆...


第二种通过镜像或快照,好处是:通过基于某个时间点做数据的同步,恢复时间特别快;

HDFS!一家分布式图书馆...


缺点是:IO消耗高并且同步伴随着时间间隔,可能会丢数据


hdfs采纳了日志与镜像的优点:

开机时通过FsImage做镜像+通过EdisLog记录增量的文件,此过程就是由secondnamenode来做的,定时将FsImage做镜像+通过EdisLog记录增量生成新的FsImage镜像,定时传给namenode,便于namenode定时恢复.

小白听了总结道:“secondname就是用来帮namenode做备份的呗,便于namenode数据丢失后快速恢复”

喵先生满意的点了点头。


回复 【hive】:即可获得Hive编程指南资料,让你轻松掌握它

回复【面试】:即可获取大数据测试相关的面试题,大厂的橄榄枝正向你招手