众所周知,Hadoop的存储基础,HDFS分布式文件系统,是按照GFS的思想实现的。
本文参考:Google File System 中文版 1.0 版 译者 alex,原文地址 http://blademaster.ixiezi.com/
GFS是面向大规模数据密集型应用的,可伸缩的分布式文件系统。
1. 重要设计思路
- 组件失效被认为是常态而不是突发事件,高度强调灾备和自动恢复
- 按照文件非常巨大的方向设计
- 绝大部分修改是在文件尾部追加,而不是覆盖原有数据:文件写完之后对文件最多的操作是读取,客户端无需缓存数据块,通过数据追加来优化性能和保证原子性
- 应用程序和文件系统API的协同设计提高系统灵活性。e.g. 通过原子性的记录追加的引入.放松GFS对一致性模型的要求
2. 设计概述
2.1 设计预期
对于小文件随机读取的解决方式:通常做法是把小规模的随机读取操作合并并排序,之后按照顺序批量读取,这样可以避免在文件中前后来回读取位置
高性能带宽比低延迟重要,我们要求高速数据交换,不要求响应时间
这一特性在做数据分析的时候没有问题,但是对于要求相应时间的工作上,后来又提出了许多解决方案,但并没有实质上改变这一设计初衷
2.2 接口
GFS提供了一套类似传统文件系统的API接口,虽然并不是严格按照POSIX(The Portable Operating System Interface)等标准实现的。
- 快照:快照以很低的成本创建一个文件或者目录树的拷贝。
- 记录追加:操作允许多个客户端同时对一个文件进行数据追加操作,同时保证每个客户端的追加操作都是原子性的。这对于实现多路结果合并,以及生产者-消费者队列非常有用,多个客户端可以在不需要额外的同步锁定的情况下,同时对一个文件追加数据。
2.3 架构
Master 节点:
管理所有的文件系统元数据。这些元数据包括名字空间、访问控制信息、文件和 Chunk 的映射信息、以及当前 Chunk 的位置信息。 Master 节点还管理着系统范围内的活动,比如, Chunk 租用管理(Lease)、(orphaned )孤儿 Chunk的回收、以及 Chunk 在 Chunk 服务器之间的迁移。 Master 节点使用心跳信息周期地和每个 Chunk服务器通讯,发送指令到各个 Chunk 服务器并接收 Chunk 服务器的状态信息。
Chunk节点:
在 Chunk 创建的时候, Master 服务器会给每个 Chunk 分配一个不变的、全球唯一的 64 位的 Chunk 标识。 Chunk 服务器把 Chunk 以 Linux 文件的形式保存在本地硬盘上,并且根据指定的 Chunk 标识和字节范围来读写块数据。
无论是客户