这是我参与【第四届青训营】笔记创作的第1天。
1.HDFS组件
1)从某台机器访问HDFS,这台机器就是client,命令行就是client
2)NameNode:中枢节点,三大件最为复杂的,元数据管理
3)DataNode:所有用户的数据持久化存储在DataNode硬盘上。
接下来具体介绍三大组件的具体作用如下:
1、NameNode(nn):就是Master,它是一个 管理者。
1 )管理 HDFS 的名称空间;
2 )配置副本策略;
3 )管理数据块( Block )映射信息;
4 )处理客户端读写请求。
2、 DataNode :就是 Slave 。 NameNode 下达命 令, DataNode 执行实际的操作。
1 )存储实际的数据块;
2 )执行数据块的读 / 写操作
3、 Client :就是客户端。
1 )文件切分。文件上传 HDFS 的时候, Client 将文件切分成一个一个的 Block ,然后进行上传;
2 )与 NameNode 交互,获取文件的位置信息;
3 )与 DataNode 交互,读取或者写入数据;
4 ) Client 提供一些命令来管理 HDFS ,比如 NameNode 格式化;
5 ) Client 可以通过一些命令来访问 HDFS ,比如对 HDFS 增删查改操作
2.Client写流程
需要和NameNode交互,可以写到哪个节点上,NameNode会在自己的DataNode选择三块返回给他,拿到列表后,客户端和NameNode建立连接,开始传输数据。第三步横跨三个链接,虽然每个块有3个副本,SDK链接的时候是跟第一个DataNode去交互,第一个DataNode再把数据复制到第二个节点,第二个节点再发给第三个节点,叫做pipeline写。
3.Client读流程
先问NameNode块存储在哪些节点上,返回给客户端,客户端选择第一个节点去读,只需要和第一个数据块的进行交互就可以读到内容。
4.源数据节点NameNode
1)维护目录树:维护目录树的增删改查操作,保证所有修改都能持久化,以便机器掉电不会造成数据丢失或不一致。
2)维护文件和数据块的关系:文件被切分成多个块,文件以数据块为单位进行多副本存放,这些块存放在DataNode上,由NameNode来维护
3)维护文件快存放节点信息:通过接受DataNode的心跳汇报信息,维护集群节点的拓扑结构和每个文件块所有副本所在的DataNode等。
4)分配新文件存放节点:client创建新的文件时候,需要由NameNode来确定分配目标DataNode
5.数据节点DataNode
1)数据块存取:DataNode需要高效实现对数据块在硬盘上的存取
2)心跳汇报:把存取在本机的数据块列表发送给NameNode,以便NameNode能维护数据块的位置信息,同时让NameNode确定该节点处于正常存活状态
3)副本复制:
1.数据写入时Pipeline IO操作
2.机器故障时补全副本**。** 小结: