《深入理解大数据:大数据处理与编程实践》一一3.2 HDFS可靠性设计

简介:

本节书摘来自华章计算机《深入理解大数据:大数据处理与编程实践》一书中的第3章,第3.2节,作者 主 编:黄宜华(南京大学)副主编:苗凯翔(英特尔公司),更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.2 HDFS可靠性设计

Hadoop能得到如此广泛的应用,和背后默默支持它的HDFS是分不开的。作为一个能在成百上千个节点上运行的文件系统,HDFS在可靠性设计上做了非常周密的考虑。
3.2.1 HDFS数据块多副本存储设计
作为一个分布式文件系统,HDFS采用了在系统中保存多个副本的方式保存数据(以下简称多副本),且同一个数据块的多个副本会存放在不同节点上,如图3-2所示。采用这种多副本方式有以下几个优点:1)采用多副本,可以让客户从不同的数据块中读取数据,加快传输速度;2)因为HDFS的DataNode之间通过网络传输数据,如果采用多个副本可以判断数据传输是否出错;3)多副本可以保证某个DataNode失效的情况下,不会丢失数据。
image

图3-2 HDFS数据块多副本存储
HDFS按照块的方式随机选择存储节点,为了可以判断文件是否出错,副本个数默认为3(注:如果副体个数为1或2的话,是不能判断数据对错的)。出于数据传输代价以及错误恢复等多方面的考虑,副本的保存并不是均匀分布在集群之中的,关于副本保存分布和维持DataNode负载均衡的更详细的内容,可以参考后面3.4.4节关于balancer的介绍。
3.2.2 HDFS可靠性的设计实现
1.?安全模式
HDFS刚刚启动时,NameNode会进入安全模式(safe mode)。处于安全模式的NameNode不能做任何的文件操作,甚至内部的副本创建也是不允许的。NameNode此时需要和各个DataNode通信,获得DataNode保存的数据块信息,并对数据块信息进行检查。只有通过了NameNode的检查,一个数据块才被认为是安全的。当认为安全的数据块所占的比例达到了某个阈值(可配置),NameNode才会退出。
2.?SecondaryNameNode
Hadoop中使用SecondaryNameNode来备份NameNode的元数据,以便在NameNode失效时能从SecondaryNameNode恢复出NameNode上的元数据。SecondaryNameNode充当NameNode的一个副本,它本身并不处理任何请求,因为处理这些请求都是NameNode的责任。
NameNode中保存了整个文件系统的元数据,而SecondaryNameNode的作用就是周期性(周期的长短也是可以配置的)保存NameNode的元数据。这些元数据中包括文件镜像数据FsImage和编辑日志数据EditLog。FsImage相当于HDFS的检查点,NameNode启动时候会读取FsImage的内容到内存,并将其与EditLog日志中的所有修改信息合并生成新的FsImage;在NameNode运行过程中,所有关于HDFS的修改都将写入EditLog。这样,如果NameNode失效,可以通过Secondary NameNode中保存的FsImage和EditLog数据恢复出NameNode最近的状态,尽量减少损失。
3.?心跳包(HeartBeats)和副本重新创建(re-replication)
如果HDFS运行过程中,一部分DataNode因为崩溃或是掉线等原因,离开了HDFS系统,怎么办?为了保证NameNode和各个DataNode的联系,HDFS采用了心跳包(Heart beat)机制。位于整个HDFS核心的NameNode,通过周期性的活动来检查DataNode的活性,就像跳动的心脏一样,所以,这里把这些包就叫做心跳包。NameNode周期性向管理的各个DataNode发送心跳包,而收到心跳包的DataNode则需要回复。因为心跳包总是定时发送的,所以NameNode就把要执行的命令也通过心跳包发送给DataNode,而DataNode收到心跳包,一方面回复NameNode,另一方面就开始了与用户或者应用的数据传输。
如果侦测到了DataNode失效,那么之前保存在这个DataNode上的数据就变成不可用的。那么,如果有的副本存储在失效的DataNode上,则需要重新创建这个副本,放到另外可用的地方。其他需要创建副本的情况包括数据块校验失败等。
4.?数据一致性
一般来讲,DataNode与应用数据交互的大部分情况都是通过网络进行的,而网络数据传输带来的一大问题就是数据是否能原样到达。为了保证数据的一致性,HDFS采用了数据校验和(CheckSum)机制。创建文件时,HDFS会为这个文件生成一个校验和,校验和文件和文件本身保存在同一空间中。传输数据时会将数据与校验和一起传输,应用收到数据后可以进行校验,如果两个校验的结果不同,则文件肯定出错了,这个数据块就变成了无效的。如果判定数据无效,就需要从其他DataNode上读取副本。
5.?租约
在Linux中,为了防止出现多个进程向同一个文件写数据的情况,采用了文件加锁的机制。而在HDFS中,同样也需要一种机制来防止同一个文件被多个人写入数据。这种机制就是租约(Lease)。每当写入文件之前,一个客户端必须要获得NameNode发放的一个租约。NameNode保证同一个文件只会发放一个允许写的租约,那么就可以有效防止出现多人写入的情况。
不过,租约的作用不止于此。如果NameNode发放租约之后崩溃了,怎么办?或者如果客户端获得租约之后崩溃了,又怎么办?第一个问题可以通过前面提到的恢复机制解决。而第二个问题,则通过在租约中加入时间限制来解决。每当租约要到期时,客户端需要向NameNode申请更新租约,NameNode“审核”之后,重新发放租约。如果客户端不申请,那就说明客户端不需要读写这一文件或者已经崩溃了,NameNode收回租约即可。
6.?回滚
HDFS与Hadoop一样处于发展阶段。而某个升级可能会导致BUG或者不兼容的问题,这些问题还可能导致现有的应用运行出错。这一问题可以通过回滚回到旧版本解决。HDFS安装或者升级时,会将当前的版本信息保存起来,如果升级之后一段时间内运行正常,可以认为这次升级没有问题,重新保存版本信息,否则,根据保存的旧版本信息,将HDFS恢复至之前的版本。

相关实践学习
自建数据库迁移到云数据库
本场景将引导您将网站的自建数据库平滑迁移至云数据库RDS。通过使用RDS,您可以获得稳定、可靠和安全的企业级数据库服务,可以更加专注于发展核心业务,无需过多担心数据库的管理和维护。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
1273 6
|
消息中间件 分布式计算 关系型数据库
大数据-140 - ClickHouse 集群 表引擎详解5 - MergeTree CollapsingMergeTree 与其他数据源 HDFS MySQL
大数据-140 - ClickHouse 集群 表引擎详解5 - MergeTree CollapsingMergeTree 与其他数据源 HDFS MySQL
456 0
|
存储 分布式计算 资源调度
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(一)
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(一)
453 5
|
资源调度 数据可视化 大数据
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(二)
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(二)
341 4
|
XML 分布式计算 资源调度
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
732 5
|
消息中间件 SQL 分布式计算
大数据-74 Kafka 高级特性 稳定性 - 控制器、可靠性 副本复制、失效副本、副本滞后 多图一篇详解
大数据-74 Kafka 高级特性 稳定性 - 控制器、可靠性 副本复制、失效副本、副本滞后 多图一篇详解
342 2
|
XML 存储 分布式计算
【赵渝强老师】史上最详细:Hadoop HDFS的体系架构
HDFS(Hadoop分布式文件系统)由三个核心组件构成:NameNode、DataNode和SecondaryNameNode。NameNode负责管理文件系统的命名空间和客户端请求,维护元数据文件fsimage和edits;DataNode存储实际的数据块,默认大小为128MB;SecondaryNameNode定期合并edits日志到fsimage中,但不作为NameNode的热备份。通过这些组件的协同工作,HDFS实现了高效、可靠的大规模数据存储与管理。
1881 70
|
SQL 分布式计算 监控
Hadoop-20 Flume 采集数据双写至本地+HDFS中 监控目录变化 3个Agent MemoryChannel Source对比
Hadoop-20 Flume 采集数据双写至本地+HDFS中 监控目录变化 3个Agent MemoryChannel Source对比
357 3
|
XML 资源调度 网络协议
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(二)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(二)
807 5
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
432 4

热门文章

最新文章