c++builder图书系统_HDFS!一家分布式图书馆...

61daa765d618a4f53556d793b3edc8ac.png
导语

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

1、借书 像hdfs读取文件

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

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

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

be00f8ac4ab81c646e2e43f6266269c2.png
  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.

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

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

810fc7b5531a3dd892c0f694ba4e1b3a.png

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

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

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

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

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

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

3、假如namenode数据丢失怎么办,secondnamenode来帮忙:

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

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

370eae9ad7fc2a9adde311df4d190d99.png

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

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

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

hdfs采纳了日志与镜像的优点:开机时通过FsImage做镜像+通过EdisLog记录增量的文件,此过程就是由secondnamenode来做的,定时将FsImage做镜像+通过EdisLog记录增量生成新的FsImage镜像,定时传给namenode,便于namenode定时恢复(期间省略了新镜像合并过程).

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

喵先生满意的点了点头。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值