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 写流程
-
打开文件:客户端通过调用
create
方法请求创建文件。 -
获取 DataNode 位置:NameNode 返回可以存储数据块的 DataNode 列表。
-
写入数据块:客户端将数据切分成块,并依次写入到指定的 DataNode。
-
确认写入:每个 DataNode 在接收到数据块后,向客户端发送确认消息。
-
关闭文件:客户端调用
close
方法通知 NameNode 文件写入完成。
3. Client 读流程
-
打开文件:客户端通过调用
open
方法请求读取文件。 -
获取 DataNode 位置:NameNode 返回包含文件数据块的 DataNode 列表。
-
读取数据块:客户端从最近的 DataNode 读取数据块。
-
合并数据块:客户端将读取的数据块合并成完整的文件。
-
关闭文件:客户端调用
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则负责实际的数据存储和副本复制。