总结回顾HDFS原理与应用|青训营笔记

134 阅读6分钟

image.png

这是我参与「第四届青训营」笔记创作活动的第2天,笔记内容为《总结回顾HDFS原理与应用》,内容包括 HDFS基本介绍、架构原理、关键设计、应用场景。

HDFS基本介绍

1660541834367.png

Hadoop技术体系:

  • 存储层:HDFS
  • 调度层:YARN
  • 计算框架(存储层):MapReduce。值得注意的是另外一个同属于Apache基金会的开源计算框架Apache Spark,当前业界的使用已经远超于MapReduce,尽管它不属于Hadoop项目,但是和Hadoop也有紧密关系。
  • 文件系统: 单机文件系统非常普遍,从Windows NTFS到Linux的Ext4等,分布式文件系统是单机文件的延伸,概念术语是相通的,比如目录、文件、目录树等。
  • 单机文件系统: 常见的如Windows NTFS,Linux的Ext4,虽然不同的操作系统和实现,但是本质都是一样的,解决相同的问题。
  • 分布式文件系统: 本质上扩展、延伸了单机文件系统,提供了大容量、高可靠、低成本等功能特性;实现上一般也更为复杂。其中:
  • 大容量:更多的机器,更多的存储介质;
  • 高可靠:多个副本提高容错能力;
  • 低成本:不需要高端硬件来扩容;
  • 分布式存储系统本质是针对不同的使用场景提供高效合理的系统,其类型分别为:
  • 对象存储:例如AWS的S3,阿里云的OSS,开源的Minio。
  • 块存储:例如AWS的EBS,开源社区也有Ceph等。
  • 文件系统:HDFS、GlusterFS、CubeFS等
  • 数据库:KV数据库比如Cassandra,关系型数据库如TiDB、OceanBase等
  • HDFS功能特性如下: (HDFS尽管是一个文件系统,但是它没有完整实现POSIX文件系统规范。)
  • 分布式;
  • 容错:自动处理,规避多种错误场景;
  • 高可用:副本机制;
  • 高吞吐:并发;
  • 可扩展:支持联邦集群模式;
  • 廉价:通用硬件。

HDFS常用语句

开启环境: start-all.sh

关闭环境: stop-all.sh

上传文件: hdfs dfs -put 本地路径(或hadoop上路径)/完整文件名 hadoop上路径/

复制到HDFS上: hdfs dfs -copyFromLocal 本地路径/完整文件名 hadoop上路径/

拷贝到本地: hdfs dfs -copyFromLocal 本地路径/完整文件名 hadoop上路径/

复制到HDFS上: hdfs dfs -copyFromLocal 本地路径/完整文件名 hadoop上路径/

创建文件夹: hdfs dfs -mkdir -p -cat hadoop上要创建的文件夹及目录

删除文件夹及文件夹下的内容: hdfs dfs -rm -r 路径

查看文件: hdfs dfs -cat hadoop上路径/文件名

查询前17行样本数据: hdfs dfs -ls t hadoop上路径/

将文件或目录复制到目标路径: hdfs dfs -cp 源路径 目标路径

架构原理

Client/SDK: 读写操作的发起点,HDFS很多读写逻辑都是在SDK中实现的。 1660544447601.png Client写流程:

1660544642930.png

Client读流程:

1660544717109.png

NameNode 元数据节点: 元数据节点,是HDFS的中枢节点,也是服务的入口,但数量少。

1660545161738.png

功能是:

  • 维护目录树:目录树的增删查改,保证所有修改都能持久化;
  • 维护文件和数据块的关系:文件被分成多个块,文件以数据块为单位多副本存放;
  • 维护文件块存放节点信息:维护集群节点的拓扑结构和每个文件块所有副本所在的DataNode类表;
  • 分配新文件存放节点:Client创建新文件时,需要有NameNode来确定分配目标DataNode。

DataNode: 数据节点,存放实际用户数据,数量多。 1660545200558.png

功能是:

  • 数据块存储;
  • 心跳汇报: 和NameNode联系,发送本机数据块列表;
  • 副本复制: 机器故障时补全副本。

关键设计

分布式存储系统基本概念

  • 容错能力
  • 一致性模型:保证容错,数据要多副本存放,保证多个数据副本内容都是一致的;
  • 可扩展性:加节点;
  • 节点体系:主从模式/对等模型,必须保证高可用;
  • 数据放置:NameNode决定数据放在哪些节点;
  • 单机存储引擎:数据需要落盘持久化,根据系统特点如何高效存取硬盘数据。 NameNode目录树设计

1660545843056.png

  • 仅在内存中修改:fsimage
  • 需要立即保存到硬盘:EditLog

NameNode数据放置: 数据分散在各个节点上,how to find them?

1660546114693.png

  • 文件和数据块的映射关系
  • 数据块的放置分布策略

DataNode设计:

1660546274057.png

  • 数据块路径
  • 启动扫盘获得本机文件块列表

HDFS写异常处理

Lease Recovery

1660546505191.png

  • 租约lease:Client要修改一个文件时,需要通过NameNode上锁,这个锁就是租约;
  • 情景:文件写了一半,client自己挂掉了,可能产生的问题: 副本不一致、Lease无法释放;
  • 副本不一致:比较系统三个副本内容大小(长度),选择最小的作为最终版本更新,最终的写入结果;
  • Lease无法释放:客户端定期续租,如果超过设定时间,踢掉挂掉的client。

Pipeline Recovery 1660546741945.png

  • 情景:文件写入过程中,DataNode侧出现异常挂掉了;
  • 异常出现的时机:创建连接时、数据传输时、complete阶段(DN完成落盘后向上(NameNode)报新块);
  • 创建连接:重新选一个节点;
  • 数据传输:如果有一个节点挂了,pipeline到重新构建阶段,将坏的节点摘除;
  • complete阶段:pipeline重新构建,重新选节点。

HDFS读异常处理

Failover 1660546889780.png

  • Client读异常处理;
  • 情景:读取文件的过程,DataNode侧出现异常挂掉了;
  • 增强情景:节点半死不过,读取很慢--------------->节点切换;
  • 检测出快/慢,客户端网络问题导致的慢(客户端不断切换节点)。

旁路系统

Balancer: 均衡DataNode的容量

1660547231168.png

Mover: 确保副本放置复合策略要求

1660547344246.png

控制面建设:保障系统稳定运行

可观测性设施:快速发现定位问题

  • 指标埋点
  • 数据采集
  • 访问日志
  • 数据分析

运维体系建设:从最基本的命令行手工操作,脚本自动化再到完善的运维平台

  • 运维操作需要平台化;
  • NameNode操作更复杂;
  • DataNode机器规模庞大;
  • 组件控制面API

应用场景

HDFS在大数据技术体系中的角色

1660547923147.png ETL

1660548028387.png OLAP

1660548050714.png

存储底座

HBase

1660548218034.png 机器学习

1660548170070.png 通用存储应用

1660548291109.png

课程总结:  HDFS是分布式存储系统的经典代表。本节课主要了解了HDFS的基本概念,关键设计,大数据应用场景以及通用存储场景。通过这节课的学习使我进一步理解和巩固了HDFS分布式系统基础知识,为以后设计优化和学习更高端的分布式系统打下了坚实的基础。