1、本质
HDFS(Hadoop Distributed File System) 是一种适合运行在通用文件上的分布式文件系统
架构图:
2、特点
- 存储并管理PB数据
- 处理非结构化数据
- 高度容错
- write-once-read-many存取模式(无数据一致性问题)
不适合做
- 存储小文件(不建议)
- 大量随机读(不建议)
- 需要对文件进行修改(不支持)
- 多用户写入(不支持)
3、组成部分
- NameNode :主节点,只允许有一个
- SecondaryNameNode:检查点节点,助手节点
- DataNode:从节点,可以有多个
NameNode
- 作用
- 管理着文件系统命名空间
-
- 维护着文件系统树中的所有文件和目录
- 在内存中存储元数据
- NameNode 保存源信息的种类有
- 文件名目录名和它们之间的层级关系
- 文件目录的所有者及其权限
- 每个文件块的名及文件由哪些块组成
- NameNode 保存源信息的种类有
- 元数据保存在内存中
- NameNode 元信息并不包含每个块的位置信息
- 保存文件、block、datanode之间的映射关系
- 单点问题
- 全Hadoop系统只有一个NameNode
- 两种解决方案
- 将hadoop元数据写到本地同时,在实施同步到一个远程挂载的网络文件系统
- 运行一个secondaryNameNode (定时更新 fsimage,edits 文件 重启时namenode加载最新信息 -当然也会有一定延迟)
SecondaryNameNode
- 作用
- 元信息持久化到磁盘
- 存放元信息的文件是fsimage
- 存放对元信息操作的文件是edits
- 定时到NameNode上获取最新edit logs 并更新到fsimage(SecondaryNameNode 自己的fsimage)
- 一旦有了新的fsimage会拷贝到NameNode中,下次NameNode重启时减少重启时间
- 元信息持久化到磁盘
DataNode
- 作用
- 负责存储数据块,负责为系统客户端提供数据块的读写服务
- 根据NameNode的指示进行,创建,删除,复制等操作
- 心跳机制,定期报告文件块列表信息
- DataNode之间进行通信,块的副本处理
- block
- Hdfs读写的基本单位,默认64M,磁盘块512B
- 块增大,可以减少寻址时间,文件传输时间
- 块过大,会导致整体任务数据过小,降低任务处理速度
三个策略
- 机架感知策略
第一个副本:放在客户端相同的节点上,(如果客户端是集群外的一台机器,则随机算节点,系统会调算太忙太满的节点)
第二个副本:放在不同的机架上
第三个副本:放在与第二个节点相同机架但不同节点上
- distance(/D1/R1/H1,/D1/R1/H1)=0 相同的datanode
- distance(/D1/R1/H1,/D1/R1/H3)=2 同一rack下的不同datanode
- distance(/D1/R1/H1,/D1/R2/H5)=2 同一IDC下的不同datanode
- distance(/D1/R1/H1,/D2/R3/H6)=2 不同IDC下的不同datanode
- 数据完整性校验
- 不希望在存储和处理数据时丢失或损坏任何数据
- HDFS 会对写入的数据计算校验和,并在读取数据时验证校验和
- 两种检验方法:
- – 校验和 • 检测损坏数据的常用方法是在第一次进行系统时计算数据的校验和,在通道传输过程中,如果新生成的校验和 不完全匹配原始的校验和,那么数据就会被认为是被损坏的。
- – 数据块检测程序DataBlockScanner • 在DataNode节点上开启一个后台线程,来定期验证存储在它上所有块,这个是防止物理介质出现损减情况而 造成的数据损坏。
- 容错可靠性措施
- 一个名字节点和多个数据节点 • 数据复制(冗余机制)
- 存放的位置(机架感知策略)
- 故障检测
- 数据节点
- 心跳包(检测是否宕机)
- 快报告(安全模式下检测)
- 数据完整性检测(校验和比较)
- 名字节点(日志文件,镜像文件)
- 数据节点
- 空间回收机制 – Trash目录