简单理解HDFS

HDFS

Hadoop Distribute File System, Hadoop分布式文件系统

特点

1,支持超大文件,一般来说Hadoop文件系统会存储TB或者PB级别的数据

2,检测和快速应对故障,这是HDFS文件系统的设计目标之一

3,流式数据访问,应用程序能以流的形式访问数据集

4,高容错性,数据自动保存多个副本,副本丢失后自动回复

5,不能低延迟数据访问,Hadoop针对海量数据的吞吐量做了优化,牺牲了获取数据的延迟

6,不适合存储大量小文件

7,简化的一致性模型,在HDFS中文件通常只支持一次写入多次读取

8,不支持超强的事务

技术结构

HDFS本身是一个典型的主从结构,主要进程:NameNode,从进程:DataNode

NameNode

管理元数据

HDFS中的元数据包含三十几个属性

1,上传的文件名及存储的虚拟路径

2,文件所属组

3,文件的权限,大小等等

每一条元数据都会被维系在内存以及磁盘中

1,维系在内存中目的是为了查询快

2,维系在磁盘上是为了保证数据的可靠性

在HDFS中和元数据相关的文件有两个

1,fsimage文件:元映像文件。该文件在磁盘上持久存储元数据

2,edits文件:操作文件。用于记录HDFS的写操作

HDFS写操作流程

1,当HDFS接收到写操作的时候,先将命令记录到edits_inprogress文件中,然后解析命令,更改元数据,返回ACK信号给客户端,表示写入成功,注意在这个过程中,fsimage文件没有变化。

2,当达到指定条件之后,edits_inprogress文件会产生滚动,生成一个edis文件,解析这个文件,并更新fsimage文件中的元数据。

3,生成新edis文件的同时还会产生一个新的edis_inprogress文件,后续的写操作记录在这个文件中。

edits_inprogress的滚动条件

1,空间:每隔1min扫描一次edits_inprogress文件,当文件中记录达到一百万条后会自动滚动生成一个edits文件

2,时间:每隔3600秒edits_inprogress会滚动产生一个edits文件

3,重启:当Name Node被重启的时候,会自动触发edits_inprogress文件的滚动

4,强制:通过命令hdfs dfsadmin -rollEdits强制滚动

注意:当NameNode第一次启动之后1min的时候edits_inprogress文件会滚动一次

管理DataNode

心跳机制管理DataNode

1,DateNode每3秒给Name Node发送心跳

2,如果NameNode超过10min30s没收到DataNode的心跳,就会认为DataNode已经lost

3,心跳信号包含clusterid集群编号,当前DataNode的状态

安全模式(safemode)

NameNode重启后会进入安全模式,此模式下只能读,不能写。合理时间内如果没有退出安全模式,说明数据产生了不可挽回的损失,此时要考虑强制退出安全模式。

在安全模式中

1,NameNode会触发edis_inprogress文件的滚动,更新fsimage并写入内存

2,Name Node会等待Data Node的心跳,如果内有收到,则这个DataNode已经lost,重新备份保证副本数量;如果收到了,则会进行checksum校验,校验失败视图恢复数据继续校验,成功后会退出安全模式

DataNode

1,DataNode是HDFS的从节点,用于存储数据,数据以Block形式落地到磁盘

2,DataNode的状态:预服役、服役、预退役、退役、丢失

3,DataNode通过心跳机制向Name Node注册管理信息

SecondaryNameNode

由于HDFS集群配置限制,Hadoop只支持两种结构:

1,1个NameNode+1个SecondaryName+n个DataNode

2,n个NameNode+n个DataNode

考虑到NameNode的核心地位,必须要对NameNode来进行备份,所以在集群中通常采用第二种结构,因此在集群中很少会见到SecondaryNameNode

HDFS相关流程

删除流程

1,客户端发起RPC请求到NameNode,请求删除指定文件。

2,Name Node收到请求会进行两次校验,校验是否有写入权限,是否有指定文件。

3,校验成功后,NameNode会将该操作记录在edits_inprogress中,更新内存中的元数据,然后给客户端一个ACK信号,表示删除成功。注意,此时文件并没有冲HDFS中真的删除,只是修改了元数据。

4,之后,NameNode等待DataNode的心跳,在心跳响应中要求DataNode删除对应的Block。

5,DataNode收到心跳响应后,才会去磁盘删除对应的Block以及校验和文件,此时数据才真正从 HDFS中删除。

写入流程

1,客户端向NameNode发送RPC请求,请求上传问价。

2,NameNode收到请求后,进行两次校验,校验是否有写入权限,校验是否有同名文件。

3,校验成功给客户端返回一个信号,表示润许写入。

4,客户端收到信号后,再次发送请求,获取第一个Block的存储位置。

5,Name Node收到请求后,会将Block的存储位置返回给客户端(默认是三个)。

6,客户端收到地址后,会选择一个比较近的节点请求建立管道以写入数据,第一个存储的节点收到请求后,会顺次请求下一个Block存储的节点,依次向后,知道最后一个节点请求应答成功 。

7,建立好管道后,客户端将当前的Block封包(packet)写入第一个节点,然后第一个副本所在节点依次传输给下一个节点,直到写入最后一个节点。

8,写完一个Block后,客户端会给Name Node再次发送请求,请求获取下一个Block的存储位置。

9直到最后一个Block写完,客户端会给NameNode发送一个结束信号,NameNode关闭文件,文件关闭后不能修改。

读取流程

1,客户端向NameNode发送RPC请求,请求下载指定文件。

2,Name Node收到请求后,会进行两次校验,校验是否有读取权限,校验是否有指定文件。

3,校验成功,返回客户端允许读取。

4,客户端再次发送请求,获取第一个Block的存储位置。

5,NameNode收到请求之后,会将Block的存储位置返回给客户端。

6,客户端收到请求后,会选择一个比较近的节点,读取Block。

7,读取完成后,客户端会进行checkSum的校验,如果校验失败,则客户端会从剩余地址中重新读取,如果校验成功,则客户端会给NameNode发送请求,继续读取下一个Block块。

8,当客户端读取完所有Block块后,会给NameNode发送结束信号,NameNode收到信号后会关闭文件。

  • 36
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值