Hadoop
Hadoop 是一个用于分布式存储和处理大规模数据的开源框架,主要包括 Hadoop 分布式文件系统(HDFS)和 MapReduce 编程模型。下面将深入讲解 Hadoop 的工作原理和架构。
Hadoop 的作用
Hadoop 的作用非常简单,就是在多计算机集群环境中营造一个统一而稳定的存储和计算环境,并能为其他分布式应用服务提供平台支持。
也就是说, Hadoop 在某种程度上将多台计算机组织成了一台计算机(做同一件事),那么 HDFS 就相当于这台计算机的硬盘,而 MapReduce 就是这台计算机的 CPU 控制器。
Hadoop 架构概述
Hadoop 的核心组件包括:
- Hadoop 分布式文件系统 (HDFS):负责存储大量数据。
- MapReduce:一种分布式计算模型,用于处理和生成大规模数据集。
- YARN (Yet Another Resource Negotiator):负责资源管理和任务调度。
HDFS
HDFS 是一个分布式文件系统,设计用于在廉价硬件上存储超大规模数据。它具有高容错性和高吞吐量的特点。
HDFS 的核心组件:
- NameNode:负责管理HDFS的元数据,不存储实际数据。HDFS 的主节点,负责管理文件系统的元数据,比如文件名、目录结构、以及每个文件的块位置。它不存储实际的数据,只存储元数据。
- DataNode:负责存储实际的数据块,并执行对这些块的读写操作。数据节点,负责实际存储数据块,并定期向 NameNode 报告其状态。
HDFS 的工作机制:
- 文件在 HDFS 中被分割成固定大小的块(通常为 128MB 或 256MB),每个块在多个 DataNode 之间复制(通常为 3 个副本)以保证容错性。
- 当客户端要读取文件时,首先与 NameNode 通信获取文件块的位置信息,然后直接从相应的 DataNode 读取数据。
MapReduce
MapReduce 是一种编程模型,允许用户在分布式环境中处理大规模数据集。它包括两个主要阶段:Map 阶段和 Reduce 阶段。
MapReduce 的核心组件:
- JobTracker(在 Hadoop 1.x):负责任务的调度和监控。Hadoop 2.x 引入了 YARN 后,JobTracker 的职责被拆分成 ResourceManager 和 ApplicationMaster。
- TaskTracker(在 Hadoop 1.x):负责在各个节点上执行任务。Hadoop 2.x 引入了 NodeManager 代替 TaskTracker。
MapReduce 的工作机制:
- Map 阶段:输入数据被分割成多个块,每个块被分配给一个 Map 任务。Map 任务处理输入数据,生成一组中间键值对。
- Shuffle and Sort 阶段:Map 阶段的输出被分区,并按照键进行排序,然后传递给相应的 Reduce 任务。
- Reduce 阶段:Reduce 任务对中间键值对进行处理,生成最终的输出结果。
YARN (Yet Another Resource Negotiator)
YARN 是 Hadoop 2.x 中的资源管理系统,旨在改进 Hadoop 的可扩展性和资源利用率。
YARN 的核心组件:
- ResourceManager:负责整个系统的资源管理和任务调度。它包括两个主要部分:调度器和应用管理器。
- NodeManager:负责每个节点的资源管理和任务执行。
- ApplicationMaster:每个应用程序都有一个 ApplicationMaster,负责协调该应用程序在集群中的执行,包括分配资源和任务调度。
YARN 的工作机制:
- 当用户提交一个应用程序时,YARN 启动一个 ApplicationMaster 来管理这个应用程序的生命周期。
- ResourceManager 分配资源给 ApplicationMaster,ApplicationMaster 根据需要启动 Container(任务执行的基本单位),并在这些 Container 上运行任务。
- NodeManager 监控 Container 的资源使用情况,并定期向 ResourceManager 报告。
Hadoop 的数据流和执行过程
- 数据写入 HDFS:用户通过 HDFS 客户端将数据写入 HDFS。客户端将数据分块,并将每个块写入多个 DataNode。NameNode 记录每个块的元数据。
- 提交 MapReduce 作业:用户通过客户端提交 MapReduce 作业。ResourceManager 接收作业并启动 ApplicationMaster。
- 任务调度和执行:ApplicationMaster 向 ResourceManager 请求资源并启动 Container。Map 任务读取 HDFS 中的数据,进行处理,并输出中间键值对。Reduce 任务接收中间数据,进行处理,生成最终结果并写回 HDFS。
- 结果存储和读取:用户可以通过 HDFS 客户端读取作业生成的最终结果。
总结
Hadoop 通过 HDFS 提供可靠的分布式存储,通过 MapReduce 提供强大的分布式计算能力,并通过 YARN 实现灵活高效的资源管理。这些组件协同工作,使 Hadoop 成为处理大规模数据的强大工具。