青训营X豆包MarsCode 技术训练营 | 分布式存储领域

1 阅读5分钟

HDFS基本介绍

Hadoop

Hadoop 是一个开源的分布式计算框架,最初由 Apache 基金会开发。它允许用户在大规模数据集上进行分布式处理。Hadoop 由多个组件组成,其中最核心的两个组件是 HDFS(Hadoop Distributed File System)和 MapReduce。

Spark

Spark 是一个快速、通用的大规模数据处理引擎,支持多种计算模式,包括批处理、交互式查询、流处理和机器学习。与 Hadoop 的 MapReduce 相比,Spark 在内存中的数据处理速度更快,支持更丰富的数据处理模型。

应用层、调度层、存储层

  • 应用层:负责处理具体的业务逻辑,如数据分析、机器学习等。

  • 调度层:负责任务的调度和资源管理,如 YARN(Yet Another Resource Negotiator)。

  • 存储层:负责数据的存储和管理,如 HDFS。

架构原理

1. 架构

  • Client/SDK:客户端通过 SDK 与 HDFS 进行交互,执行读写操作。
  • NameNode (Active, Standby):NameNode 是 HDFS 的元数据节点,负责维护整个文件系统的目录树、文件和数据块的关系以及数据块存放的位置信息。通常有 Active 和 Standby 两个 NameNode,用于高可用性。
  • DataNode:DataNode 是实际存储数据块的节点,负责数据块的存取、心跳汇报和副本复制。

2. Client 写流程

  1. 打开文件:客户端通过调用 create 方法请求创建文件。

  2. 获取 DataNode 位置:NameNode 返回可以存储数据块的 DataNode 列表。

  3. 写入数据块:客户端将数据切分成块,并依次写入到指定的 DataNode。

  4. 确认写入:每个 DataNode 在接收到数据块后,向客户端发送确认消息。

  5. 关闭文件:客户端调用 close 方法通知 NameNode 文件写入完成。

3. Client 读流程

  1. 打开文件:客户端通过调用 open 方法请求读取文件。

  2. 获取 DataNode 位置:NameNode 返回包含文件数据块的 DataNode 列表。

  3. 读取数据块:客户端从最近的 DataNode 读取数据块。

  4. 合并数据块:客户端将读取的数据块合并成完整的文件。

  5. 关闭文件:客户端调用 close 方法结束读取操作。

4. 元数据节点 NameNode

  • 维护目录树:NameNode 维护整个文件系统的目录结构,类似于文件系统的根目录。

  • 维护文件和数据块的关系:NameNode 记录每个文件由哪些数据块组成。

  • 维护文件块存放节点信息:NameNode 记录每个数据块存储在哪些 DataNode 上。

  • 分配新文件存放节点:当客户端请求创建新文件时,NameNode 为其分配合适的 DataNode 存储数据块。

5. 数据节点 DataNode

  • 数据块存取:DataNode 负责存储和读取数据块。

  • 心跳汇报:DataNode 定期向 NameNode 发送心跳信息,报告其状态。

  • 副本复制:DataNode 之间相互复制数据块,以确保数据的冗余性和可靠性。

分布式存储系统通用基本概念

1. 容错能力

  • 定义:系统在部分节点或组件故障的情况下仍能正常运行的能力。

  • 实现方式:通过数据冗余(如副本复制)、故障检测和自动恢复机制来实现。

2. 一致性模型

  • 定义:分布式系统中数据的一致性保证程度。

  • 常见模型

  - 强一致性:所有节点在同一时刻看到的数据是一致的。

  - 弱一致性:数据更新后,其他节点可能需要一段时间才能看到更新后的数据。

  - 最终一致性:数据更新后,经过一定时间后所有节点最终看到一致的数据。

3. 可扩展性

  • 定义:系统能够随着数据量和负载的增加而扩展的能力。

  • 实现方式:通过水平扩展(增加更多的节点)和垂直扩展(增加单个节点的资源)来实现。

4. 节点体系

  • 定义:分布式系统中各个节点的角色和职责。

  • 常见节点类型

  - 主节点:负责协调和管理整个系统,如 NameNode。

  - 数据节点:负责存储和处理数据,如 DataNode。

  - 客户端节点:负责发起请求和接收响应,如 HDFS 客户端。

5. 数据放置

  • 定义:数据在分布式系统中的存储策略。

  • 常见策略

  - 均匀分布:数据均匀分布在各个节点上,以平衡负载。

  - 本地化:尽量将数据存储在离计算节点近的地方,减少网络传输开销。

  - 冗余:为数据块创建多个副本,提高容错能力。

6. 单机存储引擎

  • 定义:单个节点上的存储系统,负责数据的持久化和访问。

  • 常见存储引擎

  - 文件系统:如 ext4、XFS 等。

  - 键值存储:如 LevelDB、RocksDB 等。

  - 列存储:如 HBase、Cassandra 等。

总结

Hadoop和Spark作为大数据处理的两大框架,分别提供了强大的分布式计算和快速数据处理能力。HDFS通过Client/SDK、NameNode(Active和Standby)以及DataNode的协同工作,实现了高可用性和容错能力。客户端的读写流程展示了数据块的高效存取和管理。NameNode负责维护目录树、文件和数据块的关系,而DataNode则负责实际的数据存储和副本复制。