ITPub博客

首页 > 大数据 > Hadoop > hadoop 源码分析HDFS架构演进

hadoop 源码分析HDFS架构演进

Hadoop 作者:mcxiaoracle 时间:2022-09-20 00:05:22 0 删除 编辑
  1. HDFS 如何实现有状态的高可用架构
  1. HDFS 如何解决单机内存受限问题
  1. HDFS 支持亿级流量的密码
  1. SecondaryNameNode 作用

1.1 HDFS 架构演进之路

Hadoop 大版本有三个,Hadoop1、hadoop2、Hadoop3,对应的HDFS 也有三个版本 HDFS1、HDFS2、HDFS3,本文会介绍 三个版本之间的架构区别


Namenode 主要是接收客户端的请求和负责元数据管理,而 Datanode 主要就是负责存储数据。Datanode 中存储的数据都是一个个的块,每个块大小默认 64M


具体使用一个客户端上传数据的示例来说明:

  1. HDFS 会把用户上传的文件切分成很多个 block,默认 每个 block 大小是64M,
  2. 然后把这些 block 存储在不同的 datanode 上,并且为每个 block 生成 3 个副3.

  3. 而每个 block 存在哪个 datanode上以及哪些 block 属于一个文件这些信息都存储在 Namanode 上,这些数据就是元数据

  4. Namanode 为了快速响应用户的请求,还会把这些元数据放到内存中。




1.3 HDFS2 架构-实现有状态的高可用架构

虽然 HDFS1 解决了分布式存储的问题,但是他的设计还是有一些缺陷,比如:

  1. 单点问题:因为 HDFS1 中只有一个 Namenode ,而所有的元数据信息都存储在 Namenode 上,而一旦 Namenode 出现问题,所有的元数据就会丢失,而整个集群也就无法使用了

  1. 内存受限问题:Namenode 为了快速响应用户的请求,会把所有元数据信息放到内存中,随着时间的推移,元数据信息增多,必然会撑爆内存
基于这个两个问题,HDFS2 诞生了,HDFS2 使用  HA  解决单点问题,使用  联邦  解决内存受限问题。



3.1 HDFS 支持的亿级流量具体什么?


这里所属的 支持亿级流量 具体是指客户端的请求,因为 Namenode 管理元数据,所有任务在执行的时候都要请求 Namenode 的元数据,而一旦任务多了这个请求量还是很可观的。



所以 Namenode 必须可以应对 亿级 的元数据请求,为了应对这么大流量的访问所以 Namenode 才把所有的元数据信息都放到内存中了。

但是又为了数据安全,Namenode 又会把 元数据信息放到磁盘上,且为了 HA 元数据还得写到 JournalNode 集群中。




那问题就来了,如果元数据只内存中,当然能够支持亿级的请求,但是又要写磁盘,又要写 JournalNod ,Namenode 如何解决的呢?其实 Namenode 在管理元数据的时候,使用了两个方法来解决此问题:

那就是 双缓冲和 分端加锁



Namenode 在接收客户端的元数据操作请求时,是先把数据写入 内存1中,当 内存1中的数据写到一定程度的时候,把 内存1 与 内存2交换(这里是指针交换,不是内存的copy),然后把交换后的内存刷新到磁盘或者Journalnode中。




3.3 分段加锁

在 Namenode 元数据管理这块,HDFS 使用了多线程去实现的,很多地方加了使用 synchronized 加了锁,但是它并没有对所有代码加锁,而是只对有线程安全问题的地方加锁。






推荐阅读:

https://www.jianshu.com/p/0ff7a26494d9


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69949806/viewspace-2915340/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: hbase 的架构分析
请登录后发表评论 登录
全部评论
数据方向,了解oracle ,IBM DB2 730

注册时间:2019-09-30

  • 博文量
    286
  • 访问量
    226560