Hadoop 系列(一)—— 分布式文件系统 HDFS

本文深入解析了HDFS(Hadoop分布式文件系统)的设计原理,包括其架构、命名空间、数据复制策略、副本布局及故障处理机制。HDFS采用主从架构,由NameNode和DataNode组成,支持高容错、高吞吐量的大文件存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、介绍

HDFSHadoop Distributed File System)是 Hadoop 下的分布式文件系统,具有高容错、高吞吐量等特性,可以部署在低成本的硬件上。

二、HDFS 设计原理

hdfsarchitecture.png

2.1 HDFS 架构

HDFS 遵循主/从架构,由单个 NameNode(NN) 和多个 DataNode(DN) 组成:

  • NameNode : 负责执行有关 文件系统命名空间 的操作,例如打开,关闭、重命名文件和目录等。它同时还负责集群元数据的存储,记录着文件中各个数据块的位置信息。
  • DataNode:负责提供来自文件系统客户端的读写请求,执行块的创建,删除等操作。

2.2 文件系统命名空间

HDFS 的 文件系统命名空间 的层次结构与大多数文件系统类似 (如 Linux), 支持目录和文件的创建、移动、删除和重命名等操作,支持配置用户和访问权限,但不支持硬链接和软连接。NameNode 负责维护文件系统名称空间,记录对名称空间或其属性的任何更改。

2.3 数据复制

由于 Hadoop 被设计运行在廉价的机器上,这意味着硬件是不可靠的,为了保证容错性,HDFS 提供了数据复制机制。HDFS 将每一个文件存储为一系列,每个块由多个副本来保证容错,块的大小和复制因子可以自行配置(默认情况下,块大小是 128M,默认复制因子是 3)。

hdfsdatanodes.png

2.4 数据复制的实现原理

大型的 HDFS 实例在通常分布在多个机架的多台服务器上,不同机架上的两台服务器之间通过交换机进行通讯。在大多数情况下,同一机架中的服务器间的网络带宽大于不同机架中的服务器之间的带宽。因此 HDFS 采用机架感知副本放置策略,对于常见情况,当复制因子为 3 时,HDFS 的放置策略是:

在写入程序位于 datanode 上时,就优先将写入文件的一个副本放置在该 datanode 上,否则放在随机 datanode 上。之后在另一个远程机架上的任意一个节点上放置另一个副本,并在该机架上的另一个节点上放置最后一个副本。此策略可以减少机架间的写入流量,从而提高写入性能。

hdfs-%E6%9C%BA%E6%9E%B6.png

如果复制因子大于 3,则随机确定第 4 个和之后副本的放置位置,同时保持每个机架的副本数量低于上限,上限值通常为 (复制系数 - 1)/机架数量 + 2,需要注意的是不允许同一个 dataNode 上具有同一个块的多个副本。

2.5 副本的选择

为了最大限度地减少带宽消耗和读取延迟,HDFS 在执行读取请求时,优先读取距离读取器最近的副本。如果在与读取器节点相同的机架上存在副本,则优先选择该副本。如果 HDFS 群集跨越多个数据中心,则优先选择本地数据中心上的副本。

2.6 架构的稳定性

1. 心跳机制和重新复制

每个 DataNode 定期向 NameNode 发送心跳消息,如果超过指定时间没有收到心跳消息,则将 DataNode 标记为死亡。NameNode 不会将任何新的 IO 请求转发给标记为死亡的 DataNode,也不会再使用这些 DataNode 上的数据。 由于数据不再可用,可能会导致某些块的复制因子小于其指定值,NameNode 会跟踪这些块,并在必要的时候进行重新复制。

2. 数据的完整性

由于存储设备故障等原因,存储在 DataNode 上的数据块也会发生损坏。为了避免读取到已经损坏的数据而导致错误,HDFS 提供了数据完整性校验机制来保证数据的完整性,具体操作如下:

当客户端创建 HDFS 文件时,它会计算文件的每个块的 校验和,并将 校验和 存储在同一 HDFS 命名空间下的单独的隐藏文件中。当客户端检索文件内容时,它会验证从每个 DataNode 接收的数据是否与存储在关联校验和文件中的 校验和 匹配。如果匹配失败,则证明数据已经损坏,此时客户端会选择从其他 DataNode 获取该块的其他可用副本。

3.元数据的磁盘故障

FsImageEditLog 是 HDFS 的核心数据,这些数据的意外丢失可能会导致整个 HDFS 服务不可用。为了避免这个问题,可以配置 NameNode 使其支持 FsImageEditLog 多副本同步,这样 FsImageEditLog 的任何改变都会引起每个副本 FsImageEditLog 的同步更新。

4.支持快照

快照支持在特定时刻存储数据副本,在数据意外损坏时,可以通过回滚操作恢复到健康的数据状态。

三、HDFS 的特点

3.1 高容错

由于 HDFS 采用数据的多副本方案,所以部分硬件的损坏不会导致全部数据的丢失。

3.2 高吞吐量

HDFS 设计的重点是支持高吞吐量的数据访问,而不是低延迟的数据访问。

3.3 大文件支持

HDFS 适合于大文件的存储,文档的大小应该是是 GB 到 TB 级别的。

3.3 简单一致性模型

HDFS 更适合于一次写入多次读取 (write-once-read-many) 的访问模型。支持将内容追加到文件末尾,但不支持数据的随机访问,不能从文件任意位置新增数据。

3.4 跨平台移植性

HDFS 具有良好的跨平台移植性,这使得其他大数据计算框架都将其作为数据持久化存储的首选方案。

附:图解HDFS存储原理

说明:以下图片引用自博客:翻译经典 HDFS 原理讲解漫画

1. HDFS写数据原理

hdfs-write-1.jpg
hdfs-write-2.jpg
hdfs-write-3.jpg

2. HDFS读数据原理

hdfs-read-1.jpg

3. HDFS故障类型和其检测方法

hdfs-tolerance-1.jpg
hdfs-tolerance-2.jpg

第二部分:读写故障的处理

hdfs-tolerance-3.jpg

第三部分:DataNode 故障处理

hdfs-tolerance-4.jpg

副本布局策略

hdfs-tolerance-5.jpg

参考资料

  1. Apache Hadoop 2.9.2 > HDFS Architecture
  2. Tom White . hadoop 权威指南 [M] . 清华大学出版社 . 2017.
  3. 翻译经典 HDFS 原理讲解漫画

更多大数据系列文章可以参见 GitHub 开源项目大数据入门指南

转载于:https://www.cnblogs.com/heibaiying/p/11304445.html

### Hadoop 安装教程 Hadoop 的安装分为单机模式和集群模式两种主要方式。对于初学者来说,建议先尝试单机模式来理解其工作原理。 #### 单机模式安装步骤: - 下载并解压 Hadoop 发行版到指定位置。 - 修改配置文件 `etc/hadoop/core-site.xml` 和 `etc/hadoop/hdfs-site.xml` 中的相关参数设置[^1]。 ```xml <!-- core-site.xml --> <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration> <!-- hdfs-site.xml --> <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration> ``` - 设置环境变量,在 `.bashrc` 或者其他 shell 配置文件中加入如下内容: ```shell export JAVA_HOME=/path/to/java export HADOOP_INSTALL=/path/to/hadoop export PATH=$PATH:$HADOOP_INSTALL/bin:$HADOOP_INSTALL/sbin ``` - 执行初始化命令完成 NameNode 格式化操作:`hdfs namenode -format`[^2]。 启动 Hadoop 服务可以通过运行脚本来实现,通常位于 `$HADOOP_HOME/sbin/start-dfs.sh` 文件里。 --- ### 分布式文件系统 (HDFS) 操作指南 为了更好地掌握 HDFS 使用方法,可以从以下几个方面入手: #### 基础命令实践 通过 Linux 终端连接至已部署好的 Hadoop 环境后,可以利用系列基础命令来进行数据管理活动。例如创建目录、上传下载文件等动作均能借助简单的指令快速达成目的。 - 创建新目录:`hdfs dfs -mkdir /user/testdir` - 查看文件列表:`hdfs dfs -ls /user/` - 上载本地文件至远程服务器上的特定路径下:`hdfs dfs -put localfile.txt /user/remotefile.txt` - 将远端资源取回本地保存:`hdfs dfs -get /user/remotefile.txt ./localcopy.txt` 这些常用功能有助于加深对整个体系结构的理解程度,并为进步探索更复杂的特性打下坚实的基础。 #### 数据冗余与安全性保障措施 考虑到实际应用场景下的需求差异性较大,因此有必要深入了解有关提高系统稳定性和保护重要资料免受意外损害的方法论。比如多副本机制能够有效防止因硬件故障而导致的数据丢失风险;而定期备份元数据则可以在遇到逻辑错误时迅速恢复正常运作状态。 特别值得注意的是编辑日志(`edits`)的作用——它用于追踪所有的修改行为,从而支持增量式的快照生成和服务重启后的状态重建。当需要分析这类二进制格式的日志条目时,则可通过专门提供的工具将其转换成易于解析的形式如XML文档以便后续处理[^4]。 #### 处理安全模式 有时出于维护或者优化性能的目的,管理员可能会主动触发进入所谓的“安全模式”。在此期间不允许任何写入请求被执行直到确认无误后再手动解除限制条件继续正常运转流程。具体而言有四个关联性的子命令可供调用以控制该特殊状态下的系列变更事项[^5]: - 查询当前所处的状态:`hdfs dfsadmin -safemode get` - 请求立即切换出去:`hdfs dfsadmin -safemode leave` - 主动激活防护屏障:`hdfs dfsadmin -safemode enter` - 自动等待直至满足退出前提:`hdfs dfsadmin -safemode wait` 上述知识点构成了关于 HDFS 初级使用的入门手册框架,希望可以帮助读者建立起清晰的概念模型并且具备定的动手能力去开展更多深入的研究课题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值