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

270 阅读4分钟

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


本节课重点为 HDFS关键设计和HDFS应用场景。思维导图如下:

8.HDFS原理与应用.png

HDFS基本介绍

  1. Hadoop技术体系:存储层(HDFS)->调度层(YARN)->应用层(MapReduce、Spark)

image.png

  1. 分布式系统:

特点:

  1. 大容量:更多的机器,更多的存储介质;
  2. 高可靠:多个副本提高容错能力;
  3. 低成本:不需要高端硬件来扩容;

类型:

  1. 对象存储
  2. 文件系统
  3. 块存储
  4. 数据库
  1. HDFS功能特性:
  1. 分布式;
  2. 容错:自动处理,规避多种错误场景;
  3. 高可用:副本机制;
  4. 高吞吐:并发;
  5. 可扩展:支持联邦集群模式;
  6. 廉价:通用硬件。

HDFS架构原理

Client/SDK

  1. Client写流程

image.png

  1. Client读流程

image.png

NameNode

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

DataNode

  1. 存放数据,数量多;
  2. 功能:
  1. 数据块存储;
  2. 心跳汇报:和NameNode联系,发送本机数据块列表;
  3. 副本复制:机器故障时补全副本。

HDFS关键设计

分布式存储系统基本概念

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

NameNode

NameNode.png

  • 目录树:

image.png

  • 结构:

image.png

DataNode

DataNode.png

HDFS读写异常处理

HDSF写异常处理

Lease Recovery

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

Pipeline Recovery

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

HDFS读异常处理

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

旁路系统与控制面建设

旁路系统

  1. 异步解决问题,这些问题不是马上出现,而是不断积累恶化,影响系统运行;简化了系统的实现;
  2. Balancer:均衡DataNode的容量;
  3. Mover:确保副本放置符合策略要求,NameNode选择块放在哪里,分布在不同DataNode,且在两个不同的机架上;
  4. 这些组件不运行不会马上影响读写操作,但是长时间会积累系统性问题,例如读写不均衡导致IO热点等。

控制面建设

  1. 保障系统稳定性;
  2. 可观测性设施:快速发现定位问题
  1. 指标埋点
  2. 数据采集
  3. 访问日志
  4. 数据分析
  1. 运维体系建设:从最基本的命令行手工操作,脚本自动化再到完善的运维平台
  1. 运维操作需要平台化;
  2. NameNode操作更复杂;
  3. DataNode机器规模庞大;
  4. 组件控制面API

HDFS应用场景

应用场景.png

课程总结: HDFS是大数据存储底座,是分布式存储系统的代表。本节课主要学习HDFS的总体架构和关键设计,从原理上了解HDFS,同时了解它的多方面应用。通过对HDFS的学习进一步理解分布式系统,为以后设计和优化分布式系统提供部分理论依据。