博客 HDFS架构演进和HDFS源码图解剖析

HDFS架构演进和HDFS源码图解剖析

   数栈君   发表于 2023-06-02 16:10  689  0

Hadoop简介

Hadoop到目前为止发展已经有10余年,版本经过了无数次的更新迭代,目前业内大家把Hadoop大的 版本分为Hadoop1,hadoop2,Hadoop3三个版本。


Hadoop1简介

Hadoop1版本刚出来的时候是为了解决两个问题:一个是海量数据如何存储的问题,一个是海量数据 如何计算的问题。Hadoop1的核心设计就是HDFS和Mapreduce。HDFS解决了海量数据如何存储的问题,Mapreduce解决了海量数据如何计算的问题。

HDFS的全称:Hadoop Distributed File System

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/ef003dc98e08e9e1c5bc1b7812c43341..jpg

HDFS的重要性及书籍推荐


http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/22ed12a9c86a703d68dfa6c48c893504..jpg


HDFS的架构演进之路


分布式文件系统

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/b3c3a6660ddfa8fa971a72a59c73c3d9..jpg


HDFS1的架构

HDFS1是一个主从式的架构,主节点只有一个叫NameNode。从节点有多个叫DataNode。

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/44d2082b4ef7b648d163470ba7a33eac..jpg

NameNode

  • 管理元数据信息(文件目录树):文件与Block块,Block块与DataNode主机的关系

  • NameNode为了快速响应用户的操作请求,所以把元数据加载到了内存里面

DataNode

  • 存储数据,把上传的数据划分成为固定大小的文件块(Hadoop1,默认是64M)

  • 为了保证数据安全,每个文件块默认都有三个副本


http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/31f2b668d4cf90e97b3aec66539d2d36..jpg


HDFS1的架构缺陷

1.单点故障问题

2.内存受限问题


单点故障问题解决方案

HA方案(High Available)

解决HDFS1 Namenode单点故障问题


http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/bcb0f2935ec6bdf042b905dfb1247171..jpg


http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/94f0af1b3a159ab51304534c875b29af..jpg

内存受限解决方案

联邦方案

解决了HDFS1 内存受限问题



http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/cf7e199b20624bd92aea6334a826a8ca..jpg


http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/b05d52d5b31c6955b3bf86a2d18e407d..jpg

HDFS3

HA方案支持多个Namenode

引入纠删码技术


HDFS支持亿级流量的秘密

因为NameNode管理了元数据,用户所有的操作请求都要操作NameNode,大一点的平台一天需要运行几十万,上百万的任务。一个任务就会有很多个请求,这些所有的请求都打到NameNode这儿(更新目录树),对于NameNode来说这就是亿级的流量,NameNode是如何支撑亿级流量的呢?


1.HDFS如何管理元数据?

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/dcf80b308eb6878ddb01ceec33847224..jpg


2.分段加锁和双缓冲方案


http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/6ef6a37a65e4951b6f753714c81c8afd..jpg


HDFS的源码

掌握其网络通信架构

hadoop:

Hadoop RPC


Spark:

1. 1.5 版本以前 akka 通信框架

2. 1.6 Netty


Flink:

akka -> netty

 netty


kafka:

 JDK socket NIO


Hadoop RPC

RPC是远程(不同进程)过程(方法的)调用(Remote Procedure Call)的缩写形式


总结对Hadoop RPC的认识:

1. RPC指的是不同进程的调用,分为客户端和服务端,并且是客户端调用服务端的方法,方法的执行

在服务端。

2. 如果要想实现hadoop RPC的调用,需要一个协议,说白了协议其实就是一个接口,里面要求必须要有versionID字段

3. 服务端必须要实现协议(接口)

4. 凡是JPS能看到的服务,都是RPC的服务端

5. 如何构建一个Hadoop RPC 编程


HDFS的源码 -> 源码的书 -》一个类一个类

1.集群的启动场景

NameNode的启动场景(RPC服务端,进程,main方法是不是就可以了) DataNode的启动场景

2.写数据的场景

3.读数据的场景

4.元数据的管理(HA,联邦)


NameNode和DataNode启动流程剖析




DataNode初始化


DataNode注册

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/0a8a88e1fb6c9e015d1cd7933410dea3..jpg


http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/8a4ec85ef5d86e6876f4c9ceef56818b..jpg

DataNode心跳

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/57765d39d82123e6958ad19b40df72b2..jpg


1.HDFS目录树管理

2.HDFS元数据双缓存方案深度剖析

3.HDFS元数据写JournalNode流程分析

4.StandbyNameNode Checkpoint原理深度剖析

5.ActiveNameNode FSimage文件更新流程分析


HDFS元数据双缓存机制


http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/0692efcfeb092ad80feddcf3a12b9de8..jpg


http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/5d18bab25f0987b9968b7157cbe70322..jpg



写数据流程-上传文件源码分析



http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/58e49fef2402245a0976e69bfb2c0291..jpg


http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/fbee8a9539b468cb4313c830e5e3234b..jpg


元数据管理

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/fd530350aeb712637cd4ab862bc7fe67..jpg

元数据管理源码剖析

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/15f2d6c0b7098f0984a7d4e04cf403ed..jpg


HDFS心跳流程


http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/0bd39a88ad5e279a07233d35714de6fa..jpg


HDFS文件契约机制

先引入一个小的背景,假如多个客户端同时要并发的写Hadoop HDFS上的一个文件,这个事儿能成吗?明显不可以接受啊,因为HDFS上的文件是不允许并发写的,比如并发的追加一些数据什么。所以HDFS里有一个机制,叫做文件契约机制

也就是说,同一时间只能有一个客户端获取NameNode上面一个文件的契约,然后才可以向获取契约的文件写 入数据。

此时如果其他客户端尝试获取文件契约的时候,就获取不到,只能干等着。通过这个机制,可以保证同一时间只有一个客户端在写一个文件。

在获取到了文件契约之后,在写文件的过程期间,那个客户端需要开启一个线程,不停的发送请求给NameNode进行文件续约,告诉NameNode:

NameNode大哥,我还在写文件啊,你给我一直保留那个契约好吗?

而NameNode内部有一个专门的后台线程,负责监控各个契约的续约时间。

如果某个契约很长时间没续约了,此时就自动过期掉这个契约,让别的客户端来写。


文件契约机制源码流程:

1.创建文件

2.创建契约

3.启动了DataStramer线程

4.开启了续约

5.契约的检查

6.创建packet

7.申请Block

8.建立数据管道

9.ResponseProcessor线程

10.PacketResponder线程

免责申明:

本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!

《数据治理行业实践白皮书》下载地址:https://fs80.cn/4w2atu

《数栈V6.0产品白皮书》下载地址:
https://fs80.cn/cw0iw1

想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:
https://www.dtstack.com/?src=bbs

同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:
https://github.com/DTStack

0条评论
社区公告
  • 大数据领域最专业的产品&技术交流社区,专注于探讨与分享大数据领域有趣又火热的信息,专业又专注的数据人园地

最新活动更多
微信扫码获取数字化转型资料
钉钉扫码加入技术交流群