【基础理论】hadoop基础(一):HDFS系统性介绍:HDFS组成架构、读写理论、机架感知、心跳策略等

本文对HDFS进行一个系统性的介绍,以便hdfs的理论知识一个整体性的了解,内容包括架构组成、读写理论,元数据同步、读写时机架感知策略,以及namenode与datanode成员之间的通讯逻辑等。
 
之后在工作中遇到有关其他HDFS的问题再详细、针对性地讨论。

一. HDFS概述

1. HDFS特点

特点说明
冗余容错,多副本提高可靠性
数据丢失自动恢复。在廉价的机器上,通过冗余来稳定集群,即使时常故障也没有问题
适合大数据,不适合小文件
小文件存储会增加name node的压力,甚至小文件存储的寻址时间会超过读取时间
不支持并发写入、文件随机修改
一个文件只能有一个线程写 ;仅支持数据append(追加),不支持文件的随机修改
处理数据延迟高
不适合低延迟毫秒的数据存储

简单来说HDFS适合大文件存储,通过冗余提高了可靠性;小文件对HDFS不友好,因为会增加HDFS的寻址时间。写文件到HDFS中时,不能并发写入近支持追加,所以对于数据处理时效性不高。

 

2. HDFS的组成架构

成员作用
NameNode
处理客户端读写请求、管理namespace、配置副本策略:数据怎么存储和备份、管理block的映射信息
DataNode
block的读写操作、存储block
Secondary NameNode
不是standbyNameNode,主要是辅助nn,比如定期合并Fsimage和Edits,并推送给nn
client
1. 文件切分:文件上传前切块,然后分块上传。
2. 与namenode通讯进行读写请求,会获取文件信息,
3. 当nn允许client读写时,client和datanode开始交互进行读写;
4. 提供shell及api等操作入口

在NameNode中的Namespace管理层是负责管理整个HDFS集群文件系统的目录树以及文件与数据块的映射关系。如下Namespace的内存结构:
在这里插入图片描述
以上是一棵文件目录树,可见Namespace本身其实是一棵巨大的树。在这棵树中INodeFile表示文件,INodeDirectory表示文件目录。在HDFS中的实现中,INodeFile和INodeDirectory都是继承INode的。

 

3. 文件块大小

默认hadoop2.x/3.x是128M,1.x是64M。

当寻址时间为文件传输是传输时间的1%,则认为是最佳状态。目前磁盘的传输速度为100MB/s
 
为什么块不能设置太小,也不能设置太大?

程序在下载块的时候分为寻址和数据传输两个步骤,如果块设置的太小,则总寻址时间增加;太大从磁盘的传输时间长,不利于程序数据处理。所以:block大小的设置主要取决于磁盘传输到速度。

 
 

二. HDFS的读写理论

1. 读写流程

1.1. 读数据流程

在这里插入图片描述
简单的说:client向namenode发送rpc请求,nn查找文件的元数据信息返回给client,client向就近(之后随机)的一台datanode发起读取数据的请求,然后下载数据。

数据传输:

  • 客户端以packet为单位接收,先存在本地缓存,然后写入目标文件。
  • 客户端读完一个块之后关闭链接,然后就近读取下一个文件块;如果列表没读完,会继续向NN请求
  • 每读完一个block都会进行checksum的校验,校验不通过,client通知NN,然后从副本块的datanode继续读。

 

1.2.写数据流程

在这里插入图片描述
简单的说:
client首先向nn发起写请求,nn进行一系列校验之后返回是否可以上传,然后client发起上传第一个块的请求,nn返回datanode列表,client和dn建立连接然后进行数据传输与数据备份。传递完之后向nn请求上传第二个块,然后重复前面的操作。

详细地:

  • 两次请求:
    • 第一次NN判断(权限、目录是否存在)是否能够上传;
    • 第二次NN计算文件切块(200M/128M=2),获取副本信息(dfs.replication=3),并返回写节点信息给client做上传准备。
  • client上传前的准备:
    • 对文件进行逻辑切块
    • 上传前建立pipeline,client启动一个阻塞进程,直到所有的DataNode都完成响应。
  • 开始上传:
    • 文件块以packet为单位进行上传
    • DN3接收client的数据,每接收完一个packet,client向DN3传递下一个packet,同时DN3传数据传给DN2…DN2再传给DN1,直到传递完这个块,关闭当前pipeline。
  • 重复上传步骤。

 
 

2. 最近距离是怎么计算的

最近距离是hadoop采用的一种衡量带宽能力的近似方法

网络带宽是指在单位时间(一般指的是1秒钟)内能传输的数据量。

Hadoop将整个集群理解为树形结构,树的每个叶子节点代表集群中的每个机器,把数据中心(center)、机架(rack)和节点(node)分别映射到不同的层次。如下图
在这里插入图片描述
节点距离计算:两个节点到达最近的共同祖先的距离总和。
通过上述方式可以近似判断两个节点之间的带宽情况:

  • distance(/d1/r1/n1, /d1/r1/n1) = 0 (同一节点上的两个应用程序,最近共同祖先都在本节点,距离为0)
  • distance(/d1/r1/n1, /d1/r1/n2) = 2 (同一机架上的两个节点)
  • distance(/d1/r1/n1, /d1/r2/n3) = 4 (同一数据中心里不同机架上的两个节点)
  • distance(/d1/r1/n1, /d2/r3/n4) = 6 (不同数据中心的两个节点)

 
 

3. 机架感知策略

在这里插入图片描述
机架感知策略可以减少机架间写流量的情况,提高写性能。又因为机架故障的概率远小于节点故障的概率,所以该策略不影响数据可靠性和可用性。

策略具体描述为:

  1. 第一个副本在Client所在节点,如果client在集群外,随机选择一个
  2. 第二个副本在另一个随机机架的随机节点上
  3. 第三个副本在第二个副本所在机架剩余节点

 
 

三. HDFS成员相关理论

1. NameNode和SecondryNameNode的元数据管理

在这里插入图片描述

元数据信息包括:抽象目录树、文件和块、块和节点的对应关系。
集群的启动顺序:nameNode -> dataNode -> secondaryNameNode。

元数据交互过程

  1. nn启动时,会加载元数据文件(Fsimage和edits)到内存中,同时接收dataNode汇报的心跳和block的位置信息,将block位置信息加载到内存。
  2. 当写流程造成元数据更新时,dn通知nn什么文件的第几个block进行了上传,nn修改元数据内存,并写到本地文件(edits)中。
  3. snn会定期向nn询问是否触发checkpoint操作,触发之后,nn会滚动正在写的edits,即从edits_inprogress_xxx 到 edits文件 ing。接着将edits和fsimage拷贝到snn。snn进行合并,生成新的 fsimage.chkpoint,然后拷贝到nn,nn将 fsimage.chkpoint重命名为fsimage。

相关文件介绍

文件类型介绍
fsimage元数据镜像
edits操作日志文件[事务文件],这里面会实时记录用户的所有操作,会定时合并到fsimage
seen_txid是存放事务id的文件,format之后是0,它代表的是检查点正常结束roll的edits事务id

为什么有时读取文件速度大于网络带宽?
由于目前只有三台服务器,且有三个副本,数据读取就近原则,相当于都是读取的本地磁盘数据,没有走网络。

 

2. DataNode 与 NameNode

在这里插入图片描述

datanode和namenode

A. dn启动后向nn注册
B. 定时报告心跳给nn,心跳检测机制判断dn是否挂掉
C. 每6小时上报所有的块信息

 

心跳机制

当因为dn宕机或者是网络故障,nn不会马上判断dn挂掉,而是通过计算TimeOut判断。
TimeOut = 2A +10B
A=dfs.namenode.heartbeat.recheck-interval 默认5分钟 心跳检查间隔
B=dfs.heartbeat.interval 默认3秒,心跳间隔

 

数据完整性校验

Dn读取block时,会计算checkSum值,如果和创建时不一致则判断文件损坏。
Dn会定期校验block的checkSum值。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

roman_日积跬步-终至千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值