Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >必须掌握的分布式文件存储系统—HDFS

必须掌握的分布式文件存储系统—HDFS

原创
作者头像
大数据学习与分享
修改于 2020-07-13 02:11:25
修改于 2020-07-13 02:11:25
1.1K0
举报

HDFSHadoop Distributed File System)分布式文件存储系统,主要为各类分布式计算框架如SparkMapReduce等提供海量数据存储服务,同时HBaseHive底层存储也依赖于HDFS。HDFS提供一个统一的抽象目录树,客户端可通过路径来访问文件,如hdfs://namenode:port/dir-a/a.data。HDFS集群分为两大角色:Namenode、Datanode(非HA模式会存在Secondary Namenode)

Namenode

Namenode是HDFS集群主节点,负责管理整个文件系统的元数据,所有的读写请求都要经过Namenode。

数据管理

Namenode对元数据的管理采用了三种形式:

1) 内存元数据:基于内存存储元数据,元数据比较完整

2) fsimage文件:磁盘元数据镜像文件,在NameNode工作目录中,它不包含block所在的Datanode 信息

3) edits文件:数据操作日志文件,用于衔接内存元数据和fsimage之间的操作日志,可通过日志运算出元数据

fsimage + edits = 内存元数据

注意:当客户端对hdfs中的文件进行新增或修改时,操作记录首先被记入edit日志文件,当客户端操作成功后,相应的元数据会更新到内存元数据中

可以通过hdfs的一个工具来查看edits中的信息bin/hdfs  oev  -i  edits  -o  edits.xml查看fsimagebin/hdfs  oiv  -i  fsimage_0000000000000000087  -p  XML  -o  fsimage.xml

元数据的checkpoint(非HA模式)

Secondary Namenode每隔一段时间会检查Namenode上的fsimage和edits文件是否需要合并,如触发设置的条件就开始下载最新的fsimage和所有的edits文件到本地,并加载到内存中进行合并,然后将合并之后获得的新的fsimage上传到Namenode。checkpoint操作的触发条件主要配置参数:

dfs.namenode.checkpoint.check.period=60  #检查触发条件是否满足的频率,单位秒dfs.namenode.checkpoint.dir=file://${hadoop.tmp.dir}/dfs/namesecondarydfs.namenode.checkpoint.edits.dir=${dfs.namenode.checkpoint.dir}#以上两个参数做checkpoint操作时,secondary namenode的本地工作目录,主要处理fsimage和edits文件的dfs.namenode.checkpoint.max-retries=3  #最大重试次数dfs.namenode.checkpoint.period=3600  #两次checkpoint之间的时间间隔3600秒dfs.namenode.checkpoint.txns=1000000  #两次checkpoint之间最大的操作记录

checkpoint作用

1. 加快Namenode启动

Namenode启动时,会合并磁盘上的fsimage文件和edits文件,得到完整的元数据信息,但如果fsimage和edits文件非常大,这个合并过程就会非常慢,导致HDFS长时间处于安全模式中而无法正常提供服务。SecondaryNamenode的checkpoint机制可以缓解这一问题

2. 数据恢复

Namenode和SecondaryNamenode的工作目录存储结构完全相同,当Namenode故障退出需要重新恢复时,可以从SecondaryNamenode的工作目录中将fsimage拷贝到Namenode的工作目录,以恢复Namenode的元数据。但是SecondaryNamenode最后一次合并之后的更新操作的元数据将会丢失,最好Namenode元数据的文件夹放在多个磁盘上面进行冗余,降低数据丢失的可能性。

注意事项:

1. SecondaryNamenode只有在第一次进行元数据合并时需要从Namenode下载fsimage到本地。SecondaryNamenode在第一次元数据合并完成并上传到Namenode后,所持有的fsimage已是最新的fsimage,无需再从Namenode处获取,而只需要获取edits文件即可。

2. SecondaryNamenode从Namenode上将要合并的edits和fsimage拷贝到自己当前服务器上,然后将fsimage和edits反序列化到SecondaryNamenode的内存中,进行计算合并。因此一般需要把Namenode和SecondaryNamenode分别部署到不同的机器上面,且SecondaryNamenode服务器配置要求一般不低于Namenode。

3. SecondaryNamenode不是充当Namenode的“备服务器”,它的主要作用是进行元数据的checkpoint

Datanode

Datanode作为HDFS集群从节点,负责存储管理用户的文件块数据,并定期向Namenode汇报自身所持有的block信息(这点很重要,因为,当集群中发生某些block副本失效时,集群如何恢复block初始副本数量的问题)。

关于Datanode两个重要的参数:

1. 通过心跳信息上报参数

<property><name>dfs.blockreport.intervalMsec</name><value>3600000</value><description>Determines block reporting interval in milliseconds.</description></property>

2. Datanode掉线判断时限参数

Datanode进程死亡或者网络故障造成Datanode无法与Namenode通信时,Namenode不会立即把该Datanode判定为死亡,要经过一段时间,这段时间称作超时时长。HDFS默认的超时时长为10分钟30秒。如果定义超时时间为timeout,则超时时长的计算公式为:

timeout = 2 * heartbeat.recheck.interval(默认5分钟) + 10 * dfs.heartbeat.interval(默认3秒)。

<property>        <name>heartbeat.recheck.interval</name>        # 单位毫秒        <value>2000</value></property><property>        <name>dfs.heartbeat.interval</name>        # 单位秒        <value>1</value></property>

HDFS读写数据流程

了解了Namenode和Datanode的作用后,就很容易理解HDFS读写数据流程,这个也是面试中经常问的问题。

HDFS写数据流程

注意:

1.文件block块切分和上传是在客户端进行的操作

2.Datanode之间本身是建立了一个RPC通信建立pipeline

3.客户端先从磁盘读取数据放到一个本地内存缓存,开始往Datanode1上传第一个block,以packet为单位,Datanode1收到一个packet就会传给Datanode2,Datanode2传给Datanode3;Datanode1每传一个packet会放入一个应答队列等待应答

4.当一个block传输完成之后,客户端会通知Namenode存储块完毕,Namenode将元数据同步到内存中

5. Datanode之间pipeline传输文件时,一般按照就近可用原则

a) 首先就近挑选一台机器

b) 优先选择另一个机架上的Datanode

c) 在本机架上再随机挑选一台

HDFS读数据流程

注意:

1. Datanode发送数据,是从磁盘里面读取数据放入流,以packet为单位来做校验

2. 客户端以packet为单位接收,先在本地缓存,然后写入目标文件

客户端将要读取的文件路径发送给namenode,namenode获取文件的元信息(主要是block的存放位置信息)返回给客户端,客户端根据返回的信息找到相应datanode逐个获取文件的block并在客户端本地进行数据追加合并从而获得整个文件

HDFS HA机制

HA:高可用,通过双Namenode消除单点故障。

双Namenode协调工作的要点:

1. 元数据管理方式需要改变

a) 内存中各自保存一份元数据

b) edits日志只能有一份,只有active状态的Namenode节点可以做写操作

c) 两个Namenode都可以读取edits

d) 共享的edits放在一个共享存储中管理(qjournal和NFS两个主流实现,图中以放在一个共享存储中管理(qjournal和为例)

2. 需要一个状态管理功能模块

a) 实现了一个zk failover,常驻在每一个Namenode所在的节点

b) 每一个zk failover负责监控自己所在Namenode节点,利用zk进行状态标识,当需要进行状态切换时,由zk failover来负责切换,切换时需要防止brain split现象的发生

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Hadoop2.7.6_03_HDFS原理
  分而治之:将大文件、大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析;
踏歌行
2020/10/15
7070
Hadoop2.7.6_03_HDFS原理
【史上最全】Hadoop 核心 - HDFS 分布式文件系统详解(上万字建议收藏)
Hadoop 分布式系统框架中,首要的基础功能就是文件系统,在 Hadoop 中使用 FileSystem 这个抽象类来表示我们的文件系统,这个抽象类下面有很多子实现类,究竟使用哪一种,需要看我们具体的实现类,在我们实际工作中,用到的最多的就是HDFS(分布式文件系统)以及LocalFileSystem(本地文件系统)了。
五分钟学大数据
2021/02/08
2.4K0
【史上最全】Hadoop 核心 - HDFS 分布式文件系统详解(上万字建议收藏)
前方高能 | HDFS 的架构,你吃透了吗?
HDFS 是 Hadoop 中存储数据的基石,存储着所有的数据,具有高可靠性,高容错性,高可扩展性,高吞吐量等特征,能够部署在大规模廉价的集群上,极大地降低了部署成本。有意思的是,其良好的架构特征使其能够存储海量的数据。本篇文章,我们就来系统学习一下,Hadoop HDFS的架构!
大数据梦想家
2021/10/22
4870
Hadoop学习指南:探索大数据时代的重要组成——HDFS(下)
(1)客户端通过Distributed FileSystem 模块向NameNode 请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。 (2)NameNode返回是否可以上传。 (3)客户端请求第一个 Block上传到哪几个DataNode服务器上。 (4)NameNode返回3个DataNode节点,分别为dn1、dn2、dn3。 (5)客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用 dn2,然后dn2调用dn3,将这个通信管道建立完成。 (6)dn1、dn2、dn3逐级应答客户端。 (7)客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存), 以Packet 为单位,dn1 收到一个Packet 就会传给 dn2,dn2 传给 dn3;dn1 每传一个 packet 会放入一个应答队列等待应答。 (8)当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务 器。(重复执行3-7步)。
老虎也淘气
2024/01/30
2230
Hadoop学习指南:探索大数据时代的重要组成——HDFS(下)
HDFS最基础使用
随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS只是分布式文件管理系统中的一种。
ha_lydms
2023/10/04
3120
HDFS最基础使用
HDFS分布式文件存储系统详解
优点: 1.处理超大文件 能用来存储管理PB级的数据 1PB = 1024TB 2.处理非结构化数据、半结构化数据、结构化数据 流式的访问数据 一次写入、多次读取 3.运行于廉价的商用机器集群上 可运行在低廉的商用硬件集群上 故障时能继续运行且不让用户察觉到明显的中断
全栈程序员站长
2022/08/22
1.6K0
HDFS分布式文件存储系统详解
hadoop学习随笔-入门阶段
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-22uhcfxh-1617677655640)(D:\Code_Study\博客笔记\Hadoop学习笔记.assets\1604300154815.png)]
用户8483969
2021/04/09
5340
深入浅出:hadoop分布式文件存储系统(HDFS)
如上图所示,HDFS 也是按照Master 和Slave 的结构。分NameNode、SecondaryNameNode、DataNode 这几个角色。 NameNode:是Master 节点,是大领导。管理数据块映射;处理客户端的读写请求;配置副本策略;管理HDFS 的名称空间; SecondaryNameNode:是一个小弟,分担大哥namenode的一部分工作量;是NameNode 的冷备份;合并fsimage 和fsedits然后再发给namenode。 DataNode:Slave 节点,奴隶,干活的。负责存储client 发来的数据块block;执行数据块的读写操作。热备份:b 是a 的热备份,如果a 坏掉。那么b 马上运行代替a的工作。冷备份:b 是a 的冷备份,如果a 坏掉。那么b 不能马上代替a工作。但是b 上存储a 的一些信息,减少a 坏掉之后的损失。 fsimage:元数据镜像文件(文件系统的目录树。) edits:元数据的操作日志(针对文件系统做的修改操作记录) namenode 内存中存储的是=fsimage+edits。 SecondaryNameNode 负责定时默认1 小时,从namenode上,获取fsimage 和edits 来进行合并,然后再发送给namenode。减少namenode 的工作量。 1.工作机制 NameNode 负责管理整个文件系统元数据;DataNode 负责管理具体文件数据块存储;Secondary NameNode 协助NameNode 进行元数据的备份。HDFS 的内部工作机制对客户端保持透明,客户端请求访问HDFS都是通过向NameNode 申请来进行。
全栈程序员站长
2022/08/25
6480
深入浅出:hadoop分布式文件存储系统(HDFS)
NameNode和DataNode工作原理(图形化通俗易懂)
NameNode:存储文件的元数据。作用:管理HDFS的名称空间;配置副本策略;管理数据块(Block)映射信息;处理客户端读写请求。NameNode两个重要文件(内存中的镜像=fsimage+edits)。
lovelife110
2022/05/10
1.8K0
NameNode和DataNode工作原理(图形化通俗易懂)
深入浅出学大数据(三)分布式文件系统HDFS及HDFS的编程实践
此系列主要为我的学弟学妹们所创作,在某些方面可能偏基础。如果读者感觉较为简单,还望见谅!如果文中出现错误,欢迎指正~
不温卜火
2021/09/29
1.1K0
day07.HDFS学习【大数据教程】
分而治之:将大文件、大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析;
Java帮帮
2018/07/26
1.4K0
day07.HDFS学习【大数据教程】
Hadoop技术(一)分布式文件系统HDFS
明确 假设磁盘每秒读取500兆数据, 则1T内容需要2048s 约等于 30min
时间静止不是简史
2020/07/24
8690
大数据-HDFS的元信息和SecondaryNameNode
当 Hadoop 的集群当中, 只有一个 NameNode 的时候,所有的元数据信息都保存在了 FsImage 与 Eidts 文件当中,这两个文件就记录了所有的数据的元数据信息, 元数据信息的保存目录配置在了hdfs-site.xml 当中
cwl_java
2019/12/25
3860
大数据面试题(一):HDFS核心高频面试题
1)客户端向namenode请求上传文件,namenode检查目标文件是否已存在,父目录是否存在。
Lansonli
2022/12/12
5640
大数据面试题(一):HDFS核心高频面试题
大数据技术之_04_Hadoop学习_01_HDFS_HDFS概述+HDFS的Shell操作(开发重点)+HDFS客户端操作(开发重点)+HDFS的数据流(面试重点)+NameNode和Seconda
传统硬盘HDD(Hard Disk Drive)传输速率:100MB/s 固态硬盘SSD(Solid State Drive)传输速率:500MB/s 混合硬盘HHD(Hybrid Harddrive)传输速率:300MB/s PCIe固态硬盘SSD(Solid State Drive)传输速率:1500MB/s
黑泽君
2019/03/04
1.4K0
深刻理解HDFS工作原理
概述 HDFS(Hadoop Distributed File System )Hadoop分布式文件系统的简称。HDFS被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。DFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。HDFS是Apache Hadoop
xiangzhihong
2018/02/06
2.9K0
深刻理解HDFS工作原理
HDFS文件读写流程
详细步骤解析: 1、 client发起文件上传请求,通过RPC与NameNode建立通讯,NameNode检查目标文件是否已存在,父目录是否存在,返回是否可以上传; 2、 client请求第一个block该传输到哪些DataNode服务器上; 3、 NameNode根据配置文件中指定的备份数量及机架感知原理进行文件分配,返回可用的DataNode的地址如:A,B,C;
用户4870038
2021/02/05
7300
HDFS文件读写流程
Hadoop重点难点:HDFS读写/NN/2NN/DN
NameNode在内存中保存着整个文件系统的名字空间和文件数据块的地址映射(Blockmap)。如果NameNode宕机,那么整个集群就瘫痪了。
大数据真好玩
2021/10/12
1.2K0
Hadoop重点难点:HDFS读写/NN/2NN/DN
hadoop-hdfs-site.xml配置文件详解
hadoop:hdfs-site.xml配置文件详解 hdfs-site.xml配置文件j介绍 hadoop-hdfs相关的配置信息 hdfs-site.xml配置文件 name value description hadoop.hdfs.configuration.version 1 version of this configuration file dfs.namenode.logging.level info The logging level for dfs namenode. Other
许喜朝
2020/10/27
3.1K0
【大数据哔哔集20210122】面试官问我HDFS丢不丢数据?我啪就把这个文章甩到他脸上
HDFS作为分布式文件系统在分布式环境下如何保证数据一致性。HDFS中,存储的文件将会被分成若干的大小一致的block分布式地存储在不同的机器上,需要NameNode节点来对这些数据进行管理,存储这些block的结点称为DataNode,NameNode是用来管理这些元数据的。
大数据真好玩
2021/01/27
1.1K0
【大数据哔哔集20210122】面试官问我HDFS丢不丢数据?我啪就把这个文章甩到他脸上
推荐阅读
相关推荐
Hadoop2.7.6_03_HDFS原理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档