这是我参与「第四届青训营 」笔记创作活动的第14天
首先,对目前大数据的知识框架进行一次简要的梳理:
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操作 ⒉机器故障时补全副本