大数据hadoop生态之HDFS文件系统

HDFS定义:
HDFS(Hadoop Distributed File System),是一个分布式文件系统,用于存储文件,由多服务器联合起来实现,各节点实现不同的工作任务。

HDFS优点:

  • 高容错性 — 数据多副本保存,某一个副本丢失可自动恢复。
  • 数据处理能力强 — 能够处理TB,以及PB级别数据量,能处理百万规模以上的文件数量。

HDFS缺点:

  • 不能实现低延时 — 不适合低延时数据访问,具有一定延时性。
  • 不适合小文件存储 —大量小文件会占用nameNode大量内存来存储文件元数据和块信息;小文件寻址时间超过文件读取传输时间,不符合设计理念。
  • 不支持并发写入 — 一个文件只能有一个写入线程,不能多线程同时写入。
  • 不支持数据修改 — 只支持数据追加,不支持修改。

HDFS文件块:
在HDFS上存储的文件,物理上是分块(block)存储的,块的大小是可以通过参数(dfs.blocksize)配置。hadoop 2.x版本默认块大小是128M,1.x老版本默认块大小是64M。
块的大小主要取决于磁盘读数据性能。HDFS系统理想读数据:寻址时间 / 数据传输时间 = 1%,当前磁盘传输速率百M每秒,而数据块大小为128M,当传输时间大于1秒,所以HDFS无法做到毫秒级别低延迟。

HDFS组成和职责:
HDFS组成及功能:
hdfs由 NameNode、DataNode、Client 、Secondary NameNode四个部分组成,它们互相协调工作。

  • NameNode: ------ master角色,管理协调。
    1)hdfs命名空间管理;
    2)配置副本策略;
    3)管理数据块映射信息;
    4)处理客户端读写请求。
  • DataNode:------ Slave角色,接收NN命令,执行具体操作。
    1)实际存储数据块;
    2)数据块读\写操作
  • Client:------ 客户端。
    1)文件切分,文件上传hdfs之前,根据配置切分文件;
    2)与NameNode交互,获取文件存储的节点信息;
    3)与DataNode交互,数据的读写;
    4)Client通过一些命令来管理HDFS,如NameNode的格式化、 对HDFS增删改查;
  • Secondary NameNode:------ 不是NameNode的热备,不会接替NameNode的工作。
    1)辅助NameNode的工作,分担工作压力,比如定时合并FSimage和Edits,推送给NameNode;
    2)NameNode出现故障时,可辅助NameNode恢复数据。

HDFS上传文件流程:

在这里插入图片描述

  1. 客户端通过Distributed FileSystem 模块向NameNode请求上传文件,NameNode检查文件合法性;
  2. NameNode响应是否可上传;
  3. 客户端切分文件并请求第一个Block数据上传节点;
  4. NameNode返回数据库上传的地址信息;
  5. 客户端通过FSDataOutputStream就近原则请求第一个DataNode节点建立通道,第一个DataNode节点向第二个DataNode节点请求,第二个DataNode向第三个DataNode请求;
  6. 第三个DataNode向第二个DataNode应答,第二个DataNode向第一个DataNode应答,第一个DataNode向客户端应答;
  7. 客户端以Packet为单位向第一个DataNode上传数据,第一个DataNode复制数据向第二个DataNode传输,第二个DataNode复制数据向第三个DataNode传输,然后反向应答;
  8. 当一个Block上传完成后,客户端向NameNode请求上传第二个Block,直到所有数据库上传完成。
    一个数据块在DataNode是以文件的形式存储在磁盘上,数据块包含两个文件:一是数据库本身,一是数据库元数据(数据块长度、数据块的校验和、时间戳)

HDFS读文件流程

在这里插入图片描述

  1. 客户端通过DistributeFileSystem 向NameNode请求下载文件;
  2. NameNode查询元数据,返回对应数据块所在的DataNode节点;
  3. 客户端就近原则请求DataNode 下载第一个Block数据块;
  4. 该DataNode以packet为单位向客户端传输数据块;
  5. 客户端接收到一定量数据后,从缓存把数据刷到目标文件。

HDFS沟通机制
在这里插入图片描述

  • DataNode启动后向NameNode注册;
  • NameNode返回注册成功应答;
  • DataNode向NameNode上报数据块信息,以后每小时上报一次;
  • DataNode向NameNode发送心跳;
  • NameNode返回心跳应答,带有对该DataNode操作命令;
  • 超过10分钟没收到DataNode心跳,则认为该DataNode不可用。

集群启动时,先进入安全模式,等每个数据块至少一个副本元数据上报到NameNode,退出安全模式,在安全模式下DataNode上数据是只读。

Secondary NameNode 与NameNode 工作机制:

在这里插入图片描述
NameNode内部工作:

  1. 当NameNode是第一次启动的时,先进行格式化,然后创建Fsimage和Edits文件;
  2. 如果NameNode不是第一次启动,直接加载Fsimage和Edits文件到内存;
  3. 客户端发送请求NameNode增删改元数据时,追加操作信息到Edits文件,NameNode在内存中修改元数据。

Secondary NameNode辅助NameNode工作:

  1. Secondary NameNode咨询NameNode是否需要CheckPoint操作,返回结果应答。(一个小时咨询一次)
  2. Secondary NameNode 向 NameNode 请求执行CheckPoint;(NameNode 中edits文件达到阈值)
  3. 滚动正在追加的edits文件;
  4. 将滚动前的edits 和fsimage文件复制到Secondary NameNode内存中;
  5. Secondary NameNode 通知日志操作合并成新的fsimage.chkpoint;
  6. 将新合成的edits.chkpoint 复制到NameNode;
  7. NameNode将fsimage.chkpoint改名称fsimage,代替之前的fsimage。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值