HDFS文件系统



提示:以下是本篇文章正文内容,下面案例可供参考

一、HDFS概述?

1.1 HDFS产出背景及定义

(1)、产出背景
随着数据量变得越来越大,在一个操作系统的磁盘已经存不下这些庞大的数据,所以需要存到多个操作系统的磁盘中,但是由于不方便管理,迫切需要一种系统可以管理多台机器上的文件,这就是分布式文件管理系统,HDFS就是分布式文件管理系统的一种。
(2)、HDFS定义
HDFS(Hdoop Distributed File System),它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色;
HDFS的使用场景:适合一次写入,多次读出的场景。一个文件经过创建、写入和关闭之后就不需要改变了。

1.2 HDES的优缺点

HDFS优点:
1、高容错性:数据可以保存多个副本。它可以通过增加副本的形式,提高容错性。某个副本丢失后可以自动恢复
2、适合处理大数据:数据规模(能够处理数据规模达到GB、TB、甚至PB级别的数据)、文件规模(能够处理百万级别的文件数量),数量相当大
3、可构建在廉价机器上,通过多副本机制,提高可靠性
HDFS缺点:
1、不适合低时延的数据访问,比如毫秒级的存储数据是做不到的
2、无法做到对大量小文件进行存储。存储小文件的话,它会占用NameNode大量内存来存储文件目录和块信息,这样是不可取的,因为NameNode的内存总是有限的;小文件存储的寻址时间会超过读取时间,它违反了HDFS设计目标
3、不支持并发写入、文件随意修改:一个文件只能一个写,不允许多个线程同时写;仅支持数据append(追加),不支持文件的随意修改

1.3 HDFS组成架构

1、client就是客户端
(1)、文件切分:文件上传HDFS的时候,client将文件切分成一个个Block,然后进行上传;
(2)、与NameNode交互,获取文件的位置信息
(3)、与DataNode交互,读取或者写入数据
(4)、Clients提供一些命令来管理 HDFS,比如NameNode的格式化
(5)、Clientst提供一些命令来访问HDFS,比如对HDFS的增删改查操作
2、SecondaryNameNode:并非NameNode的热备。当NameNode挂掉时,它并不能马上替换NameNode并提供服务
(1)、辅助NameNode,分担其工作两量,比如定期合并Fsimage和Edits,并推送给NameNode
(2)、在紧急情况下可以辅助恢复NameNode

1.4HDFS文件块大小

HDFS文件块大小:
HDFS中的文件在物理上是分块存储的,块的大小可以通过配置参数(dfs.blocksize)来规定默认大小在Hadoop2.x/3.x版本中是128M,1.x版本是64M
为什么块的大小不能设置太小,也不能设置太大?
(1)、HDFS块太小会增加寻址时间,程序一直在寻找块的开始位置
(2)、如果块设置太大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。导致程序在处理这块数据时,会非常慢

二、HDFS的Shell操作

2.1 基本语法

hadoop fs 具体命令 or hdfs dfs 具体命令
两个命令是完全相同

2.2 常用命令实操

1、启动Hadoop集群:sbin/start-dfs.sh、sbin/start-yarn.sh
2、创建/sanguo文件夹:hadoop fs -mkdir /sanguo
3、从本地剪切粘贴到HDFS:hadoop fs -moveFormLocal ./sanguo.txt /sanguo
4、从本地文件系统中拷贝到HDFS路径中:hadoop fs -copyFromLocal weiguo.txt /sanguo
5、-put等同于-copyFromLocal 生产环境更习惯用put
6、追加一个文件到已经存在的文件末尾:hadoop fs -appendToFile liubei.txt /sanguo/sanguo.txt
7、从HDFS拷贝到本地:hdoop fs -copyLocal /sanguo/shuguo.txt(等同于copyToLocal,生产环境更习惯用get)
8、显示目录信息: hdoop fs -ls /sanguo
9、显示文件内容:hadoop fs -cat /sanguo/shuguo.txt
10、-chgrp、-chmod 、-chown(修改文件所属权限):
hadoop fs -chmod 66 /sanguo/shuguo.txt
hadoop fs -chown atguigu:atguigu /sanguo/shuguo.txt
11、-mkdir:创建路径
12、-mv:在HDFS目录中移动文件
13、-tail:显示一个文件的末尾1kb的数据
14、-rm:删除文件活文件夹
15、-rm -r: 递归删除目录及目录里面的内容

三、HDFS的读写流程

写流程:
在这里插入图片描述
读流程:
在这里插入图片描述

四、NameNode和SecondaryNameNode

4.1 NN和2NN工作机制

NameNode中的元数据是存储在哪?
如果存储在NameNode节点的磁盘上,因为经常需要随机访问,还有响应客户请求,必然是效率过低。因此,元数据需要存放在内存中,但如果只存在内存中,一旦断电,元数据丢失,整个集群就无法工作。因此产生在磁盘中备份元数据的FsImage。
这样又会带来新的问题,当在内存中的元数据更新时,如果同时更新FsImage,就会导致效率过低,但如果不更新,就会发生一致性问题,一旦NameNode节点断电,就会产生数据丢失。因此,引入Edits文件(只进行追加操作,效率很高)。每当元数据更新或者添加元数据时,修改内存中的元数据并追加到Edits中,这样一旦NameNode节点断电,可以通过FsImage和Edtis的合并。
NameNode工作机制

在这里插入图片描述
1、第一阶段:NameNode启动
(1)、第一次启动NameNode格式化后,创建Fsimage和Edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。
(2)、客户端对元数据进行增删改的请求
(3)、NameNode记录操作日志,更新滚动日志
(4)、NameNode在内存中对元数据进行增删改
2、第二阶段:SecondaryNameNode工作
(1)、SecondaryNameNode询问NameNode是否需要CheckPoint,直接带回NameNode是否检查结果。
(2)、SecondaryNameNode请求执行CheckPoint
(3)、NameNode滚动正在写的Edits日志
(4)、将滚动前的编辑日志和镜像文件拷贝到SecondaryNameNode。
(5)、Secondary NameNode加载编辑日志和镜像文件到内存,并合并。
(6)、生成新的镜像文件fsimage.chkpoint。
(7)、拷贝fsimage.chkpoint到NameNode
(8)、NameNode将fsimage.chkpoint重新命名成fsimage。

4.2 FsImage和Edits解析

Fsimage和Edits概念
NameNode被格式化之后,将在/opt/module/hadoop-3.1.3/data/tmp/dfs/name/current目录产生如下文件
fsimage_000000000000000000
fsimage_000000000000000000.md5
seen_txid
VERSION
(1)、Fsimage文件:HDFS文件系统元数据的一个永久性的检查点,其中包含HDFS文件系统所有目录和文件inode的序列化信息
(2)、Edits文件:存放HDFS文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先会记录到Edits文件中。
(3)、 seen_txid文件保存的是一个数字,就是最后一个edit_的数字
(4)、每次NameNode启动的时候都会将Fsimage文件读入内存,加载Edtis里面的更新操作,保证内存中的元数据信息是最新、同步的,可以看成NameNode启动的时候就将Fsimage和Edits文件进行了合并。
1、oiv查看Fsimage文件
(1)、查看oiv和oev命令
oiv:将脱机fsimage viewer应用于fsimage
oev:将脱机编辑查看器应用于编辑文件
(2)、基本语法
hdfs oiv -p 文件类型 -i 镜像文件 -o 转换后文件输出路径

5.3 CheckPoint时间设置

1、通常情况下,SecondaryNameNode 每隔一小时执行一次
【hdfs-default.xml】
在这里插入图片描述

2、一分钟检查一次操作次数,当操作次数达到1百万时,SecondaryNameNode执行一次。
在这里插入图片描述

五、DataNode

5.1 DataNode工作机制

在这里插入图片描述
(1)、一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳
(2)、DataNode启动后向NameNode注册,通过后,周期性(6小时)的向NameNode上报所有的块信息
DN向NN汇报当前解读信息的时间间隔,默认6小时:

dfs.blockreport.intervalMsec
21600000
Determines block reporting interval in millseconds
DN扫描自己节点块信息列表时间,默认6小时

dfs.datanode.directoryscan.interval
21600s

(3)、心跳是没3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。
(4)、集群运行中可以安全加入和退出一些机器。

5.2 数据完整性

思考:如果电脑磁盘里面存储的数据是控制高铁信号灯的红灯信息(1)和绿灯信号(0),但是存储该数据的磁盘坏了,一直显示是绿灯,是否和危险?同理DataNode节点上的数据损坏了,却没有发现,是否也很危险,那么如何解决尼?
如下是DataNode节点保证数据完整性的方法:
(1)、当DataNode读取Block的时候,它会计算CheckSum
(2)、如果计算后的CheckSum,与Block创建是值不一样说明Block已经损坏。
(3)、Client读取其他DataNode上的Block。
(4)、常见的校验算法crc(32)、md5(128)、sha1(160)
(5)、DataNode在其文件创建后周期验证CheckSum。

6.3 掉线时限参数设置

1、DataNode进程死亡或者网络故障造成DataNode无法与NameNode通信
2、NameNode不会立即把节点判定为死亡,要经过一段时间,这段时间暂称作超市时时长
3、HDFS默认的超时时长为10分钟+30秒
4、如果定义超时时间为TimeOut,则超时时长的计算公式为:
TimeOut = 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval
而默认的dfs.namenode.heartbeat.recheck-interval大小为5分钟,dfs.heartbeat.interval默认为3秒
需要注意的是hdfs-site.xml配置文件中的heartbeat.recheck.interval 的单位为毫秒,dfs.heartbeat.interval的单位为秒
在这里插入图片描述

想要大数据相关资料可以加微信
在这里插入图片描述
觉得写得好的大佬可以打赏一下,感谢感谢!

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值