什么是HDFS?
HDFS(Hadoop Distributed File System)基于Google发布的GFS论文设计开发,运行在通用硬件平台上的分布式文件系统。
hdfs的优点:
- 可构建在廉价机器上,成本低。
- 高容错性, 通过多副本提高可靠性,提供了容错和恢复机制。
- 适合离线批处理,不适合处理实时数据。
- 移动计算:数据在哪里,计算就到哪里,计算跟着数据跑。
- 适合海量数据处理,GB、TB、甚至 PB 级数据,百万规模以上的文件数量,10K+节点规模。
- 流式文件访问, 一次性写入,多次读取,保证数据一致性,hdfs不支持文件修改,但是支持文件追加。
hdfs的缺点:
- 不支持实时数据处理
- 不适合小文件的存储,原因:1)寻址时间过长,寻道时间超过读取时间 2) 占用 NameNode 大量内存,会造成namenode的压力过大。
- 不支持数据修改 一次写入多次读取
HDFS的设计思想
- 分而治之——海量数据分块存储的思想
大文件被切割成小文件,使用分而治之的思想让很多服务器对同一个文件进行联合管理,如何分块?块太大容易出现负载不均衡,数据块太小造成namenode压力太大。HDFS在设计的时候默认一个块128m。
- 冗余备份——每个数据块多个副本
每个小文件做冗余备份,并且分散存到不同的服务器,做到高可靠不丢失。
HDFS的系统架构
各自作用:
主节点NameNode的作用:
- 存储管理元数据信息,(元数据就是管理DataNode数据的数据,主要有三个方面:1抽象目录树,2数据和块的对应关系,3数据块的存储位置)
- 处理客户端读写请求,客户端的读写请求首先要访问namenode.
- 接受datanode的心跳报告
- 负载均衡
- 负责数据块的副本的存储节点的分配
从节点DataNode的作用:
- 真正进行数据块的存储
- 真正处理客户端的读写请求
- 向namenode发送心跳报告
- 进行副本的复制
助理SecondaryNameNode的作用:
- 帮助namenode备份元数据信息 namenode宕机后,可以进行数据恢复
- 帮助namenode做一些事情 (元数据合并) 减轻namenode的压力
客户端:
- 发送读写请求
- 对上传的文件进行逻辑切块和物理切块
- 向namenode反馈数据上传,下载的响应