HDFS优缺点
HDFS优点
高容错性
- 数据自动保存多个副本
- 副本丢失后,自动恢复
适合大数据批处理
- 移动计算不移动数据
- 数据位置暴露给计算框架
- GB、 TB甚至PB级别数据
- 百万规模以上的文件数量
- 10K节点规模
流式文件访问
- 一次写入,多次读取
- 保证数据一致性
构建成本低、安全可靠
- 构建在廉价机器上
- 通过多副本提高可靠性
- 提供了容错和恢复机制
HDFS缺点
不适合低延迟数据访问
不适合大量小文件存储
- 占用NameNode大量内存空间
- 磁盘寻道时间超过读取时间
不适合并发写入
- 一个文件只能有一个写入者
不提供文件随机修改
- 只支持追加
HDFS基本架构与原理
HDFS架构图解
基本概念
NameNode(Active)
- Master节点,只有一个
- 管理HDFS文件系统的
- 命名空间
- 维护文件元数据信息
- 管理副本策略(默认3个副本)
- 处理客户端读写请求
NameNode(Standby)
- NameNode(Active)的热备节点,(就是个备胎)
- 周期性同步edits编辑日志,定期合并fsimage与edits到本地磁盘
- 当NameNode(Active)出现故障则会快速上位,成为新的Active节点
NameNode元数据
- edits:编辑日志,客户端对目录和文件的写操作首先被记到edits日志中,如:创建文件、删除文件等
- fsimage:文件系统元数据检查点镜像文件,保存了文件系统中所有的目录和文件信息,如:一个目录下有哪些子目录、子文件,文件名,文件副本数,文件由哪些块组成等
DataNode
- Slave工作节点,可以启动多个
- 存储数据块和数据校验和
- 执行客户端的读写请求操作
- 通过心跳机制定期向NameNode汇报运行状态和所有块列表信息
- 在集群启动时DataNode向NameNode提供存储的Block块列表信息
Block块
- 文件写入到HDFS会被切分成若干个Block块
- 数据块大小固定,默认128MB,可自定义修改
- HDFS最小存储单元
- 若一个文件的大小小于设置的数据块大小,则不会占用整个块的空间
- 默认情况下每个Block有三个副本
Client
- 文件切分
- 与NameNode交互获取文件元数据信息
- 与DataNode交互,读取或写入数据
- 管理HDFS
问题:
HDFS 为什么不适合存储小文件?
- 元数据信息存储在NameNode内存中,内存大小有限
- NameNode存储Block数目有限
• 一个block元信息消耗大约150byte内存
• 存储1亿个block,大约需要20GB内存
• 如果一个文件大小为10K,则1亿个文件大小仅有1TB,却消耗NameNode 20GB内存 - 存取大量小文件消耗大量的磁盘寻道时间
未完待续。。。