分布式文件系统 HDFS
1、MapReduce 与分布式文件系统
前面的讨论中,我们已经得知,Hadoop 中实现的 MapReduce 是一个编程模型和运行框架,
它能够通过 JobTracker 接收客户提交的作业而后将其分割为多个任务后并行运行在多个
TaskTracker 上。而问题是,这些 TaskTracker 如何高效获取所要处理的数据?
在传统的高性能集群中,计算节点和存储节点是各自独立的,它们之间通过高速网络完成互
联,然而,在面临海量数据处理的问题时,网络必然会成为整个系统的性能瓶颈,这就需要
引入超高速的网络如万兆以太网或 Infiniband。然而,对大数场景来讲它们属于“奢侈品”,
且昂贵的投入并不能带来网络性能的线性提升,因此性价比不高。面对这种问题,MapReduce
采取了将计算节点与存储节点合二为一的集群模型,它利用分布式文件系统将数据存储于多
个节点上,而后让处理过程在各数据节点本地直接进行,从而极大地降低了数据通过网络传
送的需求。不过,这里仍然需要说明的是,MapReduce 并非依赖于分布式文件系统,只不过
运行在非分布式文件系统的 MapReduce 的诸多高级特性将无用武之地。
事实上,分布式文件系统并非 MapReduce 带来的新生事物,只不过,MapReduce 站在前人的
基础上将分布式文件系统进行了改造以使得它更能够适用于在 MapReduce 中完成海量数据
处理。Google 为在他们的 MapReduce 中实现的分布式文件系统为 GFS(Google File System),
而 Hadoop 的实现称作 HDFS(Hadoop Distributed File System)。
2、HDFS 的设计理念
HDFS 的许多设计思想与传统的文件系统(如 ext3、XFS 等)是类似的,比如文件数据存储于
“数据块(block)”中、通过“元数据”将文件名与数据块建立映射关系、文件系统基于目录
实现树状组织结构、通过元数据保存文件权限及时间戳等。
但二者也有不同之处,比如传统文件系统实现为系统内核(尤其是 Linux 系统)中内核模块,
可通过用户空间的相关工具进行管理操作,并能够在挂载后供用户使用;但 HDFS 是一种
“用户空间文件系统”,其文件系统代码运行于内核之外并以用户空间进程的形式存在,故
不需要在 VFS(Virtual FileSystem)注册后向用户空间输出,也不能挂载使用。同时,HDFS