首页 > 其他分享 >03-分布式文件系统HDFS

03-分布式文件系统HDFS

时间:2022-11-03 22:34:03浏览次数:89  
标签:03 副本 HDFS fsimage edits NameNode 分布式文件系统 Block


目录

​​一,HDFS简介​​

​​1,什么是HDFS​​

​​2,优缺点​​

​​2.1 优点​​

​​2.2 缺点​​

​​二,HDFS原理​​

​​1,系统架构​​

​​1.1 角色分工​​

​​1.2 设计思想​​

​​2,数据存储​​

​​2.1 文件存储​​

​​2.2 元数据存储​​

​​3,读写操作​​

​​3.1 写操作​​

​​3.2 读操作​​

​​4,安全模式​​

​​4.1 什么是安全模式​​

​​4.2 何时离开安全模式​​

​​4.3 触发安全模式的原因​​

​​5,高可用​​

​​5.1 NameNode高可用​​


文章内容来自:南京大学 / 星环科技课程,大数据理论与实践课程Ⅰ

对细节部分引用其他网络资源进行补充。

一,HDFS简介

1,什么是HDFS

概念

  • Hadoop分布式文件系统(Hadoop Distributed File System) • 2003年10月Google发表了GFS(Google File System)论文
  • HDFS是GFS的开源实现
  • HDFS是Apache Hadoop的核心子项目
  • 在开源大数据技术体系中,地位无可替代

设计目标

  • 运行在大量廉价商用机器上:硬件错误是常态,提供容错机制;
  • 简单一致性模型:一次写入多次读取,支持追加写,但不允许并发写和随机修改,通过对写操作的严格限制来保证数据的一致性;
  • 流式数据访问:批量读而非随机读,关注吞吐量而非时间;
  • 存储大规模数据集:典型文件大小GB~TB(大文件),关注横向线性扩展;

2,优缺点

2.1 优点

高容错、高可用、高扩展

  • 数据冗余,多Block多副本,副本丢失后自动恢复
  • NameNode HA、安全模式
  • 10K节点规模

海量数据存储

  • 典型文件大小GB~TB,百万以上文件数量, PB以上数据规模

构建成本低、安全可靠

  • 构建在廉价商用服务器上
  • 提供了容错和恢复机制

适合大规模离线批处理

  • 流式数据访问
  • 数据位置暴露给计算框架

2.2 缺点

不适合低延迟数据访问

不适合存储小文件

  • 元数据占用NameNode大量内存空间。每个文件或目录的元数据要占用150Byte,存储1亿个文件,大约需要20GB内存,如果一个文件为10KB,1亿个文件大小仅,1TB,却要消耗掉20GB内存
  • 磁盘寻道时间超过读取时间

不支持并发写入

  • 一个文件同时只能有一个写入者

不支持随机修改

  • 仅支持追加写入

二,HDFS原理

1,系统架构

1.1 角色分工

Active NameNode(AN)

  • 活动管理节点(Master / 集群中唯一)
  • 管理命名空间:文件系统的目录层次空间
  • 管理元数据:目录/文件的基本属性、Block相关信息、DataNode相关信息等
  • 管理Block副本策略:副本数(默认3副本)、副本放置策略等
  • 管理DataNode:节点上下线动态监测、文件系统健康状况监测、 Block恢复和重分布等
  • 处理客户端读写请求:审核权限,编制计划,并为DataNode分配任务

Standby NameNode(SN)

  • 热备管理节点(允许多个)。Hadoop 3.0允许配置多个SN,之前的版本只能有一个
  • 主备切换:AN宕机后,经过Master选举和元数据恢复,SN升级为AN
  • 元数据同步:正常运行期间的周期性同步、AN宕机后的最新同步

DataNode(DN)

  • 数据节点(Slave / 高扩展)
  • 存储Block数据块和数据校验和
  • 向AN和SN汇报情况
  • 正常运行:通过心跳机制(默认3秒),定期汇报运行状况和Block信息(包括物理存储位置)
  • 集群启动:进入安全模式,集中上报Block信息
  • 执行客户端发送的读写命令

Client

  • 文件管理
  • -发送文件读写请求,并将文件切分为Block或将Block组装为文件
  • -与NameNode交互,获取读写计划和相关元数据
  • -与DataNode交互,读取或写入Block
  • 系统管理:发送HDFS管理命令

1.2 设计思想

角色分工

03-分布式文件系统HDFS_大数据

 数据存储

03-分布式文件系统HDFS_大数据_02

2,数据存储

2.1 文件存储

1,Block数据块

1)HDFS的最小存储单元

2)多Block多副本

文件被切分为若干个Block,每个Block有多个副本(默认3副本)

Block以DataNode为存储单元,即一个DataNode上只能存放Block的一个副本

机架感知:尽量将副本存储到不同的机架上,以提升数据的容错能力

副本均匀分布:DataNode的Block副本数和访问负荷要比较接近,以实现负载均衡

3)Block大小

默认128M,可设置(若Block中数据的实际大小<设定值 ,则Block大小 = 实际数据大小)

如何调整Block大小。目标:①最小化寻址开销,降到1%以下;②任务并发度和集群负载比较适中,作业运行速度较快

  • 块太小:①寻址时间占比过高;②任务太多,并发度太高,导致集群负载过高,作业变慢
  • 块太大:任务太少,并发度太低,导致集群负载过低,作业变慢

2,Block副本放置策略

副本1:放在Client所在节点上。对于远程Client,系统会随机选择机架和节点

副本2:放在与副本1不同的机架上

副本3:放在与副本2同一机架的不同节点上

副本N:在遵循相关原则的前提下,随机选择

节点选择原则

-避免选择访问负荷太重的节点

-避免选择存储空间太满的节点

-将副本分散在不同的机架上

03-分布式文件系统HDFS_元数据_03

3,Block文件

Block数据文件:DataNode本地磁盘中名为“blk_blockId”的Linux文件

Block元数据文件:DataNode本地磁盘中名为“blk_blockId_*.meta”的Linux文件,由一个包含版本、类型信息的头文件和一系列校验值组成

Block文件目录:DataNode启动时自动创建,无需格式化

03-分布式文件系统HDFS_安全模式_04

2.2 元数据存储

1,元数据

目录/文件的基本属性(如名称、所有者)、Block相关信息(如文件包含哪些Block、Block放在哪些节点上)、DataNode相关信息

2,内存元数据

Active NameNode:最新的元数据(= fsimage + edits)

Standby NameNode:通过QJM定期(默认60s)同步AN的元数据

3,文件元数据

1)内存元数据持久化后生成的文件,包括edits和fsimage

2)edits(编辑日志文件)

记录文件系统的每一个变更操作,并定期瘦身

先写edits,再写内存

edits文件名通过“txid前后缀”标记所包含变更操作的范围(txid为变更操作的Transaction id)

3)fsimage(元数据检查点镜像文件)

检查点(Checkpoint):① 时间间隔(默认1小时),② 变更操作次数(默认100万)

在检查点定期对内存中的元数据进行持久化,生成fsimage镜像文件(速度较慢)

fsimage文件名标记出最后一个变更操作的txid,以下图为例,只要在内存中载入fsimage_19,然后执行edits_inprogress_20,即可还原出最新的元数据

在检查点,当fsimage生成后,删除“edits last txid < (fsimage last txid - txns)”的edits旧文件,从而实现定期瘦身(txns默认为100万)

03-分布式文件系统HDFS_大数据_05

4,edits与fsimage持久化(Hadoop 1.x)

基于远程合并的持久化

  1. 在检查点,SN请求PN停用edits,后续变更操作写入edits.new
  2. 将fsimage和edits下载到SN(第一次需下载fsimage)
  3. 在内存中载入fsimage,与edits进行合并,然后生成新的fsimage,并将其上传给PN
  4. 用新文件替换edits和fsimage(edits实现瘦身)

缺点

  • 合并前要先将fsimage载入内存,速度慢 
  • 未实现edits高可用:SN上的edits不是最新的,若PN上 的edits损毁,将导致元数据丢失

03-分布式文件系统HDFS_元数据_06

5,edits与fsimage持久化(Hadoop 2.x) 

QJM(Quorum Journal Manager)共享存储系统

  • 基于Paxos算法实现的JournalNode集群,实现了edits高可用和共享访问
  • 最好部署奇数(2n+1)个节点,最多容忍n个节点宕机 
  • 过半(>=n+1)节点写入成功,即代表写操作完成

基于QJM的edits持久化

  1. AN将变更操作同步写入本地和QJM edits(该步骤为原子操作)
  2. AN将该操作写入内存,并将结果反馈给Client

基于QJM的fsimage持久化 

  1. 在检查点,SN通过对内存中的NameSpace上锁,先将QJM edits定期同步(默认60s)暂停下来,再生成fsimage
  2. SN将fsimage上传到AN,同时恢复QJM定期同步
  3. AN删除本地和QJM中的edits旧文件,完成瘦身

03-分布式文件系统HDFS_大数据_07

3,读写操作

3.1 写操作

03-分布式文件系统HDFS_大数据_08

注意:

1,文件在客户端client被切分为块,块的大小一般由磁盘传输速率决定。太小的话增加寻址时间,太大的话磁盘传输时间大于定位块所需时间,导致程序处理数据较慢;

2,HDFS先写block后写元数据(edits日志落盘、写内存),这样才完成。因为block写入时间比较长,出错概率大,所以先写block;

3,从图中可以看出,数据是由DN依次传给其他DN的(8.1-》8.2),而不是由客户端传送给各个DN。这样可以避免客户端无效等待(等最慢的一个DN数据传输结束)

4,如何确认数据传输完毕?按照数据传输的倒序传递成功信号(9.1-》9.2)

下图为​​尚硅谷课程​​中关于HDFS写数据流程的介绍,可以相互补充:

03-分布式文件系统HDFS_安全模式_09

3.2 读操作

03-分布式文件系统HDFS_hadoop_10

 下图为​​尚硅谷课程​​中关于HDFS读数据流程的介绍,可以相互补充:

03-分布式文件系统HDFS_元数据_11

注意,选择节点读取数据时有两个因素需要考虑:与客户端所在节点间距离,当前DN的负载情况。

4,安全模式

4.1 什么是安全模式

安全模式是HDFS的一种特殊状态(只读),在该状态下HDFS只接收读请求,不接收写入、删除和修改等变更请求

安全模式是HDFS确保Block数据安全的一种保护机制

Active NameNode启动时,HDFS会自动进入安全模式,DataNode主动向NameNode上报可用Block信息,在达到安全标准前,HDFS一直处于“只读”状态

4.2 何时离开安全模式

Block上报率:DataNode上报的可用Block个数 ÷ NameNode元数据记录的Block个数

当Block上报率 >= 阈值时,HDFS才能离开安全模式(默认阈值为0.999)

不建议手动强制退出安全模式

4.3 触发安全模式的原因

NameNode重启

NameNode磁盘空间不足

DataNode无法正常启动

Block上报率低于阈值

日志中出现严重异常

用户操作不当,如强制关机(特别注意)

5,高可用

在HDFS分布式文件系统中,NameNode是系统核心节点,存储各类元数据信息,并负责管理文件系统的命名空间和客户端对文件的访问。若NameNode发生故障,会导致整个Hadoop集群不可用,即单点故障问题。为了解决单点故障,Hadoop2.0中HDFS中增加了对高可用的支持。

在高可用HDFS中,通常有两台或两台以上机器充当NameNode,无论何时,都要保证至少有一台处于活动(Active)状态,一台处于备用(Standby)状态。Zookeeper为HDFS集群提供自动故障转移的服务,给每个NameNode都分配一个故障恢复控制器(简称ZKFC),用于监控NameNode状态。若NameNode发生故障,Zookeeper通知备用NameNode启动,使其成为活动状态处理客户端请求,从而实现高可用。


参考​​@悟空非空也【6 Hadoop2.0新特性】​

5.1 NameNode高可用

03-分布式文件系统HDFS_元数据_12

1,基于ZK实现Master选举

(1)AN或AN-ZKFC宕机,其创建的临时Znode被删除,但永久Znode(存储AN地址)被保留

  • 若AN宕机,ZKFC失去与AN的心跳连接,从而监测到故障,然后主动删除临时Znode
  • 若AN-ZKFC宕机,ZK失去与ZKFC的心跳连接,会话超时后,临时Znode被自动删除
  • 不管是NameNode挂机还是整个服务器出问题(包括ZKFC),都会触发上面的机制。NameNode挂,ZKFC删除临时Znode。服务器挂,由于和session捆绑,所以临时Znode也会被删除

(2)Watcher触发,通知所有SN-ZKFC去竞争创建临时Znode,SN1-ZKFC创建成功,SN1被选举为New AN

(3)其他SN-ZKFC在临时Znode上注册监听器,等待下一次选举

2,通过AN-Fencing防止脑裂

选主结束后,会创建临时Znode和永久Znode。如果ActiveNode异常,由于捆绑删除了临时Znode,但永久Znode仍会存在,所以当再次选主时发现有永久Znode存在,表明属于故障切换,就需要通过fencing避免脑裂。fencing后standBy节点才能进行状态转换

(4)若New-AN-ZKFC发现永久Znode,则通过RPC调用AN-ZKFC的服务,将AN从Active切换为Standby

(5)若步骤④失败,则New-AN-ZKFC直接调用SSL命令(或者执行自定义Shell脚本),Kill AN进程

(6)若步骤④⑤均失败,则需要人工干预

(7)AN-Fencing成功后,New-AN-ZKFC将New AN从Standby切为Active,并正式对外服务(HDFS只读)

3,基于QJM实现元数据恢复

(8)New AN从QJM edits中下载最新的(≤60s)变更操作,并在内存中执行一遍,即可恢复 

标签:03,副本,HDFS,fsimage,edits,NameNode,分布式文件系统,Block
From: https://blog.51cto.com/u_15849465/5821269

相关文章

  • vue3 leaflet this._map is null,this._map is undefined,listener not found ,cannot
    vue3leafletthis._mapisnull,this._mapisundefined,listenernotfound此类问题这个是vue3的变量深监听所导致的,vue2就没有此类的问题发生解决方法:加toRow()代......
  • 使用HDFS做一个记事本功能
       pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchem......
  • 【Azure 事件中心】Event Hub 无法连接,出现 Did not observe any item or terminal si
    问题描述使用JavaSDK连接AzureEventHub,一直出现java.util.concurrent.TimeoutException异常,消息为:java.util.concurrent.TimeoutException:Didnotobserveanyit......
  • 11.03
    今日内容1.动静态方法2.面向对象之继承的概念3.继承的本质4.名字的查找顺序5.经典类与新式类6.派生方法1.动静态方法在类中定义的函数有多种特性classStudent:......
  • 【iframe防盗链】解决iframe图片防盗链报403错误
    问题在使用iframe框架引入其他网站时,图片资源因为阿里云防盗链原因,加载不出来,报403的错误。这个问题就算把第三方网站的html源码保存在本地,再用iframe框架载入,都无法加载......
  • 503 下一个更大元素 ||
    题目503下一个更大元素||给定一个循环数组nums(nums[nums.length-1]的下一个元素是nums[0]),返回nums中每个元素的下一个更大元素。数字x的下一个更大的......
  • 【2022-11-03】luffy项目实战(一)
    一、企业项目类型#1面向互联网用户:商城类项目 -微信小程序商城#2面向互联网用户:二手交易类的-咸鱼-转转#3公司内部项目:python写的重点......
  • org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating
    报错:org.springframework.beans.factory.UnsatisfiedDependencyException:Errorcreatingbeanwithname'utilsServiceImpl':Unsatisfieddependencyexpressedthro......
  • 039nginx reload本质
    一、nginxreload所做的事情首先会-t进行检查,假如检查失败,nginx好像是不会重启worker进程的;检查通过nginx会启动新的worker进程,并shutdown老的worker进程;如下图所示......
  • 2022.11.03 NOIP2022 模拟赛二
    绯色IOI(开端)之前做过了,见杂题题解(一),话说这个系列是不是好久没更新了。CodeconstintN=2e5+5;intn,m,a[N];intmain(){n=read();FOR(i,1,n)a[i]=read(......