Hadoop 是一个用于分布式存储和处理大规模数据的开源框架,它的架构主要由以下几个核心组件组成:
Hadoop 的核心架构主要包括 HDFS(Hadoop Distributed File System) 和 YARN(Yet Another Resource Negotiator),以及 MapReduce 计算框架:
HDFS 负责存储大规模数据,采用 主从架构:
特点:
- 数据会被拆分成 多个数据块(默认 128MB 或 256MB),并存储在多个 DataNode 上。
- 副本机制(默认 3 副本),保证数据可靠性和容错能力。
YARN 是 Hadoop 2.0 引入的资源管理系统,主要负责任务调度和资源管理。
特点:
- 资源调度更加灵活,支持不同类型的计算框架(如 Spark、Flink)。
- 分布式任务管理,提高 Hadoop 计算效率。
MapReduce 是 Hadoop 早期的计算框架,采用 “分而治之” 的编程模型:
特点:
- 适合批处理任务(如日志分析、数据统计)。
- 计算过程中会大量读写 HDFS,导致 I/O 开销较大。
除了 HDFS、YARN 和 MapReduce,Hadoop 还衍生出许多组件,形成一个庞大的大数据生态系统:
组件 | 作用 |
---|---|
Hive | SQL 查询引擎,支持类 SQL 语法(HiveQL),适合数据仓库应用。 |
HBase | 分布式 NoSQL 数据库,适合存储海量结构化数据。 |
Spark | 内存计算框架,比 MapReduce 更快,适合流式和实时计算。 |
Flink | 流处理计算框架,适用于低延迟数据处理。 |
Kafka | 分布式消息队列,适用于日志收集、实时数据处理。 |
Zookeeper | 分布式协调服务,管理 Hadoop 集群的元数据和状态。 |
Oozie | 任务调度工具,支持 MapReduce、Spark 等任务的调度管理。 |
+------------------------------------------------------+
| Client |
| - 提交 MapReduce 任务 / Hive SQL / Spark 任务 |
+------------------------------------------------------+
| YARN |
| - ResourceManager(资源管理) |
| - NodeManager(节点管理) |
+------------------------------------------------------+
| HDFS |
| - NameNode(元数据管理) |
| - DataNode(数据存储) |
+------------------------------------------------------+
以 MapReduce 任务执行流程 为例:
Hadoop 采用 HDFS 进行分布式存储,YARN 进行资源管理,MapReduce 进行计算,构成了一个强大的大数据处理架构。同时,围绕 Hadoop 发展出了 Spark、Hive、Flink、Kafka 等生态组件,使其在 数据分析、机器学习、大数据存储 方面有广泛应用。
Hadoop 默认是支持并行计算的。Hadoop 的核心组件之一——MapReduce——采用 分布式并行计算 模型来处理大规模数据。其并行度(Parallelism)主要受以下几个因素影响:
mapreduce.job.reduces
配置参数控制,默认值一般是 1,但可以手动调整(通常是 Map 任务数 ÷ 4
)。yarn.nodemanager.resource.memory-mb
和 yarn.nodemanager.resource.cpu-vcores
影响,即:
节点可用 CPU 核心数 / 每个任务使用的 CPU 核心数
。Hadoop 默认是并行计算的,并行度 没有固定值,而是受 HDFS 分片数、MapReduce 任务配置、YARN 资源管理、集群节点数量 等因素综合影响。一般来说:
如果想提高 Hadoop 并行度,可以:
在 Hadoop HDFS(Hadoop Distributed File System) 中,Checkpoint 机制主要用于 管理 NameNode 的元数据(Metadata),防止 EditLog 过大,提高 NameNode 的恢复速度。
HDFS 的 NameNode 负责管理文件系统的元数据,主要由以下两部分组成:
Checkpoint 机制通过定期合并 FsImage 和 EditLog,生成新的 FsImage,减少 EditLog 体积,提高 NameNode 的恢复效率。
在 非 HA(高可用)模式 下,Checkpoint 由 Secondary NameNode(SNN) 执行。
在 HA 模式 下,Checkpoint 由 Standby NameNode 负责。
Checkpoint 的完整流程如下:
最终结果:EditLog 变小,NameNode 重启时只需重放较少的日志,恢复速度更快。
可以通过 hdfs-site.xml
配置 Checkpoint 触发规则:
<property>
<name>fs.checkpoint.periodname>
<value>3600value>
property>
<property>
<name>fs.checkpoint.sizename>
<value>104857600value>
property>
fs.checkpoint.period
:指定 Checkpoint 的时间间隔(单位:秒),默认 3600 秒(1 小时)。fs.checkpoint.size
:当 EditLog 大于设定的大小(默认 100MB)时触发 Checkpoint。可以通过重启 Secondary NameNode 手动执行 Checkpoint:
hdfs secondarynamenode -checkpoint
或者使用:
hdfs dfsadmin -saveNamespace
注意:手动触发 Checkpoint 适用于 NameNode EditLog 过大时的紧急情况。
在 Hadoop HA 模式下,没有 Secondary NameNode,而是由 Standby NameNode 负责 Checkpoint:
hdfs dfsadmin -saveNamespace
或者定期在 hdfs-site.xml
配置:
<property>
<name>dfs.ha.checkpoint.periodname>
<value>3600value>
property>
<property>
<name>dfs.ha.checkpoint.txnsname>
<value>1000000value>
property>
dfs.ha.checkpoint.period
:多久执行一次 Checkpointdfs.ha.checkpoint.txns
:事务数达到多少次执行 Checkpoint名称 | 作用 | 存储位置 |
---|---|---|
FsImage | NameNode 的完整快照 | dfs.namenode.name.dir |
EditLog | 记录 HDFS 变更日志 | dfs.namenode.edits.dir |
Checkpoint | 合并 FsImage + EditLog,减少 EditLog 体积 | dfs.namenode.checkpoint.dir |
对比项 | Hadoop Checkpoint | Spark Checkpoint |
---|---|---|
作用 | 维护 HDFS 元数据,防止 EditLog 过大 | 持久化 RDD/Dataset,提高故障恢复能力 |
执行方式 | Secondary NameNode / Standby NameNode | rdd.checkpoint() |
存储位置 | HDFS(FsImage 文件) | HDFS / 本地磁盘 |
触发方式 | 自动(基于时间或日志大小)或手动 | 代码调用 rdd.checkpoint() |
✅ Hadoop HDFS 有 Checkpoint 机制,用于 合并 FsImage 和 EditLog,提高 NameNode 的恢复速度,防止 EditLog 过大。
✅ Checkpoint 由 Secondary NameNode(非 HA)或 Standby NameNode(HA 模式)执行,可以定期或手动触发。
✅ Checkpoint 机制主要优化 NameNode 启动恢复速度,而不是数据持久化,与 Spark 的 Checkpoint 作用不同。