什么是HDFS?

HDFS ----- Hadoop Distributed File System (hadoop 分布式文件系统)

概念: 它是一个分布式集群,可以支持海量数据存储,hadoop框架的核心之一以及重要组件

基础储备

  1. 什么是分布式?什么是集群? 集群和分布式的区别?
    (独立概念,分布式是用多台计算机并行解决不同问题、集群是整合多台计算机解决相同问题)
  2. 什么是主从模式?
    (分布式系统节点为主从关系、分布执行且保证数据一致,相关概念:高可用模式、联邦模式)
  3. 什么是NameNode 、DataNode 、secondaryNameNode ,以及它们扮演的角色?
    (名称节点控制作用、数据节点存储作用、助理节点备份控制节点作用)

起源:

① 技术来源(基础):Google 公司提出的三篇论文 之 GFS
② 需求来源(设想):提供一种较廉价的海量数据存储的解决方案

实现过程:

a、解决海量数据存储问题;—— 化整为零,搭建集群进行分布式存储   
b、存储节点的管理问题;—— 采用分布式管理的主从模式(将数据分布情况放到主节点上)

注意事项:1.x的secondary只做备份,属于冷备份,需手动转换namenode;2.x支持热备,高可用HA特性,一个是active,一个是standby
c、解决存储成本问题; —— 利用廉价PC来代替小型机或服务器 搭建集群
d、解决PC做集群节点带来机器故障问题; —— 副本备份,提供容错(datanode数据)【从控制节点角度看,存在单点故障,即控制节点宕机,整个存储系统崩溃,2.x缓解了该问题】
e、节点故障快速检测问题;——Fsimage与EditLog存储以及心跳机制
f、 存储节点故障优化问题;—— 将文件分块储存在不同的机器上,解决存储负荷,方便负载均衡与后面的副本管理(对应问题d);
g、减少分块带来的影响(寻址时间增加)——将数据块设置成相同的,尽量将数据块的大小加大,从而缩短寻址时间
h、解决大量大文件存储问题 ——将数据块或存储单元设置成较大容量,2.x由64M提高到128M
i、优化读取或写入效率 —— 机架策略(第2个策略提高容错)、采用就近存储或读取
j、节点故障的应对措施 ——安全模式,停止会影响元数据的操作,防止新增数据丢失
k、缓解存储节点压力 ——负载均衡,数据存储占比、副本迁移管理

HDFS的特点 hdfs的相关概念_hadoop

图1-hdfs基本结构

特点:

① 四大机制:心跳机制、机架策略、安全模式、负载均衡 (5、容错恢复机制?)
② 优缺点(总结):
优点
a、廉价的海量存储
b、高容错性
c、存储大量的大文件
d、流式数据访问(大规模数据读取)
e、跨平台
缺点
a、不适用于低延迟访问
b、不适用于大量小文件
c、不支持文件任意修改以及多用户上传

简略存储流程

  1. Step1
    客户端 :通过hadoop的shell指令或Java Api来上传文件或下载文件的目标节点,可以在集群内也可以在集群外;逻辑分块处理
    NameNode: 校验客户端请求(文件路径是否存在?文件权限问题?数据节点是否正常)
    接收DateNode块信息,对应分块信息返回节点列表(列表顺序符合就近原则)
    DataNode:将块信息汇报给NameNode
  2. Step2
    客户端:接收到列表,将数据块依次存放到对应的DateNode
    DataNode: 接收通道中的数据块,并将数据块写入到下一个副本节点通道;
    待该数据块节点写入完毕后,将信息告知客户端,准备下一次数据块的请求
  3. Step3,返回块信息到NameNode,更新NameNode;接收DateNode 数据,更新元数据

元数据管理

概念:什么是元数据?它包含了:
① 文件、目录自身的属性信息;
② 文件记录的信息的存储相关的信息(块映射、存储定位);
③ Datanode 信息

流程:如何管理这些数据的?
持久化存放到磁盘(启动时会加载到内存中,关闭时会自动载入到磁盘)

对象:fsimage 镜像文件、Edits 编辑日志(EditLog)

  • fsimage : 只存放元数据的文件属性、文件块映射,并不包含块对应的存储位置(由datanode报告,该信息存储到内存中)
  • editLog : 存放的是 Hadoop 文件系统的所有更改操作(文件创建,删除或修改)的日志,客户端操作会录入到log中。

两者关系:

fsimage 和 edits 文件都是经过序列化的,在 NameNode 启动的时候,它会将 fsimage文件中的内容加载到内存中,之后再执行 edits 文件中的各项操作,使得内存中的元数据和实际的同步,存在内存中的元数据支持客户端的读操作,也是最完整的元数据。

合并操作:SecondaryNameNode 对 fsimage 和 editLog进行合并操

  • 过程 Checkpoint :
    secondary 从namenode的fsimage 和 editlog进行下载并加载到内存,此时,namenode生成一个新的editLog(edits.new),此时secondary 根据两个文件生成Fsimage.ckpt,最后复制到 namenode的 fsimage.
  • 作用:
    及时同步元数据内容,保证数据的一致性
  • 特点:
    通过内存载入的方式加快读取速度,通过定时持久化到磁盘保证数据的安全

HDFS的读取流程

HDFS的特点 hdfs的相关概念_hdfs_02

HDFS的写入流程

HDFS的特点 hdfs的相关概念_big data_03

HDFS的RPC机制

RPC的全称为远程过程调用,即hadoop底层通信是基于RPC协议的。解决的问题,控制远程计算机,调用目标上的计算资源(内存、cpu等)

  • 地位:它属于会话层协议(OSI网络协议的第5层),其下层是基于TCP/IP,UDP协议。
  • 流程简述: 生成一个代理agent 作为客户端在目标机器上的本地使用者,实现类本地指令来操作目标计算机。如图所示,stub是进行了序列化和反序列化操作。

图3-RPC流程 图片来源于网络

可以看成是四个部分组成:序列化层、函数调用层、网络传输层和服务器端处理

1)首先需要定义一个PRC协议,该接口必须继承VersionedProtocol接口
2)需要一个类实现PRC的接口用于服务端的调用
3)实现客户端和服务端

hadoop HDFS-RPC接口

HDFS的特点 hdfs的相关概念_数据块_04

图片来源于网络

protocol

解释说明

ClientProtocol

client和namenode 进行交互的接口;

namenode响应的操作,主要包括hdfs文件读写的相关操作,hdfs命名空间,快照,缓存相关的操作。

读取:获取位置 getBlockLocations(),reportBadBlocks() 汇报错误的数据块;

写入:create()创建新文件,addBlock()获取新增块位置,创建pipeline;

ClientDataNodeProtocol

client和datanode进行交互的接口;

客户端获取datanode节点信息,并非写入数据接口;

DatanodeProtocol

datanode和namenode进行交互的接口;

datanode则是通过该接口向namenode进行注册,汇报块信息和缓存信息;

① 握手versionRequest()主要是返回namenode的一些命名空间ID,集群ID,hdfs的版本号等,datanode收到信息后进行校验对比,判断是否能够与该namenode协同工作,能否注册。

② datanode会定期的向namenode发送心跳

③ 块汇报后会根据datanode上报数据块存储情况建立数据块与datanode节点的对应关系。blockReport()在启动的时候和指定时间间隔的情况下发生。cacheReport()和blockReport()方法完全一致。只不过是汇报当前datanode上的缓存的所有数据块。

datanode会向namenode汇报损坏的数据块,以及定期性namenode汇报datanode新接手的数据块或者删除的数据块。

InterDatanodeProtocol

datanode和datanode间的接口,主要用于数据块的恢复操作

NamenodePortocol

主要用于namenode的ha机制,或者单节点的情况下是secondaryNamenode也namenode之间的通信接口。

时间同步 rdate

rdate -s time.nist.gov

rdate -s time-a.nist.gov