一、HDFS概述
- HDFS ( Hadoop Distributed File System,Hadoop分布式文件系统)是一种旨在在商用硬件上运行的分布式文件系统。
- HDFS最初是作为Apache Nutch Web搜索引擎项目的基础结构而构建的。HDFS是Apache Hadoop Core项目的一部分。
- HDFS具有高度的容错能力,旨在部署在低成本硬件上。
- HDFS提供对应用程序数据的高吞吐量访问,并且适用于具有大数据集的应用程序。
- HDFS放宽了一些POSIx要求,以实现对文件系统数据的流式访问。
二、HDFS架构
1.客户端(Client)
- 客户端是用户操作HDFS最常用的方式,HDFS在部署时都提供了客户端。
- HDFS客户端是一个库,包含HDFS文件系统接口,这些接口隐藏了HDFS实现中的大部分复杂性。
- 严格来说,客户端并不算是HDFS的一部分。
- 客户端可以支持打开、读取、写入等常见的操作,并且提供了类似Shell的命令行方式来访问HDFS中的数据。
- HDFS也提供了Java APl,作为应用程序访问文件系统的客户端编程接口。
2.名称节点(NameNode)
- 在HDFS中,名称节点(NameNode)负责管理分布式文件系统的命名空间(Namespace ),保存了两个核心的数据结构,即Fslmage和EditLog。
- FsImage用于维护文件系统树以及文件树中所有的文件和文件夹的元数据
- 操作日志文件EditLog中记录了所有针对文件的创建、删除、重命名等操作。
3.数据节点(DataNode)
- 数据节点是分布式文件系统HDFS的工作节点,负责数据的存储和读取,会根据客户端或者是名称节点的调度来进行数据的存储和检索,并且向名称节点定期发送自己所存储的块的列表。
- 每个数据节点中的数据会被保存在各自节点的本地Linux文件系统中。
4.NameNode和DataNode区别
DataNode是分布式文件系统HDFS的工作节点, 负责数据的存储和读取,会根据客户端 (Client)或者是NameNode的调度进行数据的存储和检索, 并且向NameNode定期 发送自己所存储的块的列表。每个DataNode中的数据会被保存在各自节点的本地Linux文件系统中。
5.HDFS命名空间管理
- HDFS的命名空间( NameSpace)包含目录、文件和块。
- HDFS使用的是传统的分级文件体系,因此,用户可以像使用普通文件系统一样,创建、删除目录和文件,在目录间转移文件,重命名文件等。
- NameNode维护文件系统命名空间。对文件系统命名空间或其属性的任何更改均由NameNode记录。
6.通信协议
-
HDFS是一个部署在集群上的分布式文件系统,因此,很多数据需要通过网络进行传输。
-
所有的HDFS通信协议都是构建在TCP/IP协议基础之上的。
-
客户端通过一个可配置的端口向名称节点主动发起TCP连接,并使用客户端协议与名称节点进行交互。
-
名称节点和数据节点之间则使用数据节点协议进行交互。
-
客户端与数据节点的交互是通过RPC ( Remote Procedure Call)来实现的。在设计上,名称节点不会主动发起RPC,而是响应来自客户端和数据节点的RPC请求。
7.数据块(Block)
数据块(Block)是磁盘进行数据读写操作的最小单元 。文件以块的形式存储在磁盘中, 文件系统每次都能操作磁盘数据块大小整数倍的数据。
- HDFS默认一个块128 MB ,一个文件被分成多个块, 以块作为存储单位。
- 块的大小远远大于普通文件系统 ,可以最小化寻址开销。
- 使用抽象的数据块具有以下优势:
- 通过集群扩展能力可以存储大于网络中任意一个磁盘容量的任意大小的文件;
- 使用抽象块而非整个文件作为存储单元,可简化存储子系统,固定的块大小可方便元数据和文件数据块内容的分开存储;
- 便于数据备份和数据容错,提高系统可用性。
三、HDFS关键特性
1.HA高可用
HDFS的可靠性主要体现在使用ZooKeeper来实现主/备NameNode。
2.数据完整性保障
HDFS主要目的是保证存储数据完整性,对于各组件的失效,做了可靠性处理。
- 重建失效数据盘的副本数据:DataNode向NameNode周期上报失败时,NameNode发起副本重建动作以恢复丢失副本。
- 集群数据均衡:HDFS架构设计了数据均衡机制,此机制保证数据在各个DataNode上分布是平均的。
- 元数据可靠性保证:采用日志机制操作元数据,同时元数据存放在主备NameNode上。快照机制实现了文件系统常见的快照机制,保证数据误操作时,能及时恢复。
- 安全模式:HDFS提供独有安全模式机制,在数据节点故障,硬盘故障时,能防止故障扩散。
3.元数据持久化
HDFS元数据(描述文件)持久化由FSImage和EditLog两个文件组成,随着HDFS运行进行持续更新。
4.数据副本机制
- 大规模Hadoop集群节点分布在不同的机架上,同—机架上的节点往往通过同一网络交换机连接,在网络带宽方面比跨机架通信更具优势。
- 但若某一文件数据块同时存储在同—机架上,则可能由于电力或网络故障,导致文件不可用。
- HDFS采用机架感知策略来改进数据的可靠性、可用性和网络带宽的利用率。
5.HDFS联邦
在 HDFS联邦中,有多个联合却相互独立的NameNode,这使得 HDFS的命名空间可以进行水平拓展。
6.视图文件系统
视图文件系统提供了一种管理多个Hadoop文件系统命名空间(或名命空间卷) 的方法。
7.文件安全性
为了保证文件的安全性, HDFS提供备份NameNode元数据和增加SecondaryNameNode两种基本方案。
- 备份NameNode上持久化存储的元数据, 然后同步地将其转存到其他文件系统中。一种通常的实现方式是将NameNode中的元数据转存到远程的网络文件系统(Network File System,NFS)中。
- 在系统中同步运行一个SecondaryNameNode,作为二级NameNode去周期性地合并编辑日志中的命名空间镜像。
8.集中式缓存管理
- 当工作集的大小超过了HDFS主内存大小 ,会有部分工作集的数据从内存中被清除 。为了防止这种情况的发生,可以显式地进行锁定,避免频繁使用的数据从内存中被清除。
- 缓存可以减少CPU通过I/O去读取磁盘的次数,提高磁盘I/O的效率。
- 当块已经由DataNode缓存后,客户端可以使用一个新的 、更高效的 、零拷贝的读取API。
- 在每个DataNode依赖操作系统缓存区缓存时, 重复读取块将导致块的所有n个副本被放入缓存区缓存。而使用集中化缓存管理 ,显式地锁定n个副本中的m个副本进行缓存 ,可以减少n-m个副本块 ,提高内存利用率。
9.数据存储策略
分级存储:HDFS的异构分级存储框架提供了RAM_DISK 、SSD 、DISK、ARCHIVE这4种存储类型的存储设备,以对应DataNode上可能存在的不同的存储介质。
10.HDFS同分布
- 同分布(Colocation) 是将存在关联的数据或可能要进行关联操作的数据存储在相同的节点上。
- HDFS同分布的特性是将那些需进行关 联操作的文件存储在相同的数据节点,在进行关联操作时可以避免到别的数据节点上获取数据,大大减少网络带宽的占用。
11.其他关键设计要点说明
- 空间回收机制:支持回收站机制,以及副本数的动态设置机制。
- 数据组织:数据存储以数据块为单位,存储在操作系统的HDFS文件系统上。
- 访问方式:提供JAVA APl,HTTP方式,SHELL方式访问HDFS数据。
四、数据读写流程
1.文件权限
- HDFS的文件权限模型基本上和POSIX模型的文件和目录实现权限模型相同 。每个文件和目录都与一个所有者和一个组相关联 。该文件或目录对作为所有者的用户 、作为该组成 员的其他用户以及所有其他用户具有单独的权限。