一. HDFS概述
1. HDFS产出背景及定义
- HFDS产生的背景
随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS只是分布式文件管理系统中的一种。 - HDFS的定义
HDFS(Hadoop Distributed File System),它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。
2. HDFS的优缺点
- 优点
- 高容错性
数据自动保存多个副本. 可以通过增加副本的形式, 提高容错性.
某一个副本丢失以后, 它可以自动恢复. - 适合批处理
计算向数据移动 - 适合处理大数据
数据规模: 处理数据规模可达TB, 甚至是PB级别
文件规模: 处理文件数量可达百万级别 - 可构建在廉价机器上, 通过多副本机制, 提高可靠性
- 高容错性
- 缺点
- 不适合低延时数据访问
- 无法高效的对大量小文件进行存储,
占用NameNode大量的内存来存储文件目录和块信息
寻道时间超过读取时间,就违反了HDFS的设计目标。
- 不支持并发写入和文件随机修改
一个文件只能有一个写, 不允许多个线程同时写
仅支持数据append(追加), 不支持文件的随机修改.
3. HDFS的组成架构
1. NameNode(NN)
- 基于内存存储, 不与磁盘发生交换
- NameNode主要功能
- 收集DataNode汇报的Block列表信息
- 处理客户端读写请求
- 管理HDFS的命名空间
- 配置副本策略
- NameNode保存metadata信息包括:
- 文件owership 和 permissions
- 文件大小, 时间
- Block列表: 偏移量, 位置信息(持久化不存)
- Block每个副本的位置, 由DataNode上报
- NameNode持久化
- NameNode的metadata信息在启动后会加载到内存
- metadata存储到磁盘文件名为”fsimage”(时点备份)
- Block的位置信息不会保存到fsimage
- edits记录对metadata的操作日志 -> Redis
- 二者的产生时间和过程?(format)
2. DataNode(DN)
- 存储实际的Block
- 存储Block的元数据信息文件
- 启动DataNode是会向NameNode汇报block信息
- 执行数据库的读/写操作
- DataNode与NameNode保持心跳, 提交Block列表
3. Client
- 文件切分, 文件上传HDFS时, Client将文件切分成一个一个的Block, 然后上传
- 与NameNode交互, 获取文件的位置信息
- 与DataNode交互, 读取或写入数据
4. Secondary NameNode
- 并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务
- 帮助NameNode合并edits log, 减少NameNode的启动时间
- 在紧急情兄下,可辅助恢复NarmeNode
- SNN执行合并的时机
- 根据配置文件设置的时间间隔fs.checkpoint.period 默认3600秒
- 根据配置文件设置edits log大小 fs.checkpoint.size 规定edits文件的最大值默认是64MB
- SNN合并流程