- 分布式文件系统,具备良好的扩展性、容错性、易用的API;
- 将文件切分成等大数据块,多副本存储到多个节点上;
- 采用主从架构;
- 提供丰富的访问方式。
基本架构
NameNode
- 元信息管理:文件系统目录树、和文件数据块信息;
- 节点管理:通过心跳管理DataNode运行状态;
- 高可用:通过ZooKeeper实现主备切换(Active NameNode、Standby NameNode);
- 状态同步:(非强一致协议)通过共享存储共享日志实现主备NameNode的状态一致;
- 负载均衡:NameNode Federation机制,多个对外服务的NameNode各自管理目录树的一部分(各自有主备),对上再封装一层ViewFs。
DataNode
- 存放数据块(默认块大小为128MB);
- 以数据流水线形式(副本)写入数据;
- 通过校验码判断块损坏情况,受损副本由NameNode从其他节点的正常副本重构;
Client
- 可与DataNode位于相同节点,也可以不同,对副本的放置策略有影响;
- 通过NameNode与DataNode进行交互,完成对HDFS的管理。
关键技术
容错性设计
- NameNode:配置Active-Standby高可用,防止单点故障导致元信息丢失(整个集群不可访问);
- DataNode:多副本写入,通过心跳机制向NameNode汇报状态,可在其他节点重构受损节点的数据块;
- Block:保存数据块时生成校验码供存取数据时要核对,不一致即为损坏,需要从其他节点重构受损数据块。
副本放置策略
- 默认每个数据块放置三个副本;
- 当Client与DataNode位于相同节点,则第一个副本写到相同节点的DataNode,其余两个分别写到另一个机架的不同DataNode;
- 当Client与DataNode位于相同节点,随机选择一个DataNode放置第一个副本,其余两个分别写到另一个机架的不同DataNode。
异构存储介质
- 支持多种存储类型:ARCHIVE、DISK、SSD、RAM_DISK;
- 多种存储类型可混合使用。
集中式缓存管理
HDFS允许一部分文件缓存在off-heap内存中,加速访问效率。
- 提高集群内存利用率;
- 防止频繁使用的数据被移出内存;
- 提高数据读取效率:
- DataNode缓存统一由NameNode管理,调度策略优先调度到缓存块所在节点上,提高读出性能;
- 数据块被缓存后HDFS使用高效的支持zero-copy的新API加快读速度,减少客户端开销。
访问方式
- HDFS Shell
- HDFS API
- 数据收集组件
- 计算引擎