Hadoop分布式文件系统 HDFS介绍
概念
HDFS 是 Hadoop Distribute File System 的简称,也就是 Hadoop 分布式文件系统。
设计理念
1、硬件错误是常态
错误检测并快速自动恢复是 HDFS 的最核心设计目标
2、存储超大文件
HDFS 适合大量存储,总存储量可以达到的 PB、EB 级
HDFS 适合大文件,单个文件一般在百 MB 级以上
文件数目适中
3、流式数据访问,最高效的访问模式是 一次写入、多次读取
HDFS 适合用于处理批量,而不适合随机定位访问
HDFS 存储的数据集作为 hadoop 的分析对象。在数据集生成后,长时间在此数据集上进行各种分
析。每次分析都将设计该数据集的大部分数据甚至全部数据,因此读取整个数据集的时间延迟比读取
第一条记录的时间延迟更重要。
4、简单的一致模型
HDFS 的应用程序需要对文件实行一次性写、多次读的访问模式
不能修改已写入的数据
5、程序采用“数据就近”原则分配节点执行
移动计算比移动数据的代价要低
6、运行在普通廉价的服务器上
HDFS 设计理念之一就是让它能运行在普通的硬件之上,即便硬件出现故障,也可以通过容错策
略来保证数据的高可用。
局限性
1、不适合低延迟数据访问
高吞吐量可能要求以高延迟作为代价
Hbase 可以弥补不足
2、无法高效存储大量小文件
文件数量大小的限制由 NameNode 来决定
3、不支持多用户写入及任意修改文件
HDFS 的基本存储单位块(Block)
传统的块存储介质中,块是读写的最小数据单位(扇区),传统文件系统基于存储块进行操作
HDFS 也使用的块的概念,默认大小为 64M
1.可针对每个文件配置,由客户端指定( 中配置 , 默认为 64M)
2.每个块有一个自己的全局 ID
HDFS 将一个文件分为一个或数个块来存储
1.每个块是独立的存储单位
2.以块为单位在集群服务器上分配存储
如果实际数据没有达到块大小,则并不实际占用磁盘空间, 例如如果一个文件是 500M,则它会
被分为 8个块:64*7+52
使用块存储的好处:
1.一个文件的大小可以大于网络中任意一个磁盘的容量
2.简化了存储子系统的设计,简化了存储管理,消除了对元数据的顾虑
3.块适合用于数据备份,提供了容错能力和可用性
HDFS 体系架构
主要包括以下部分:
NameNode
管理文件系统的命名空间
记录每个文件数据块在各个 Datanode 上的位置和副本信息
协调客户端对文件的访问
记录命名空间内的改动或空间本身属性的改动
Namenode 使用事务日志记录 HDFS 元数据的变化。使用映像文件存储文件系统的命名空间,包括
文件映射,文件属性等
通过检查点(Checkpoint)更新影像文件,Secondary Namanode 辅助完成处理
DataNode
1.负责所在物理节点的存储管理
2.一次写入,多次读取(不修改)
3.文件由数据块组成,典型的块大小是 64MB
4.数据块尽量散布道各个节点
事务日志
映像文件
SecondaryNameNode
HDFS 读写文件的流程
客户端要访问 HDFS 中的一个文件,首先从 namenode 获得组成这个文件的数据块位置列表,根据
列表知道存储数据块的 datanode,访问 datanode 获取数据,Namenode 并不参与数据实际传输。
写入数据流程: 客户端首先在 NameNode 中创建文件, 然后将文件内容写到 DataNode 中, 完
成后返回客户端, 客户端关闭 NameNode 中创建的文件。
HDFS 的可靠性
冗余副本策略
可以在 中设置复制因子指定副本数量
所有数据块都有副本
Datanode 启动时,遍历本地文件系统,产生一份 hdfs 数据块和本地文件的对应关系列表
(blockreport)汇报给 namenode
机架策略
集群一般放在不同机架上,机架间带宽要比机架内带宽要小
HDFS 的“机架感知(Rack-aware)”
默认在一个机架内存放两个副本,在另外一个机架内再存放一个副本,这样可以防止机架失效
时丢失数据,也可以提高带宽利用率
心跳机制
Namenode 周期性从 datanode 接收心跳信号和块报告
Namenode 根据块报告验证元数据
没有按时发送心跳的 datanode 会被标记为宕机,不会再给它任何 I/O 请求
如果 datanode 失效造成副本数量下降,并且低于预先设置的阈值,namenode 会检测出这些数据
块,并在合适的时机进行重新复制
引发重新复制的原因还包括数据副本本身损坏、磁盘错误,复制因子被增大等
安全模式
Namenode 启动时会先经过一个“安全模式”阶段
安全模式阶段不会产生数据写
在此阶段 Namenode 收集各个 datanode 的报告,当数据块达到最小副本数以上时,会被认为是“安
全”的
在一定比例(可设置)的数据块被确定为“安全”后,再过若干时间,安全模式结束
当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数
校验和
HDFS 客户端软件实现了对 HDFS 文件内容的校验和(Checksum)检查
在文件创立时,会计算每个数据块的校验和
校验和会作为单独一个隐藏文件保存在命名空间下
客户端获取文件时可以检查数据块对应的校验和是否和隐藏文件中的相同,从而发现数据块是否
损坏
如果正在读取的数据块损坏,则可以继续读取其它副本
回收站
删除文件时,其实是放入回收站/trash
回收站里的文件可以快速恢复
可以设置一个时间阈值,当回收站里文件的存放时间超过这个阈值,就被彻底删除,并且释放占
用的数据块
默认回收站是关闭的,可以通过在 中添加 来打开并配置时间
阀值,时间单位是分
元数据保护
映像文件和事务日志是 Namenode 的核心数据。可以配置为拥有多个副本
副本会降低 Namenode 的处理速度,但增加安全性
Namenode 依然是单点,如果发生故障要手工切换