Skip to content
Tse的笔记
Go back

大数据系统复习一

Edit page

Hadoop

第一章

大数据发展的三个阶段

各类结构化和非结构化数据

数据来源

科学研究

企业应用

Web 1.0 数据

Web 2.0 数据

第二章

Hadoop生态中的HDFS,HBase,MapReduce,YARN,Zookeeper

Hadoop 生态核心组件

Hadoop 是一套用于海量数据存储和处理的分布式系统。其核心组件可以概括为:

HDFS

HDFS 全称为 Hadoop Distributed File System,是 Hadoop 的分布式文件系统。

HDFS 会将大文件切分为多个数据块,并将数据块分散存储在不同服务器上。每个数据块通常保存多个副本,以提高系统的容错能力。

主要组件

特点

HBase

HBase 是建立在 HDFS 上的分布式 NoSQL 数据库,适合海量数据的随机读写。

HDFS 主要用于文件存储,而 HBase 可以根据 Row Key 快速查询、插入和更新某条数据。

数据模型

主要组件

特点

MapReduce

MapReduce 是 Hadoop 的分布式批处理计算模型。

它将一个大型计算任务拆分为多个小任务,并分配到多台服务器上并行执行。

Map 阶段

Map 读取输入数据,并将其转换为键值对。

输入:Hadoop HBase Hadoop 输出: (Hadoop, 1) (HBase, 1) (Hadoop, 1)

Reduce 阶段

Reduce 对相同 Key 的数据进行汇总。

输出: (Hadoop, 2) (HBase, 1)

中间过程

特点

YARN

YARN 全称为 Yet Another Resource Negotiator,是 Hadoop 的资源管理和任务调度系统。

YARN 负责统一管理集群中的 CPU、内存等资源,并将资源分配给 MapReduce、Spark 等计算框架。

主要组件

工作流程

  1. 客户端向 ResourceManager 提交应用。
  2. ResourceManager 分配 Container。
  3. 在 Container 中启动 ApplicationMaster。
  4. ApplicationMaster 向 ResourceManager 申请更多资源。
  5. NodeManager 在 Container 中运行具体任务。
  6. ApplicationMaster 监控任务执行状态。
  7. 任务结束后释放资源。

YARN 不负责存储或处理数据,而是负责资源分配和任务调度。

ZooKeeper

ZooKeeper 是一个分布式协调服务,用于协调多个分布式节点之间的状态和行为。

主要功能

ZooKeeper 中的数据采用树形结构存储,每个节点称为 ZNode。

常见 ZNode 类型

在 Hadoop 生态中,ZooKeeper 常用于协调 HBase 节点、进行主节点选举和监控服务器状态。

ZooKeeper 主要保存协调信息,不适合存储大规模业务数据。

五个组件之间的关系

                Hadoop 生态

      ┌─────────────┼─────────────┐
      │             │             │
    HDFS           YARN        ZooKeeper
  数据存储       资源管理       分布式协调
      │             │             │
      │        MapReduce          │
      │         批量计算          │
      │                           │
      └──────── HBase ────────────┘
             随机读写数据库

对比总结

组件 核心作用 典型场景 HDFS 分布式文件存储 海量文件、大规模数据集 HBase 分布式 NoSQL 数据库 海量数据随机读写 MapReduce 分布式批处理 日志分析、数据统计 YARN 资源管理与任务调度 管理集群 CPU 和内存 ZooKeeper 分布式协调 主节点选举、状态监控

记忆方式:

HDFS 管存储,HBase 管查询,MapReduce 管计算,YARN 管资源,ZooKeeper 管协调。

第三章

名称节点中的FsImage和EditLog

NameNode 启动时,会先将 FsImage 文件中的内容加载到内存中,然后依次执行 EditLog 文件中记录的各项操作,使内存中的文件系统元数据与实际状态保持一致。

存储在内存中的元数据主要用于支持客户端的读操作。

当文件系统元数据在内存中成功建立后,系统会生成一个新的 FsImage 文件,并创建一个空的 EditLog 文件。

NameNode 启动后,HDFS 中产生的更新操作会继续写入 EditLog,而不是直接写入 FsImage。原因是 FsImage 通常很大,达到 GB 级别很常见。如果每次更新都直接修改 FsImage,会导致系统运行速度明显下降。

相比之下,EditLog 文件较小,将更新操作追加写入 EditLog 的效率更高。

每次执行写操作时,EditLog 都必须先完成同步更新,NameNode 才会向客户端返回操作成功的信息。

在 NameNode 运行期间,HDFS 中的所有更新操作都会直接写入 EditLog。随着系统持续运行,EditLog 文件会不断增大。

这在 NameNode 正常运行时通常不会产生明显影响。但是,当 NameNode 重启时,需要:

  1. 将 FsImage 中的文件系统元数据加载到内存;
  2. 按顺序执行 EditLog 中记录的所有更新操作;
  3. 恢复最新的文件系统元数据状态。

当 EditLog 文件非常大时,NameNode 需要执行大量日志记录,因此启动过程会非常缓慢。在此期间,HDFS 无法正常对外提供服务,从而影响用户使用。

SecondaryNameNode

为了解决 EditLog 不断增大导致 NameNode 启动缓慢的问题,HDFS 引入了 SecondaryNameNode。

SecondaryNameNode 会定期将 FsImage 和 EditLog 进行合并,生成新的 FsImage,这个过程称为 Checkpoint。

通过定期执行 Checkpoint,可以:

SecondaryNameNode 一般单独运行在一台机器上。

注意: SecondaryNameNode 不是 NameNode 的备用节点。它的主要作用是执行 Checkpoint,而不是在 NameNode 故障时直接接管 NameNode 的工作。


Edit page
Share this post:

Previous Post
大数据系统复习二
Next Post
深度学习实验笔记