hadoop框架与核心组件刨析(二)HDFS

目录

一、元数据

[HDFS 元数据的主要内容](#HDFS 元数据的主要内容)

[HDFS 元数据的存储方式](#HDFS 元数据的存储方式)

[HDFS 元数据的管理](#HDFS 元数据的管理)

[HDFS 元数据的重要性](#HDFS 元数据的重要性)

[HDFS 元数据的局限性](#HDFS 元数据的局限性)

二、HDFS刨析

[HDFS 的核心特点](#HDFS 的核心特点)

[HDFS 的架构](#HDFS 的架构)

[HDFS 的数据存储机制](#HDFS 的数据存储机制)

[HDFS 的读写流程](#HDFS 的读写流程)

写流程:

读流程:

[HDFS 的高可用性(HA)](#HDFS 的高可用性(HA))

[HDFS 的优缺点](#HDFS 的优缺点)

优点:

缺点:

[HDFS 的应用场景](#HDFS 的应用场景)

[HDFS 的生态系统](#HDFS 的生态系统)

三、为什么HDFS是单点故障

[为什么 NameNode 是单点故障?](#为什么 NameNode 是单点故障?)

[HDFS 单点故障的影响](#HDFS 单点故障的影响)

[解决 HDFS 单点故障的方案](#解决 HDFS 单点故障的方案)


一、元数据

在讲述HDFS之前,首先需要了解以下元数据的概念:

所谓元数据,就是描述数据的数据,提供关于数据的上下文、结构、来源、格式等信息。它帮助用户理解、管理和使用数据,是数据管理的重要组成部分。

在HDFS中,元数据是描述文件系统结构和内容的关键信息。它由NameNode负责管理,是HDFS正常运行的基础。以下是详细介绍:

HDFS 元数据的主要内容

  1. 文件系统命名空间

    • 包括文件和目录的名称、层次结构、权限等信息。

    • 类似于传统文件系统的目录树结构。

  2. 文件到块的映射

    • 记录每个文件对应的数据块(Block)列表。

    • 文件被分割成固定大小的块(默认 128MB 或 256MB)。

  3. 块到 DataNode 的映射

    • 记录每个数据块存储在哪些 DataNode 上。

    • 数据块默认复制 3 份,存储在不同的 DataNode 上。

  4. 文件属性

    • 包括文件的创建时间、修改时间、访问权限、所有者、组等信息。
  5. 数据块属性

    • 包括块的大小、校验和(Checksum)、状态(如是否损坏)等信息。

HDFS 元数据的存储方式

  1. FsImage

    • 文件系统的完整镜像,存储了文件系统的命名空间和文件到块的映射。

    • 存储在 NameNode 的本地磁盘上。

    • 在 NameNode 启动时加载到内存中。

  2. EditLog

    • 记录文件系统的更改操作(如创建、删除、修改文件)。

    • 存储在 NameNode 的本地磁盘上。

    • 在 NameNode 运行时实时更新。

  3. 内存中的元数据

    • NameNode 启动时,将 FsImage 加载到内存中,并应用 EditLog 中的更改。

    • 内存中的元数据用于快速响应客户端的请求。

HDFS 元数据的管理

  1. NameNode

    • 负责管理元数据,包括文件系统命名空间、文件到块的映射、块到 DataNode 的映射等。

    • NameNode 是单点故障(SPOF),但可以通过高可用(HA)机制解决。

  2. Secondary NameNode

    • 定期合并 FsImage 和 EditLog,生成新的 FsImage,减少 NameNode 的启动时间。

    • 不是 NameNode 的备份,不能直接替代 NameNode。

  3. 高可用(HA)机制

    • 通过主备 NameNode(Active-Standby)实现高可用。

    • 使用 ZooKeeper 进行故障切换。


HDFS 元数据的重要性

  1. 文件系统操作

    • 客户端的所有文件系统操作(如读取、写入、删除)都依赖元数据。
  2. 数据定位

    • 元数据帮助客户端定位数据块所在的 DataNode。
  3. 数据一致性

    • 元数据确保文件系统的命名空间和数据块的一致性。
  4. 故障恢复

    • 元数据用于在 DataNode 故障时恢复数据块的副本。
    • 元数据用于在 DataNode 故障时恢复数据块的副本。

HDFS 元数据的局限性

  1. 单点故障

    • NameNode 是单点故障,一旦失效,整个文件系统将不可用(可通过 HA 解决)。
  2. 内存限制

    • NameNode 将元数据存储在内存中,大规模集群可能导致内存不足。
  3. 性能瓶颈

    • NameNode 需要处理大量的元数据请求,可能成为性能瓶颈。

二、HDFS刨析

HDFS(Hadoop Distributed File System) 是 Apache Hadoop 生态系统中的分布式文件系统,专为存储和处理大规模数据集而设计。它具有高容错性、高吞吐量和可扩展性,适合运行在廉价硬件上。


HDFS 的核心特点

  1. 高容错性

    • 数据自动复制到多个节点,即使硬件故障也能保证数据可用性。
  2. 高吞吐量

    • 优化了数据批量读取,适合数据密集型应用。
  3. 可扩展性

    • 支持从少量节点到数千节点的集群扩展。
  4. 廉价硬件

    • 设计用于运行在低成本硬件上,降低存储成本。
  5. 大数据支持

    • 适合存储超大文件(GB、TB 甚至 PB 级别)。

HDFS 的架构

HDFS 采用主从架构,主要包括以下组件:

  1. NameNode(主节点)

    • 负责管理文件系统的元数据(如文件名、目录结构、文件块位置等)。

    • 记录每个文件的块信息及其存储位置。

    • 单点故障(SPOF),但可以通过高可用(HA)机制解决。

  2. DataNode(从节点)

    • 负责存储实际的数据块。

    • 定期向 NameNode 汇报存储的块信息。

  3. Secondary NameNode(辅助节点)

    • 定期合并 NameNode 的编辑日志和文件系统镜像,减少 NameNode 的启动时间。

    • 不是 NameNode 的备份,不能直接替代 NameNode。


HDFS 的数据存储机制

  1. 文件分块

    • 文件被分割成固定大小的块(默认 128MB 或 256MB)。

    • 每个块独立存储,便于并行处理。

  2. 数据复制

    • 每个块默认复制 3 份,存储在不同的 DataNode 上。

    • 复制因子可配置,用于平衡存储成本和容错性。

  3. 数据分布

    • 块分布在不同机架和节点上,提高容错性和读取效率。

HDFS 的读写流程

写流程:
  1. 客户端向 NameNode 请求写入文件。

  2. NameNode 检查权限并分配 DataNode。

  3. 客户端将数据写入第一个 DataNode,DataNode 将数据复制到其他节点。

  4. 写入完成后,NameNode 更新元数据。

读流程:
  1. 客户端向 NameNode 请求读取文件。

  2. NameNode 返回文件块的位置信息。

  3. 客户端直接从 DataNode 读取数据。


HDFS 的高可用性(HA)

  1. NameNode 高可用

    • 通过主备 NameNode 实现高可用(Active-Standby)。

    • 使用 ZooKeeper 进行故障切换。

  2. 数据高可用

    • 通过数据复制和块分布实现。

HDFS 的优缺点

优点:
  1. 适合存储超大文件。

  2. 高容错性和高吞吐量。

  3. 可扩展性强,支持大规模集群。

  4. 运行在廉价硬件上,成本低。

缺点:
  1. 不适合低延迟访问(如实时查询)。

  2. 不支持频繁的文件修改(适合一次写入、多次读取的场景)。

  3. NameNode 是单点故障(可通过 HA 解决)。


HDFS 的应用场景

  1. 大数据存储

    • 存储海量数据,支持 MapReduce、Spark 等计算框架。
  2. 数据仓库

    • 作为数据湖的基础存储层。
  3. 日志存储

    • 存储系统日志、应用日志等。
  4. 备份与归档

    • 用于长期数据存储和备份。

HDFS 的生态系统

  1. Hadoop MapReduce

    • 基于 HDFS 的批处理框架。
  2. Apache Spark

    • 支持 HDFS 作为数据源。
  3. Apache Hive

    • 使用 HDFS 存储数据,提供 SQL 查询功能。
  4. Apache HBase

    • 基于 HDFS 的分布式数据库。

三、为什么HDFS是单点故障

HDFS(Hadoop Distributed File System) 的单点故障问题主要源于其架构设计中的 NameNode。NameNode 是 HDFS 的核心组件,负责管理文件系统的元数据(如文件目录结构、文件到块的映射、块到 DataNode 的映射等)。如果 NameNode 发生故障,整个 HDFS 将无法正常运行,这就是所谓的单点故障(Single Point of Failure, SPOF)。


为什么 NameNode 是单点故障?

  1. NameNode 的核心作用

    • NameNode 是 HDFS 的主节点,负责管理所有的元数据。

    • 客户端的所有文件系统操作(如读取、写入、删除)都需要与 NameNode 交互。

    • 如果 NameNode 不可用,客户端无法获取元数据,也就无法访问文件系统。

  2. 元数据的集中管理

    • HDFS 的设计初衷是处理大规模数据,因此元数据被集中存储在 NameNode 的内存中,以提高访问效率。

    • 这种集中式管理方式使得 NameNode 成为系统的关键节点。

  3. NameNode 的无状态性

    • NameNode 本身不存储实际数据(数据存储在 DataNode 上),但它存储了所有数据块的位置信息。

    • 如果 NameNode 失效,客户端无法知道数据块存储在哪些 DataNode 上,导致数据无法访问。

  4. Secondary NameNode 的局限性

    • Secondary NameNode 定期合并 FsImage 和 EditLog,但它并不是 NameNode 的备份。

    • 它不能直接接管 NameNode 的工作,因此在 NameNode 故障时无法提供故障转移。


HDFS 单点故障的影响

  1. 系统不可用

    • NameNode 故障后,客户端无法访问文件系统,导致所有依赖 HDFS 的应用和服务中断。
  2. 数据不可访问

    • 即使数据仍然存储在 DataNode 上,但由于缺少元数据,客户端无法定位和访问这些数据。
  3. 恢复时间长

    • 如果 NameNode 发生故障,需要手动恢复元数据,这可能导致较长的停机时间。

解决 HDFS 单点故障的方案

为了应对 NameNode 的单点故障问题,Hadoop 社区引入了 高可用性(High Availability, HA) 机制。以下是主要的解决方案:

  1. NameNode 高可用(HA)

    • 通过配置 主备 NameNode(Active-Standby) 实现高可用。

    • 主 NameNode(Active)负责处理客户端请求,备 NameNode(Standby)同步主 NameNode 的元数据。

    • 当主 NameNode 发生故障时,备 NameNode 会自动接管工作,确保系统继续运行。

  2. 共享存储(Shared Storage)

    • 主备 NameNode 共享一个存储系统(如 NFS、Quorum Journal Manager, QJM)来同步元数据。

    • 主 NameNode 将 EditLog 写入共享存储,备 NameNode 从共享存储读取并应用这些更改。

  3. ZooKeeper 故障切换

    • 使用 ZooKeeper 实现自动故障检测和切换。(后面会讲到)

    • 当主 NameNode 失效时,ZooKeeper 会触发备 NameNode 接管工作。

  4. 元数据备份

    • 定期备份 NameNode 的元数据(FsImage 和 EditLog),以便在故障时快速恢复。

如果你看到这里,非常感谢你的观看,动动宝贵的手指,给主播一键三连,嘻嘻。

相关推荐
problc1 小时前
Manus AI 全球首款通用型 Agent,中国制造
大数据·人工智能·制造
*星星之火*4 小时前
【Flink银行反欺诈系统设计方案】3.欺诈的7种场景和架构方案、核心表设计
大数据·架构·flink
黑客KKKing5 小时前
Refreshtoken 前端 安全 前端安全方面
大数据·前端·网络·安全·web安全
永洪科技5 小时前
共绘智慧升级,看永洪科技助力由由集团起航智慧征途
大数据·数据分析·数据可视化·bi
好记性+烂笔头5 小时前
Hadoop八股
大数据·hadoop·分布式
Python数据分析与机器学习5 小时前
《基于Hadoop的出租车需求预测系统设计与实现》开题报告
大数据·hadoop·分布式·python·算法·数据挖掘·数据分析
StableAndCalm5 小时前
什么是hadoop
大数据·hadoop·分布式
麻芝汤圆5 小时前
在虚拟机上安装 Hadoop 全攻略
大数据·linux·服务器·hadoop·windows·分布式
lqlj22335 小时前
第一个Hadoop程序
大数据·hadoop·分布式
2302_799525745 小时前
【Hadoop】什么是Zookeeper?如何理解Zookeeper?
大数据·hadoop·zookeeper