Hadoop 的组成
- HDFS
管理者:namenode
工作者:DataNode
辅助管理者:secondaryNameNode - MapReduce
- YARN
管理者:ResourceManage
工作者:NodeManage
HDFS 分布式存储工作机制
HDFS是一个文件存存储系统,他的meta信息以及目录结构是存储在NameNode中的,文件是以block的形式存储在DataNode中,通过与NameNode交互,可以实现读写的操作
读操作
- 客户端会先带着读取路径向NameNode发送读取请求
- NameNode接收到请求后,会先判断是否有权限,读取文件是否存在等等,如果都无误则将文件所在的DataNode的节点位置,发送给客户端部分或者全部的DataNode的节点位置
- 客户端得到文件块存储的位置后,会调用read()方法,去读取数据
- 在读取之前会先进行一个checksum的操作,去判断一下校验和是否正确,正确则读,不正确则去下一个存放该block块的DataNode节点上读取
- 读取完NameNode这次发送过来的所有的block块后,会再去询问是否还有block块,如果有则接着读取,如果没有则调用close方法,将读取到的文件合并成一个大文件
写操作
- 客户端会带着文件路径向NameNode发送写入请求
- NameNode会去判断是否有权限,写入路径的父级目录是否存在,如都无误则发送可以写入的请求返回给客户端
- 客户端会将文件进行切分,然后上传block
- NameNode会根据DataNode的存储空间还有机架感知原理等返回该block块将要存储的DataNode的位置 ABC
- 客户端会去ABC三个DataNode节点上建立pipeline A-B B-C然后C建立完成后会将结果返回给B B返回给A A返回给客户端
- 开始往A写入 依次进行流水线的复制
- 写入完后再去依次写入其他block块
- 都写入完成后会将写入完成的信息返回给NameNode
- NameNode存储该文件的各个block块的元数据信息
Hadoop HA的架构原理
- 在两个节点上都安装一个NameNode
- 每个NameNode所在的节点中都有一个监控器
- 监控器会监控NameNode的状态,并在zk中注册节点
- 两个NameNode谁先在zk中注册成功则谁就是active状态,剩下的那个则是standby
- 如果active节点挂掉了,监控器则将zk中注册的节点注销掉
- standby中的监控器一旦检测到zk中的节点消失,则立即注册并通知standby状态的NameNode开始工作,standby会先去远程执行kill -9 activeNameNode节点的端口 杀死他后 开始切换到active状态开始工作
- activeNameNode和standbyNameNode是使用JN进行做主从复制的
YARN的资源调度工作机制
- 客户端向RM提交作业
- RM会去NM中开启一个container容器用来运行AM
- AM会向RM注册自己
- AM向RM申请响应数量的Container用来运行task任务
- Container会先进行一个初始化的工作,初始化完成AM会通知对应的NM开启container
- NM开启container
- container在运行期间会向AM汇报自己的进度,状态等信息,并与AM保持心跳
- 等待应用执行完毕,AM向RM注销自己,并允许RM收回资源