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

115 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第14天

首先,对目前大数据的知识框架进行一次简要的梳理:

image.png

HDFS(the hadoop file system,分布式文件系统)是大数据的基石,作为储存层;通常在其上搭建一个方便部署、扩展、管理的容器化应用程序(如k8s,yarn等),作为调度层,再在其上部署各种中间件/引擎,作为应用层

应用层的计算引擎框架分为批式计算引擎,流式计算引擎,以及交互式计算引擎,交互式计算引擎又可以单拎出来被称为查询引擎

HDFS概念

HDFS(the hadoop file system),分布式文件系统

就是通过多台计算机互联交互的系统,储存的文件会分布在各个计算机中,降低了单体文件系统对大容量硬盘的需求,可以用多台廉价机器解决昂贵的大容量的单机问题

优势

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

功能特性

  • 分布式 受GFS启发,用Java实现的开源系统,没有实现完整的POSIX文件系统语义
  • 容错 自动处理、规避多种错误场景,例如常见的网络错误、机器宕机等。
  • 高可用 一主多备模式实现元数据高可用,数据多副本实现用户数据的高可用
  • 高吞吐 Client直接从DataNode读取用户数据,服务端支持海量client并发读写
  • 可扩展 支持联邦集群模式,DataNode数量可达10w级别
  • 廉价 只需要通用硬件,不需要定制高端的昂贵硬件设备

HDFS 架构原理

hdfs组件大体可以分为3大类,分别是

  • client/sdk,用于客户端和开发者人员的使用
  • nameNode,这是hdfs的核心组件,每一个系统中有且仅有一个,用于控制数据的存储和读取
  • dataNode,用于物理储存数据,每个系统中可能存在多个

Client写流程

client(请求写入) -> nameNode(返回位置) -> client(写入) -> dataNode(ACK) -> client(Flush) ->dataNode(上报) ->nameNode(通知结束) -> client

ACK:ACKnowledge Character,确认字符。在数据通信中,接收站发给发送站的一种传输类控制字符。表示发来的数据已确认接收无误。

Client读流程

client(请求读取) -> nameNode(返回位置) -> client(读取) -> dataNode(返回) -> client

nameNode干了什么

  • 维护目录树 维护目录树的增删改查操作,保证所有修改都能持久化,以便机器掉电不会造成数据丢失或不一致。
  • 维护文件和数据块的关系 文件被切分成多个块,文件以数据块为单位进行多副本存放
  • 维护文件块存放节点信息 通过接收DataNode的心跳汇报信息,维护集群节点的拓扑结构和每个文件块所有副本所在的DataNode类表。
  • 分配新文件存放节点 Client创建新的文件时候,需要有NameNode来确定分配目标DataNode

dataNode干了什么

  • 数据块存取 DataNode需要高效实现对数据块在硬盘上的存取
  • 心跳汇报 把存放在本机的数据块列表发送给NameNode,以便NameNode能维护数据块的位置信息,同时让NameNode确定该节点处于正常存活状态
  • 副本复制 1.数据写入时Pipeline lO操作 ⒉机器故障时补全副本