Hadoop 集群架构描述
Hadoop 是一个解决大数据问题的生态系统或平台。HDFS(Hadoop Distributed File System)和 YARN(Yet Another Resource Negotiator)是 Apache Hadoop 生态系统的两个核心组件,它们共同构成了 Hadoop 的基础架构。
HDFS 提供了可靠的数据存储和访问机制,而 YARN 则提供了高效的资源管理和作业调度机制。两者结合在一起,构成了 Hadoop 集群的基础架构,支持大规模数据存储、处理和分析。
- HDFS(Hadoop Distributed File System):
- HDFS 是 Hadoop 中用于存储大规模数据的分布式文件系统。
- 它是设计用来运行在廉价硬件上的,具有高容错性、高可靠性和高吞吐量。
- HDFS 将大文件切分成多个块(block),并将这些块存储在集群中的多个节点上,从而实现了数据的分布式存储和处理。
- HDFS 提供了一种简单的文件系统命名空间,用户可以通过标准的文件系统接口(如 Shell 命令、Java API)来访问和管理文件。
- YARN(Yet Another Resource Negotiator):
- YARN 是 Hadoop 2.x 引入的资源管理和作业调度框架。
- 它解决了 Hadoop 1.x 中的一个限制,即所有作业都要通过 MapReduce 框架提交,而且资源管理和作业调度是耦合在一起的。
- YARN 将资源管理和作业调度分离出来,使得 Hadoop 集群可以运行多种类型的作业,不仅限于 MapReduce。
- YARN 的核心是 ResourceManager 和 NodeManager:
- ResourceManager 负责集群资源的分配和作业调度。
- NodeManager 负责在集群节点上启动和监控容器(containers),容器中运行着作业的任务(task)。
Hadoop 集群节点类型介绍
-
NameNode:该机器作为主节点,负责管理文件系统命名空间并调节客户端对文件的访问。它存储有关 Hadoop 分布式文件系统 (HDFS) 的元数据信息。
-
ResourceManager:另一个主节点,负责管理集群资源和调度任务。它与 NodeManager 一起管理资源并监视应用程序执行。
-
DataNode:这些机器充当工作节点,负责在 HDFS 中存储实际数据。它们管理附加到它们运行的节点的存储。
-
NodeManager:这些机器也充当工作节点,负责启动和监视容器,而容器又执行特定于应用程序的进程。
-
Web App Proxy Server:此服务提供基于 Web 的界面,用于监视和管理 Hadoop 集群。它充当访问 Hadoop 相关 Web 应用程序(例如 Hadoop 资源管理器 UI)的网关。
-
MapReduce 作业历史记录服务器:该服务负责存储作业历史记录并将其提供给客户端。它提供有关已完成的 MapReduce 作业的历史信息,例如作业状态、计数器和日志。
通常,NameNode 和 ResourceManager 被指定为独占主节点,而集群中的其余计算机同时充当 DataNode 和 NodeManager,充当工作节点。其他服务(例如 Web 应用程序代理服务器和 MapReduce 作业历史记录服务器)可以部署在专用硬件或共享基础设施上,具体取决于工作负载和性能要求。
客户端可以是任何能够运行 Hadoop 客户端程序的计算机或节点,通常是运行有关 Hadoop 命令的用户所在的计算机或节点。客户端与集群中的其他节点(比如 NameNode、DataNode、ResourceManager、NodeManager 等)通过网络进行通信,执行相关操作,并接收执行结果。
Hadoop 集群中各个节点之间通信的基本流程:
-
启动集群服务: 首先,启动 Hadoop 集群的各个服务,包括 NameNode、DataNode、ResourceManager、NodeManager 等。这些服务通常在不同的节点上运行。
-
注册节点: 每个服务启动后,会向对应的主节点(例如 NameNode 或 ResourceManager)注册自己的信息。例如,DataNode 会向 NameNode 注册,NodeManager 会向 ResourceManager 注册。
-
心跳检测: 一旦服务注册成功,它们会定期向主节点发送心跳消息,以表明它们的运行状态。这些心跳消息包含了节点的基本信息和运行指标,如 CPU 使用率、内存使用量等。
-
资源分配: ResourceManager 会接收来自 NodeManager 的心跳消息,并根据集群资源情况进行资源分配。它会将可用的计算资源(如 CPU 和内存)分配给需要执行作业的应用程序。此外,ResourceManager 还会分配 HDFS 上的存储资源给作业。
-
任务执行: 一旦资源分配完成,NodeManager 会启动相应的任务容器,并在该节点上执行任务。这些任务可以是 MapReduce 作业中的 Mapper 或 Reducer,也可以是其他分布式计算框架中的任务。
-
数据交换: 在任务执行过程中,各个节点之间需要进行数据交换。例如,在 MapReduce 作业中,Mapper 阶段会读取 HDFS 上的数据块,并进行处理;Reducer 阶段会从不同节点的 Mapper 输出中读取数据进行汇总。这些数据交换通常通过网络进行,涉及到节点之间的通信。
-
任务完成和结果汇总: 一旦任务执行完成,节点会将执行结果写回到 HDFS 或通知 ResourceManager。ResourceManager 会收集各个节点上任务的执行结果,并将最终的作业结果汇总起来。
-
故障处理: 在集群运行期间,可能会出现各种故障,如节点宕机、网络故障等。Hadoop 集群会对这些故障进行检测,并采取相应的措施进行处理,如重新分配任务、启动备用节点等。