Hadoop简介
Hadoop到目前为止发展已经有10余年,版本经过了无数次的更新迭代,目前业内大家把Hadoop大的 版本分为Hadoop1,hadoop2,Hadoop3三个版本。
Hadoop1简介
Hadoop1版本刚出来的时候是为了解决两个问题:一个是海量数据如何存储的问题,一个是海量数据 如何计算的问题。Hadoop1的核心设计就是HDFS和Mapreduce。HDFS解决了海量数据如何存储的问题,Mapreduce解决了海量数据如何计算的问题。
HDFS的全称:Hadoop Distributed File System
HDFS的重要性及书籍推荐
HDFS的架构演进之路
分布式文件系统
HDFS1的架构
HDFS1是一个主从式的架构,主节点只有一个叫NameNode。从节点有多个叫DataNode。
NameNode
管理元数据信息(文件目录树):文件与Block块,Block块与DataNode主机的关系
NameNode为了快速响应用户的操作请求,所以把元数据加载到了内存里面
DataNode
存储数据,把上传的数据划分成为固定大小的文件块(Hadoop1,默认是64M)
为了保证数据安全,每个文件块默认都有三个副本
HDFS1的架构缺陷
1.单点故障问题
2.内存受限问题
单点故障问题解决方案
HA方案(High Available)
解决HDFS1 Namenode单点故障问题
内存受限解决方案
联邦方案
解决了HDFS1 内存受限问题
HDFS3
HA方案支持多个Namenode
引入纠删码技术
HDFS支持亿级流量的秘密
因为NameNode管理了元数据,用户所有的操作请求都要操作NameNode,大一点的平台一天需要运行几十万,上百万的任务。一个任务就会有很多个请求,这些所有的请求都打到NameNode这儿(更新目录树),对于NameNode来说这就是亿级的流量,NameNode是如何支撑亿级流量的呢?
1.HDFS如何管理元数据?
2.分段加锁和双缓冲方案
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注册
DataNode心跳
1.HDFS目录树管理
2.HDFS元数据双缓存方案深度剖析
3.HDFS元数据写JournalNode流程分析
4.StandbyNameNode Checkpoint原理深度剖析
5.ActiveNameNode FSimage文件更新流程分析
HDFS元数据双缓存机制
写数据流程-上传文件源码分析
元数据管理
元数据管理源码剖析
HDFS心跳流程
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