namenode: 管理目录树
维护元数据(路径,块信息,物理存储位置,副本数量)
为客户端提供查询服务
datanode: 管理文件块(帮客户端读写文件块)
心跳机制
hdfs写入流程:
1. Cli向namenode申请写入文件
2.namenode检查元数据,响应Cli可以写入
3.Cli请求写入第一个block
4.namenode向Cli响应写入的datanode位置
5.Cli向第一个datanode请求写入block,请求建立socket连接
第一个datanode向第二个datanode请求
第一个datanode向第二个datanode请求
6.三个datanode响应建立socket连接
7.Cli向第一个datanode写入数据
第一个datanode向第二个datanode写入数据
第一个datanode向第二个datanode写入数据
8.发送完毕,关闭PIPELINE
9.如果文件数据大于128M,重复3-8步
10.整个文件写入完成,向namenode汇报,namenode在写入过程中记录元数据
如果在写入过程中传输失败,namenode会删除元数据
hdfs读取流程:
1.Cli向namenode请求读取文件
2.namenode向Cli响应文件所有block的元数据(块信息,存储路径等)
3.Cli根据元数据去找最近节点的datanode,请求读取第一个block
4.datanode向Cli发送数据
5.重复3-4步读取剩余的block
hdfs存小文件占的元数据太多
一个block的元数据占用150bytes
联邦HDFS
secondarynamenode checkpoint(元数据合并)
1.secondarynamenode每3600s发起一次checkpoint,通知namenode结束当前edits文件编写,启动edits.new
2.secondarynamenode向namenode下载fsimage文件和当前条数后续的edits文件
3.加载fsimage
4.回放日志,更新元数据对象
5.序列化,生成新的fsimage
6.secondarynamenode向namenode上传新的镜像文件
fsimge默认保留2个,edits默认保留10000条
yarn的两个守护进程daemon
node manager:把服务器的资源(内存,CPU)按需求划分容器
resource manager:请求容器
1.客户端向resource manager发送请求,运行一个application master进程
2.resource manager指派一个node manager创建一个容器
3.node manager创建一个容器,运行application master
4.客户端向application master发送shell指令请求运行maptask和reducetask
5.application master向resource manager申请容器
6.resourece manager向node manager指派创建容器
7.application master向容器发送指令执行maptask和reducetask
8.任务执行完毕,容器和application master销毁,客户端退出



