同系列文章推荐:
HDFS 采用了主从 (Master/Slave)结构模型,一个 HDFS 集群是由一个 NameNode 和若千个 DataNode组成的。
其中 NameNode 作为主服务器,管理文件系统的命名空间和客户端对文件的访问操作﹔集群中的 DataNode 管理存储的数据。HDFS 允许用户以文件的形式存储数据。从内部来看,文件被分成若干个数据块,而且这若干个数据块存放在一组 DataNode 上。NameNode 执行文件系统的命名空间操作,比如打开、关闭、重命名文件或目录等,它也负责数据块到具体 DataNode 的映射。DataNode 负责处理文件系统客户端的文件读写请求,并在 NameNode 的统一调度下进行数据块的创建、删除和复制工作。
图1-3所示为HDFS的体系结构。
NameNode 和 DataNode 都可以在普通商用计算机上运行。这些计算机通常运行的是 GNU/Linux 操作系统。HDFS 采用 Java 语言开发,因此任何支持 Java 的机器都可以部署 NameNode 和 DataNode。一个典型的部署场景是集群中的一台机器运行一个 NameNode 实例,其他机器分别运行一个 DataNode 实例。当然,并不排除一台机器运行多个 DataNode 实例的情况。集群中单一 NameNode 的设计大大简化了系统的架构。NameNode 是所有 HDFS 元数据的管理者,用户需要保存的数据不会经过 NameNode,而是直接流向存储数据的 DataNode。
接下来介绍MapReduce的体系结构。MapReduce 是一种并行编程模式,利用这种模式软件开发者可以轻松地编写出分布式并行程序。在 Hadoop 的体系结构中,MapReduce 是一个简单易用的软件框架,基于它可以将任务分发到由上千台商用机器组成的集群上,并以一种可靠容错的方式并行处理大量的数据集,实现 Hadoop 的并行任务处理功能。MapReduce 框架是由一个单独运行在主节点的 JobTracker 和运行在每个集群从节点的TaskTracker 共同组成的。主节点负责调度构成一个作业的所有任务,这些任务分布在不同的从节点上。主节点监控它们的执行情况,并且重新执行之前失败的任务;从节点仅负责由主节点指派的任务。当一个 Job 被提交时,JobTracker 接收到提交作业和其配置信息之后,就会将配置信息等分发给从节点,同时调度任务并监 TaskTracker 的执行。
从上面的介绍可以看出,HDFS 和 MapReduce 共同组成了 Hadoop 分布式系统体系结构的核心。HDFS 在集群上实现了分布式文件系统,MapReduce 在集群上实现了分布式计算和任务处理。HDFS 在 MapReduce 任务处理过程中提供了对文件操作和存储等的支持,MapReduce 在 HDFS 的基础上实现了任务的分发、跟踪、执行等工作,并收集结果,二者相互作用,完成了 Hadoop 分布式集群的主要任务。
参考文档:《Hadoop实战 第2版》
图片:来源《Hadoop实战 第2版》