0%

加密算法简介

加密算法是保障信息安全的核心技术,根据加密密钥与解密密钥的关系,可分为对称加密算法非对称加密算法两大类。以下介绍几种常见的加密算法:

对称加密算法(Symmetric Encryption)

对称加密算法的特点是加密和解密使用相同的密钥,运算速度快,适合处理大量数据。

AES(Advanced Encryption Standard,高级加密标准)

  • 地位:目前应用最广泛的对称加密算法,是美国联邦政府采用的标准,替代了 DES。
  • 特点:
    • 支持多种密钥长度:128 位、192 位、256 位,密钥长度越长,安全性越高(256 位安全性最高)。
    • 加密效率高,适合加密大文件或实时通信数据(如 HTTPS 的对称加密阶段、文件加密等)。
    • 分组加密:将数据分成固定长度的块(128 位)进行加密,采用迭代加密方式。
  • 应用场景:数据库加密、本地文件加密、SSL/TLS 会话中的数据传输加密等。

DES(Data Encryption Standard,数据加密标准)

  • 地位:早期广泛使用的对称加密算法,后因安全性不足被 AES 替代。
  • 特点:
    • 密钥长度为 56 位(实际存储为 64 位,含 8 位校验位),密钥长度过短,容易被暴力破解。
    • 分组加密:以 64 位为分组对数据加密。
  • 局限性:随着计算能力提升,56 位密钥已无法满足安全需求,目前已基本被淘汰,仅在一些 legacy 系统中存在。
  • 衍生算法:3DES(Triple DES),通过三次 DES 加密提高安全性,但效率较低,逐渐被 AES 取代。
阅读全文 »

HDFS DataNode工作机制详解:数据存储与可靠性保障

DataNode 是 HDFS 集群的 “数据载体”,负责实际数据的存储、读写和副本管理,其工作机制直接决定了 HDFS 的数据可靠性和读写性能。本文将从 DataNode 的核心职责、数据完整性验证、心跳机制、故障处理到核心配置等方面,全面解析 DataNode 的运行逻辑。

DataNode 的核心职责

DataNode 作为 HDFS 的从节点,部署在集群的多个服务器上,主要承担以下核心职责:

  • 数据存储:将文件分割为固定大小的数据块(Block),以本地文件形式存储在磁盘上;
  • 副本管理:根据 NameNode 的指令复制或删除数据块,确保每个块的副本数符合配置(默认 3 个);
  • 状态汇报:定期向 NameNode 发送心跳和块报告,汇报节点状态和存储的块信息;
  • 数据读写:响应客户端和其他 DataNode 的数据读写请求,参与数据传输;
  • 完整性验证:通过校验和(CheckSum)确保存储的数据块未被损坏。

DataNode 生命周期:从启动到运行

DataNode 的运行过程可分为 启动初始化常态运行 两个阶段,每个阶段都有明确的交互流程。

1. 启动初始化阶段

DataNode 启动时需完成与 NameNode 的注册和元数据同步,流程如下:

sequenceDiagram  
    participant DN[DataNode]  
    participant NN[NameNode]  
    DN->>NN: 发送注册请求(包含节点 ID、存储目录等信息)  
    NN->>DN: 验证注册信息,返回注册成功响应  
    DN->>DN: 扫描本地存储目录,收集所有数据块信息(Block ID、大小、校验和)  
    DN->>NN: 发送完整块报告(Block Report),包含所有块的元数据  
    NN->>DN: 确认块报告,更新集群块映射信息  
    Note over DN,NN: 初始化完成,DataNode 进入常态运行
关键步骤解析
  • 注册机制:DataNode 首次启动时生成唯一节点 ID(存储在 dfs.datanode.data.dir/current/VERSION 文件中),后续启动使用该 ID 注册,避免 NameNode 重复识别;
  • 块报告:DataNode 扫描本地存储目录(dfs.datanode.data.dir 配置),收集所有块的元数据(如块 ID、大小、修改时间),并一次性发送给 NameNode,用于构建全局块映射。
阅读全文 »

HDFS NameNode 工作机制深度解析:元数据管理的核心逻辑

NameNode 作为 HDFS 的 “大脑”,负责管理文件系统的元数据和全局协调,其工作机制直接决定了 HDFS 的可靠性和性能。本文将从元数据持久化、集群启动流程、Secondary NameNode 合并机制到核心配置等方面,全面解析 NameNode 的核心工作原理。

NameNode 的核心职责

NameNode 是 HDFS 集群的中心节点,主要承担以下职责:

  • 元数据管理:维护文件系统的命名空间(目录树、文件名)、文件属性(权限、时间戳)及文件与数据块(Block)的映射关系;
  • 集群协调:管理 DataNode 心跳、块报告,控制安全模式,配置副本策略;
  • 客户端交互:响应客户端的文件读写请求,返回数据块的存储位置信息。

关键特性:NameNode 不存储实际数据,仅管理元数据,其性能和可靠性依赖高效的元数据持久化机制。

元数据持久化:内存与磁盘的协同

NameNode 的元数据需同时存在于 内存磁盘 中:内存用于高效访问,磁盘用于持久化存储(防止节点故障丢失数据)。核心依赖两个文件:FsImageEdits

1. 内存元数据(In-Memory Metadata)

  • 存储内容:文件系统的完整命名空间、文件 - 块映射、块 - DataNode 映射等实时状态;
  • 特性:读写速度极快,但易失性(节点重启或故障会丢失);
  • 容量限制:元数据总量受限于 NameNode 的内存大小,因此 HDFS 可存储的文件总数有限。
阅读全文 »

HDFS小文件处理全攻略:问题根源与解决方案详解

HDFS 对大文件存储和处理具有天然优势,但在面对大量小文件(通常指大小远小于 HDFS 块大小,如几 KB 至几十 MB 的文件)时,会暴露出严重的性能问题。本文将深入分析小文件的危害,详解 Hadoop 生态中处理小文件的核心方案与最佳实践。

小文件的定义与危害

什么是小文件?

在 HDFS 中,小文件指大小远小于默认块大小(128MB)的文件。例如,1MB 的日志文件、5KB 的图片文件等,均属于小文件范畴。

小文件为何会成为问题?

小文件的危害主要源于 HDFS 的架构设计,具体表现为:

1. NameNode 内存耗尽
  • NameNode 需存储每个文件的元数据(文件名、路径、块列表、权限等),每个文件 / 目录的元数据约占 150B 内存
  • 若集群存在 1 亿个小文件,仅元数据就需消耗约 15GB 内存(1 亿 × 150B),远超普通服务器的内存容量;
  • 内存耗尽会导致 NameNode 性能下降,甚至引发集群不可用。
2. 计算框架效率低下
  • MapReduce、Spark 等计算框架通常按文件块划分任务(每个块对应一个 Map 任务),大量小文件会产生 过多 Map 任务
  • 任务启动、调度、销毁的开销远超实际计算时间,导致作业总耗时激增;
  • 例如:1 亿个 1MB 小文件会产生 1 亿个 Map 任务,线程管理开销极大。
3. 存储资源浪费
  • 即使文件大小远小于块大小(如 1MB 文件),HDFS 仍会为其分配一个块(默认 128MB),虽然实际仅占用 1MB 磁盘空间,但块的元数据仍按完整块记录;
  • 小文件的副本机制(默认 3 副本)会进一步放大存储浪费。
阅读全文 »

HDFS文件块(Block)深度解析:设计原理与实践指南

HDFS 文件块(Block)是 HDFS 分布式存储的核心单元,其大小设计直接影响集群性能和数据管理效率。本文将从文件块的基本概念、大小设计原理、配置方法到块信息查看等方面,全面解析 HDFS 文件块的工作机制。

HDFS 文件块的基本概念

HDFS 将所有文件分割为固定大小的 数据块(Block) 进行存储,每个块作为独立的存储单元分布在不同的 DataNode 上,并通过多副本机制保证可靠性。

核心特性

  • 固定大小:默认 128MB(Hadoop 2.7.x 版本),可通过配置调整;
  • 独立存储:每个块独立存储在 DataNode 上,块的副本分布在不同节点;
  • 透明性:文件块的分割和存储对用户透明,用户操作的是完整文件,而非单个块;
  • 空间高效性:小于块大小的文件不会占用整个块空间(如 10MB 文件仅占用 10MB 磁盘空间)。

文件块大小的设计原理:平衡寻址时间与传输效率

HDFS 块大小的设计目标是 最小化 “寻址时间” 与 “传输时间” 的比例,核心原则是:块大小应足够大,使得传输一个块的时间远大于定位块的时间

为什么默认块大小是 128MB?

  • 磁盘传输速度:现代磁盘的连续传输速率约为 100MB/s,128MB 的块传输时间约为 1.28 秒,而定位块的寻址时间通常为毫秒级(如 10ms),此时寻址时间占比极低(约 0.8%),效率最优;
  • 历史演进:Hadoop 1.x 默认为 64MB,随着磁盘速度提升,2.x 版本调整为 128MB,以适应更高的传输速率。
阅读全文 »