Hadoop核心——HDFS
HDFS的架构
HDFS是一个主/从(Master/Slave)体系结构。
HDFS由四部分组成:HDFS Client ,NameNode ,DataNode 和 Secondary NameNode。
1.Client:就是客户端
- 文件切分、文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行存储。
- 与NameNode交互,获取文件的位置信息。
- 与DataNode交互,读取或者写入数据。
- Client提供一些命令来管理和访问HDFS,比如启动或者关闭HDFS。
2.NameNode: 就是master,他是一个主管,管理者
- 管理HDFS的名称空间
- 管理数据块(Block)映射信息
- 配置副本策略
- 处理客户端读写请求
3.DataNode: 就是Slave, NameNode下达命令,DataNode执行实际的操作。
- 存储实际的数据块
- 执行数据块的读/写操作
4.Secondary NameNode:并非NameNode的热备,当NameNode挂掉的时候,他并不能马上替换NameNode并提供服务
- 辅助NameNode,分担其工作量
- 定期合并fsimage和fsedits,并推送给NameNode
- 在紧急情况下,可辅助恢复NameNode(NameNode挂掉的时候,Secondary NameNode就失去了存在的意义)
NameNode和DataNode作用
- NameNode:
1.NameNode元数据信息:路径、时间、大小、权限、块列表
2.NameNode文件操作:NameNode负责文件元数据的操作。DataNode负责处理文件内容的读写请求。数据流不经过NameNode,会询问他跟哪个DataNode联系
3.NmeNode副本:文件数据块到底存放到哪些DataNode上,是由NameNode决定的。NameNode根据全局情况做出放置副本的决定
4.NameNode心跳机制: 全权管理数据块的复制,周期性地接受心跳和块的状态报告信息(包含该DataNode上所有数据块的列表)。若接受心跳信息,NameNode认为DataNode工作正常。如果在十分钟后还接受不到DataNode的心跳,那么NameNode认为DataNode已经宕机。这时候NameNode准备要把DataNode上的数据块进行重新的复制。块的状态报告包含了一个DataNode上所有数据块的列表,biock report每隔一小时发送一次
- DataNode:
提供真实文件数据的存储服务:
1.DataNode以数据块的形式存储HDFS文件
2.DataNode响应HDFS客户端读写请求
3.DataNode周期性向NameNode汇报心跳信息
4.DataNode周期性向NameNode汇报数据块信息
5.DataNode周期性向NameNode汇报缓存数据块信息
HDFS的文件副本机制与机架感知
文件副本机制:
副本配置查看命令:
[root@Slave1 hadoop]vim hdfs-site.xml
- 所有文件都是以block块(默认大小为128M)的方式存放在HDFS文件系统当中,作用如下:
1.一个文件有可能大于集群中任意一个磁盘,引入块机制,可以很好的解决这个问题
2.使用块作为文件存储的逻辑单位,可以简化存储子系统
3.块非常适合用于数据备份进而提供数据容错能力
机架感知:
- HDFS系统内部的副本存放策略
第一个副本,在客户端所在机架中挑选一个节点(如果客户端是集群外的一台机器,就随机选节点,但是系统会避免挑选太满或者太忙的节点)
第二个副本,放在与第一个副本同机架但是不同节点上。
第三个副本,放在不同机架(随机选择)的节点上。
- 副本1与副本2在同一机架里,可以保证当副本1宕机时,系统可以更加快速的读取到副本2的数据;副本3在其他机架里,以确保当副本1,2所在机架的机子全部宕机时,系统还可以读取到副本3的数据。
资料来源:https://www.bilibili.com/video/BV1154y1U73k?p=5