HDFS分布式文件系统

1、简介

Hadoop分布式文件系统(HDFS)是指被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统(Distributed File System)。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。HDFS是Apache Hadoop Core项目的一部分。
HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求(requirements)这样可以实现流的形式访问(streaming access)文件系统中的数据。
为了做到可靠性(reliability),创建了多分数据块(data blocks)的复制(replicas),并将它们反反制在服务器群的计算节点中(compute nodes),MapReduce 就可以在它们所在的节点上处理这些数据了

2、体系结构

NameNode:
存储元数据,元数据(除文件内容之外的数据)保存在内存中(事实上,在磁盘中也保存了一份,在启动的时候会加载到内存中),保存文件,block,datanode之间的映射关系
DataNode:
存储文件内容,文件内容保存在磁盘,维护了block id到datanode的文件的映射关系

3、运行机制

一个名字节点和多个数据节点,
数据复制(冗余机制)-----存放的位置(机架感知策略)
故障检测-----数据节点:
心跳包(检测是否宕机)
块报告(安全模式下检测)
数据完整性检测(校验和比较)-----名字节点(日志文件,镜像文件)
空间回收机制

优点:
高容错性(自动保存多个副本,副本丢失后,自动恢复),
适合批处理(移动计算而非数据,数据位置暴露给计算框架),
适合大数据处理,可构建在廉价机器上(通过多副本提高可靠性,提供了容错和恢复机制)
缺点:
低延迟数据访问(比如毫秒级,低延迟与高吞吐率),
小文件存取(占用NameNode大量内存,寻道时间超过读取文件时间),并发写入,文件随机修改(文件内容不可修改,仅支持append)网盘大部分都是Hadoop运行

数据存储单元(block)
默认情况下,每一个块都有三个副本数量

NameNode:
主要功能:接收客户端的读写服务
保存metadata(元数据)信息包括文件owership和permissions,文件包含哪些块,Block保存在哪个DataNode(启动后信息会加载到内容)
metadata信息在启动后会加载到内存,metadata存储到磁盘文件名为‘fsimage’,block的位置信息不会保存到fsimage,edits记录对metadata的操作日志

SecondaryNameNode:
它不是NameNode的备份(但可以做一部分的元数据备份),它的主要工作时帮助NameNode合并edits log(记录元数据的操作日志,记录删除,但不会去HDFS中删除,当执行bin的时候去删除),减少NameNode启动时间
SNN执行合并时机(删除,edits和fs合并时,合并后,会生成一个新的fsimage做为推送者或传送站,传送回NameNode并替换 )
根据配置文件设置的时间间隔fs.checkpoint.perioud默认3600秒
根据配置文件设置edits log大小fs.checkpoint.size规定edits文件的最大值默认时64MB
在这里插入图片描述

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

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

DataNode:
存储数据(block)
启动DN现成的时候回向NN汇报block信息
通过向NN发送心跳保持与器联系(3秒一次),如果NN10分钟没有收到DN的心跳,则认为器已经lost,并copy其上的block到其他DN上

Block的副本放置策略
第一个副本:放置在上传文件的DN;如果时集群外提交,则随机挑选一台磁盘不太慢,CPU不太忙的节点
第二个副本:放置在于第一个不同的机架(硬件电插板什么的)的节点上
第三个副本:于第二个副本相同机架的节点
更多副本:随机节点

安全模式:

namenode启动的时候,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作;
一旦在内存中成功建立文件系统元数据的映射,则创建一个新的fdimage文件(这个操作不需要SecondaryNameNode)和一个空的编辑日志。
此刻namenode运行在安全模式,机namenode的文件系统对于客服端来说时只读的,(显示目录,显示文件内容等,写,删除。重命名都会失败)。
在此阶段NameNode收集各个Datanode的报告,当数据块达到最小副本数以上时,会被认为时安全的,在一定比例(可设置)的数据块被确定为安全后,再过若干时间,安全模式结束
当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数,系统中数据块的位置并不是有namenode维护的,而是以块列表形式存储在datanode中

学习中产生的疑问及解决:
1、fsimage会越滚越大,到一定大小的时候?
答:fsimage不会随着操作更改无限制变大,它会保持一个数据平衡状态,

2、snn可以备份nn的一部分数据从图哪里看出来?当nn挂掉了,记录操作的edits.new的数据就丢失了,但snn还保存着从nn中获取的未合并之前的数据,可以保留大部分数据,那保留未合并的数据,nn挂掉,那么操作是否未执行?
答:图中是从获取namenode的两个文件时候备份,当namenode挂掉之后,Secondnamenode会继续执行,namenode里有一个校验的机制,校验操作是否执行过,未执行则重新执行(校验的机制其实是校验的方法,常用校验方法是crc循环冗余校验)

3、Secondnamenode的整体机制是检查点

4、当数据量大的时候时间会长

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值