HDFS原理与应用| 青训营笔记

104 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第3天 一。HDFS的设计与实现 二。HDFS的产品化体系建设 三。hdfs多场景应用 四。分布式存储系统通用基本概念

一、基本介绍 1. 应用层:map reduce 、spark 调度层:yarn 存储层:HDFS

1.1Windows单机文件系统 1.2Linux单机文件系统:zfs,xfs,ext4等 1.3分布式文件系统:大容量,高可靠,低成本 1.4分布式存储系统:对象存储、文件系统、块存储、数据库 1.5HDFS功能特性:分布式、容错、高可用、高吞吐、可扩展、廉价

二、架构原理

2.1 hdfs组件 三大件:client/SDK、namenode(一个中枢节点,三大件中最复杂的)、datanode(用户数据最终都存在放到本身硬盘) 2.2client写流程 2.3client读流程 2.4元数据节点namenode 2.5数据节点DataNode:数据块存储、心跳汇报、副本复制

三、关键设计 分布式存储系统基本概念 容错能力、一致性模型(多副本存放,一致性要解决保障多副本内容一致)、可扩展性、节点体系(常见的有主从模式、对等模式、不管哪种、高可用是必须的功能)、数据放置(系统是由多节点组成,数据是多个副本存放时,需要考虑数据存放的策略)、单机存储引擎(数据需要落盘持久化)

3.1namenode目录树维护 fsimage:文件系统目录树,完整的存放在内存中,定时存放到硬盘上,修改只会修改内存中的目录树 ditlog:目录树的修改日志,类似数据库的日志,账本功能,记录一些条目

3.2namenode数据放置 数据块信息维护:目录树存放每个文件的块ID,namenode维护了每个数据块所在的信息节点,namenode根据DataNode汇报的信息动态维护位置信息,namenode不会持久化数据块位置信息

数据放置策略:新数据存放到哪些节点,数据均衡需要怎么合理搬迁数据,三个副本怎么合理放置

3.3DataNode 数据块的硬盘存放:文件再namenode已分割成block,DataNode以block为单位对数据进行存取

启动扫盘:DataNode需要知道本机存放了哪些数据块,启动时把本机硬盘上的数据块列表加载在内存中

3.4HDFS写异常处理:lease recovery 情境:文件写了一半,client自己挂掉了,可能产生的问题:副本不一致、lease无法释放 租约:client要修改一个文件时,需要通过namenode上锁,这个锁就是租约(lease) 解决方法:lease recovery

pipeline recoverY 情境:文件写入过程中,DataNode侧出现异常挂掉了 异常出现的时机:创建连接时、数据传输时、complete阶段 解决方法:pipeline recovery

3.5client读异常梳理 情境:读取文件过程中,DataNode侧出现异常挂了 解决方法:节点failover 增强情境:节点半死不过,读取很慢

3.6旁路系统 balancer:均衡DataNode的容量 mover:确保副本放置符合策略要求

3.7控制面建设 可观测性设施(几乎所有IT领域都需要这种设施概念):指标埋点、数据采集、访问日志、数据分析 运维体系建设:运维操作需要平台化、namenode操作复杂、DataNode机器规模庞大、组件控制面API

四、应用场景