HDFS知识总结
HDFS概述
HDFS架构图:

HDFS(Hadoop分布式文件存储系统),为了保证数据的可读性以及可靠性,HDFS对数据进行了切块操作并复制后,存放到多个节点下。
HDFS中存在一个名称节点NameNode和多个数据节点DataNode,NameNode存放集群元数据,负责管理集群。DataNode做数据存储。
NameNode:
存放元数据信息
元数据信息保存在磁盘、文件(fsimage)中
存放block与节点DataNode的映射关系
DataNode:
存放数据block
存储在磁盘中
维护文件与block的映射关系
HDFS的优点
1.支持超大文件存储
2.检测和快速应对硬件故障
3.流式数据访问:
流式数据访问增加了数据的吞吐量,同事也增高了数据访问的延迟性,Hadoop旨在大数据的访问与存储,而不是数据访问的速度
4.一次写入,多次读取
5.高容错性:
数据采取多个副本在多个节点保存,副本丢失后自动恢复
6.DataNode可构建在廉价机器上
HDFS缺点
1.数据访问延迟:
因提升了数据访问的吞吐量,那么延迟也相应的提升
2.大量小文件
在HDFS中数据的元数据信息都是存储在NameNode下,大量的小文件占用NameNode内存,会影响NameNode节点性能
3.多用户写入、修改
Hadoop数据为一次写入,多次读取,存入后不可修改(2.0后支持追加)
Block 块概念
Block是HDFS最基本存储单位
在HDFS中存储的都是超大型数据文件,将这些大型数据文件切分为多个数据块,分别存储到不同的磁盘上,这里的块既Block。在HAdoop1.0中Block默认大小64M,Hadoop2.0more默认大小为124M。
将文件切分为多个块,有以下好处:
A:可靠性保证,每个数据块会被复制备份,存放在多个节点下。
B:有利于数据的复制,在HDFS中,每个Block会被默认复制为3份
C:一个文件如果小于128M,那么Block大小即文件大小
NameNode!!!
NameNode为HDFS运行的中心,其内承载着HDFS的元数据信息:
1.文件名称
2.文件与Block关系
3.Block数量
4.Block与DataNode的关系
示例:/test/a.log,3,{b1,b2},[{b1:[h0,h1,h3]},{b2:[h0,h2,h4]}]
NameNode中的元数据信息存储在内存和文件(fsimage)中,内存中为最新的实时信息,fsimage中为数据镜像做持久化存储。
在NameNode中文件包含:
1.fsimage元数据镜像文件,metadata的载体
2.edits操作日志文件
3.fstime最近依一次checkpoit的时间
在HDFS中,当客户端请求写入数据时,NameNode会首先在edits文件中写入操作日志,当写入成功后,再修改内存的metadata信息,并向客户端返回请求你结果。故fsimage中存放的不是实时的元数据信息,实时信息存放于内存里。
SecondaryNameNode
SNN不是NN的热备份,其作用是协助NN做metadata信息合并,从另一种角度来说其也是metadat的一个备份,但是非最新metadata信息,迫不得已下可以选择恢复其中metadata信息
metadata数据合并:
在hdfs配置文件中
根据配置文件设置的时间间隔:fs.checkpoint.period 默认3600秒进行一次合并;
根据配置文件设置的edits log大小: fs.checkpoint.size 默认达到64MB大小后进行合并;
合并过程!!:

当达成合并条件后,SNN会将NN中edits文件和fsimage文件拷贝过去,同时在NN中创建edits.new文件负责记录新的读取和写入请求,在SNN中,将拷贝的edits文件和fsimage文件合并为新的fsimage文件,在将新的fsimage文件拷贝回NN中替换之前的fsimage,NN再将edits.new文件修改为edits。注:在fsimage合并过程,可能产生新的metadata信息
SNN不是NN热备,但也提供了一部分的数据备份能力(非最新metadata数据),原因在于edits.new文件中的数据丢了就找不回了
通常SNN与NN配置在不同节点上一提升性能,并提供一定的metadata信息安全性
DataNode

DataNode作用为存储Hadoop数据,其上的数据存储形式为Block
DataNode与NameNode采取心跳机制保持联系(3秒一次),DataNode会不断向NameNode发送心跳报告
Hadoop启动初始化时,DataNode会告知NameNode当前节点下存储的Block信息
在后续HDFS工作中,DataNode会不断的更新NameNode中metadata信息,并接受NameNode节点的指令,创建、移动、和删除对应的Block
如果NameNode10分钟没有收到DataNode的心跳,则认为其lost,并将其上的Blockcopy到其他DataNode节点下
Block副本放置策略
第一个副本:如果上传文件的服务器本身就是DataNode,就放置在上传文件的DN;如果是外部客户端向集群上传,就随机选择一台磁盘不太满,cpu不太忙的节点
第二个副本:放置在第一个副本不同机架的节点上
第三个副本:放置在与第一个副本相同机架的节点上(机架内通讯比机架间通讯块)
如果保存更多副本:随机节点

浙公网安备 33010602011771号