3.1 分布式文件系统
3.1.1 计算机集群结构
3.1.2 分布式文件系统的结构
两类节点:
1.主节点(Master Node) 或称为 名称节点(NameNode)
负责文件和目录的创建、删除和重命名等,同时管理着数据节点和文件块的映射关系。保存元数据(关于数据的数据)。
2.从节点(Slave Node) 或称为 数据节点(DataNode)
负责数据的存储和读取。
3.采用多副本存储
防止计算机集群中的节点可能发生故障,保证数据的完整性。
3.1.3 分布式文件系统的设计需求
1.透明性
2.并发控制
3.文件复制
4.硬件和操作系统的异构性
5.可伸缩性
6.容错
7.安全
3.2 HDFS简介
实现目标:
1.兼容廉价的硬件设备
2.流数据读写
3.大数据集
4.简单的文件模型:一次写入,多次读取。
5.强大的跨平台兼容性
局限性:
1.不适合低延迟数据访问
2.无法高效存储大量小文件
3.不支持多用户写入及任意修改文件
3.3 HDFS的相关概念
3.3.1 块
采取块的好处:
1.支持大规模文件存储
2.简化系统设计
3.适合数据备份
3.3.2 名称节点和数据节点
名称节点的启动:
在名称节点启动的时候,它会将FsImage文件中的内容加载到内存中,之后再执行 EditLog文件中的各项操作,使得内存中的元数据和实际的同步,存在内存中的元数 据支持客户端的读操作。 一旦在内存中成功建立文件系统元数据的映射,则创建一个新的FsImage文件和一个 空的EditLog文件。
3.3.3 第二名称节点
解决名称节点运行期间EditLog不断变大的问题。
第二名称节点是HDFS架构中的一个组成部分,它是用来保存名称节点中对HDFS 元 数据信息的备份,并减少名称节点重启的时间。SecondaryNameNode一般是单独运行在一台机器上。
3.4 HDFS体系结构
3.4.1 HDFS体系结构概述
3.4.2 HDFS命名空间管理
1.HDFS的命名空间包含目录、文件和块。
2.在HDFS1.0体系结构中,在整个HDFS集群中只有一个命名空间,并且只有唯一一个名称节点,该节点负责对这个命名空间进行管理 。
3.HDFS使用的是传统的分级文件体系,因此,用户可以像使用普通文件系统一样,创建、删除目录和文件,在目录间转移文件,重命名文件等
3.4.3 通信协议
• HDFS是一个部署在集群上的分布式文件系统,因此,很多数据需要通过网络进行传输
• 所有的HDFS通信协议都是构建在TCP/IP协议基础之上的
• 客户端通过一个可配置的端口向名称节点主动发起TCP连接,并使用客户端协议与名称节点进行交互
• 名称节点和数据节点之间则使用数据节点协议进行交互
• 客户端与数据节点的交互是通过RPC(Remote Procedure Call)来实现的。在设计上,名称节点不会主动发起RPC,而是响应来自客户端和数据节点的RPC请求
3.4.4 HDFS体系结构的局限性
(1)命名空间的限制:名称节点是保存在内存中的,因此,名称节点能够容纳的对象(文件、块)的个数会受到内存空间大小的限制。
(2)性能的瓶颈:整个分布式文件系统的吞吐量,受限于单个名称节点的吞吐量。
(3)隔离问题:由于集群中只有一个名称节点,只有一个命名空间,因此,无法对不同应用程序进行隔离。
(4)集群的可用性:一旦这个唯一的名称节点发生故障,会导致整个集群变得不可用。
3.5 HDFS的存储原理
3.5.1 数据存储策略
1.数据存放
副本的放置策略
默认的冗余复制因子为3。
第一个副本:放置在上传文件的数据节点;如果是集群外提交,则随机挑选一台磁盘不太满、CPU不太忙的节点
第二个副本:放置在与第一个副本不同的机架的节点上
第三个副本:与第一个副本相同机架的其他节点上
更多副本:随机节点
2.数据读取
调用API获取机架ID。
3.数据复制
采用流水线复制策略,通过请求获得数据节点列表。
3.5.2 数据错误与恢复
1.名称节点出错
两种机制:1)把名称节点上的元数据信息同步存储到其他文件系统(如远程挂载的网络文件系统NFS)。
2)运行一个第二名称节点,当作备份。
2.数据节点出错
依靠‘心跳’信息,判断是否宕机。宕机后会补充备份。
3.数据出错
对数据包进行校验(使用md5和shal)。