Apache Hadoop 是一个开源的分布式计算框架,主要用于处理海量数据集。它具有高度的可扩展性、容错性和高效的分布式存储与计算能力。Hadoop 核心由四个主要模块组成,分别是 HDFS(分布式文件系统)、MapReduce(分布式计算框架)、YARN(资源管理)和 Hadoop Common(公共工具和库)。
1. HDFS(Hadoop Distributed File System)
HDFS 是 Hadoop 生态系统的存储基础,用于将数据分布式地存储在集群的多个节点上。
核心概念
- NameNode:负责管理 HDFS 的元数据,跟踪文件系统的目录结构、文件的分块和每个块所在的 DataNode。NameNode 本身不存储数据,它只保存文件系统的元数据和数据块的映射信息。
- DataNode:存储实际的数据块,并定期向 NameNode 报告其状态。每个文件被拆分成多个数据块,这些数据块被分散存储在集群中的多个 DataNode 上。
- 块大小和副本:HDFS 将文件分成固定大小的块(默认 128MB),并将每个块复制到多个 DataNode 中,以保证数据的可靠性和容错性(默认副本数为 3)。
容错机制
- 数据复制:每个数据块会被复制到不同的 DataNode 上,通常副本数为 3。即使某个 DataNode 发生故障,NameNode 可以从其他 DataNode 上恢复数据。
- 心跳机制:DataNode 定期向 NameNode 发送心跳信号,告知其正常工作状态。如果某个 DataNode 失去联系,NameNode 会将该节点上的数据块重新复制到其他节点。
读写流程
- 读数据:客户端向 NameNode 请求文件的元数据(包括文件的块信息及其所在的 DataNode 列表),然后直接从相关的 DataNode 读取数据。
- 写数据:客户端将数据写入多个 DataNode,数据首先写入临时副本,然后在集群中复制,以确保数据的高可用性。
2. MapReduce
MapReduce 是 Hadoop 的核心计算模型,用于处理大规模数据集的分布式计算。它将计算任务分为两个阶段:Map 阶段和 Reduce 阶段。
Map 阶段
- Map 阶段主要负责对输入数据进行初步处理。每个输入数据(通常是键值对)会被分发到各个计算节点,计算节点会根据用户定义的 Map 函数对数据进行处理,并产生中间结果。
Shuffle 和 Sort
- Shuffle 阶段是在 Map 和 Reduce 阶段之间的桥梁,负责将 Map 任务的输出(中间结果)按照键值分发到对应的 Reduce 任务中。
- Sort:在 Shuffle 之后,所有的中间结果会根据键进行排序,然后传递给 Reduce 阶段。
Reduce 阶段
- Reduce 阶段负责对 Map 阶段产生的中间结果进行汇总和聚合,最后输出最终的结果。Reduce 函数会接收来自不同 Map 任务的中间结果,并进行汇总计算。
容错性
- 任务重试:如果某个任务(Map 或 Reduce)失败,YARN 会自动重新调度该任务到其他节点运行。
- 数据本地化:MapReduce 优化了计算的本地性,即尽量在数据所在的节点上执行计算任务,以减少数据传输的时间成本。
3. YARN(Yet Another Resource Negotiator)
YARN 是 Hadoop 2.0 之后引入的资源管理框架,负责集群中计算资源的管理和任务调度。它将资源管理和任务调度分开,使 Hadoop 可以更好地支持多种应用。
核心组件
- ResourceManager:负责全局的资源调度和管理。它会根据作业的需求,分配适当的资源给各个作业,并监控资源的使用情况。
- NodeManager:负责管理每个节点上的资源(如内存、CPU)。NodeManager 负责启动、监控和回收各个容器(Container)。
- ApplicationMaster:每个作业都会有一个独立的 ApplicationMaster,它负责协调作业的执行、请求资源以及监控任务的状态。ApplicationMaster 是 YARN 中作业的调度单元,它负责与 ResourceManager 和 NodeManager 进行交互。
工作机制
- 当一个应用程序启动时,首先会向 ResourceManager 请求资源。
- ResourceManager 分配资源后,ApplicationMaster 在 NodeManager 上启动相应的容器来执行任务。
- ApplicationMaster 会监控任务的执行状态,并在任务失败时重新调度。
4. Hadoop Common
Hadoop Common 提供了 Hadoop 核心模块所需的基础库和实用工具,主要包括:
- 文件系统接口:支持多种文件系统的接口(如本地文件系统、HDFS、S3 等)。
- 序列化机制:支持自定义的序列化和反序列化机制,用于高效的数据传输。
- RPC(远程过程调用):Hadoop 内部通信机制基于 RPC,用于各个组件之间的通信。
- 集群配置:提供了各种集群管理和配置工具,帮助用户设置和监控 Hadoop 集群。
5. Hadoop 生态系统
除了核心的 HDFS、MapReduce 和 YARN,Hadoop 还有许多扩展组件,这些组件组成了丰富的 Hadoop 生态系统,用于处理不同类型的数据任务:
- Hive:一个数据仓库工具,允许用户使用类似 SQL 的查询语言(HiveQL)来分析存储在 HDFS 上的数据。Hive 会将查询语句转换为 MapReduce 作业。
- HBase:基于 HDFS 构建的分布式 NoSQL 数据库,支持快速随机读写大规模数据集。
- Pig:一个数据流处理框架,使用 Pig Latin 语言来描述数据处理的逻辑。Pig 允许用户以更简洁的方式编写复杂的 MapReduce 任务。
- Sqoop:用于在 Hadoop 和关系型数据库(如 MySQL、Oracle)之间高效传输数据的工具。
- Oozie:一个用于协调和管理 Hadoop 作业的工作流调度器。
- ZooKeeper:分布式协调服务,Hadoop 生态系统中的多个组件都依赖它来实现分布式锁、配置管理、任务协调等功能。
- Flume:用于从分布式数据源收集、聚合和移动大量数据的工具,通常用于收集日志数据。
6. Hadoop 的容错性与扩展性
容错性
- Hadoop 的容错机制体现在多个方面:HDFS 的数据块复制机制确保数据不会因为节点故障而丢失,MapReduce 中任务失败后可以重试,YARN 负责动态分配资源和监控任务状态以确保任务的顺利完成。
扩展性
- Hadoop 设计为高度可扩展的系统。无论是 HDFS 还是 MapReduce,都能随着集群节点的增加而扩展,处理越来越大的数据集。HDFS 通过增加 DataNode 来增加存储容量,而 MapReduce 通过增加计算节点来提升并行计算能力。
7. Hadoop 的优缺点
优点
- 海量数据处理能力:Hadoop 可以高效地处理数 PB 级别的海量数据,适用于大规模数据分析。
- 高扩展性:通过增加节点即可扩展集群的存储和计算能力。
- 容错性:Hadoop 的数据复制机制和任务重试机制保证了数据和计算的高可靠性。
- 成本低:Hadoop 使用廉价的硬件就可以构建大规模的分布式系统,降低了存储和计算成本。
缺点
- 高延迟:MapReduce 模型适合批处理任务,对于低延迟实时任务支持不够好。
- 复杂性:开发基于 MapReduce 的作业相对复杂,需要理解分布式计算模型。
- 集群维护成本高:尽管 Hadoop 本身可以运行在廉价硬件上,但随着集群规模的增长,集群的管理和维护成本会显著增加。
总结
Hadoop 是处理大规模数据的强大工具,它通过 HDFS 提供分布式存储,通过 MapReduce 实现分布式计算,通过 YARN 管理资源,构成了一个高度可扩展的分布式系统
。尽管 Hadoop 由于其批处理特点不适用于所有场景,但它在大数据领域依然具有不可替代的重要地位,尤其是在数据湖和批处理任务中。
版权归原作者 傲雪凌霜,松柏长青 所有, 如有侵权,请联系我们删除。