**
前言
**
HDFS:Hadoop Distributed File System ,Hadoop分布式文件系统,主要用来解决海量数据的存储问题
重点概念
文件切块,副本存放,元数据
HDFS概念
首先,它是一个文件系统,用于存储文件,通过统一的命名空间——目录树来定位文件
其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色;
HDFS重要特性
(1)HDFS中的文件在物理上是分块存储(block),块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在hadoop2.x版本中是128M,老版本中是64M
(2)HDFS文件系统会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data
(3)目录结构及文件分块信息(元数据)的管理由namenode节点承担
——namenode是HDFS集群主节点,负责维护整个hdfs文件系统的目录树,以及每一个路径(文件)所对应的block块信息(block的id,及所在的datanode服务器)
(4)文件的各个block的存储管理由datanode节点承担
—- datanode是HDFS集群从节点,每一个block都可以在多个datanode上存储多个副本(副本数量也可以通过参数设置dfs.replication)
(5)HDFS是设计成适应一次写入,多次读出的场景,且不支持文件的修改
(注:适合用来做数据分析,并不适合用来做网盘应用,因为,不便修改,延迟大,网络开销大,成本太高)
HDFS图解
通过上面的描述我们知道,hdfs很多特点:
保存多个副本,且提供容错机制,副本丢失或宕机自动恢复(默认存3份)。
运行在廉价的机器上
适合大数据的处理。HDFS默认会将文件分割成block,,在hadoop2.x以上版本默认128M为1个block。然后将block按键值对存储在HDFS上,并将键值对的映射存到内存中。如果小文件太多,那内存的负担会很重。
HDFS角色介绍
NameNode:元数据节点,是系统唯一的管理者,负责元数据的管理(管理HDFS的名称空间)、与client交互进行提供元数据读写请求,分配数据存储节点、配置副本策略
DataNode:数据存储节点,负责数据块的存储与冗余备份、执行数据块的读写操作
Secondary NameNode:并非NameNode的热备份(算是冷备份)
负责辅助NameNode,分担其工作量,定期合并有关信息,并推送给NameNode,在紧急情况下,可辅助恢复NameNode
相关解释
热备份:b是a的热备份,如果a坏掉。那么b马上运行代替a的工作。
冷备份:b是a的冷备份,如果a坏掉。那么b不能马上代替a工作。但是b上存储a的一些信息,减少a坏掉之后的损失。
HDFS工作原理(写操作)
HDFS写入数据操作
1、根据NameNode通信请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在
2、NameNode返回是否可以上传
3、client会将文件分成相应的块,请求第一个 block该传输到哪些DataNode服务器上
(NameNode节点会记录block信息,并告知Client可用的DataNode)
4、client向DataNode发送相应的块,发送过程是以流式写入
HDFS数据存储单元(Block)
1.文件会被切分为固定大小的数据块
2.默认的数据块为128MB(hadoop2.x以上),可以配置
3.若文件大小不到128MB,则单独成为一块
文件的存储方式
1.按块大小分成若干块,存储到不同节点上
2.默认情况下,一个块上有三个副本
流式写入过程详细介绍:
1、将 block1按 64k 的package划分;
2、然后将第一个package发送给第一个host1;
3、host1接收完后,将第一个package发送给host2,同时client向host2发送第二个package;
4、host2接收完第一个package后,发送给host3,同时接收host1发来的第二个package;
5、以此类推,如图红线实线所示,直到将block1发送完毕;
6、host2、host1、host3向NameNode发送通知,host2向Client发送通知,说“消息发送完了”。
7、client收到host1发来的消息后,向NameNode发送消息,说block1写完了。这样block1就完成了。
8、发送完block1后,再向host4,host5,host6发送block2
9、发送完block2后,host4,host5,host6向NameNode发送通知,host4向Client发送通知,
10、client向NameNode发送消息,告知其已经写完
注:图中引用的数据块大小为64M,在Hadoop2.x中默认的数据块大小为128M
HDFS工作原理(读操作)
HDFS读取数据操作
1.client向NameNode发送读请求;
2.NameNode查看Metadata信息,返回fileA的block的位置:
3.数据从DataNode读取对应的block的流
4.block的位置是有先后顺序的,先读block1,再读block2。而且block1去host2上读取;然后block2,去host7上读取。
注:图中引用的数据块大小为64M,在Hadoop2.x中默认的数据块大小为128M
HDFS工作原理(DataNode选取)
Namenode选择副本存储于那一个Datanode
对于一个文件的每一个Block来说,默认是存储在三个节点上,这里需要对其可靠性,写入或读取带宽进行权衡
Hadoop 的布局策略是第1个副本放在与客户端相邻的机架上随机一个节点上,第2个副本随机放在与第1个不同机架上的一个节点,第3个副本放在与第2个节点的同机架上的另一个节点
HDFS工作原理(Secondary Namenode 作用)
(1)fsimage:文件系统映射文件,也是元数据的镜像文件(磁盘中),存储某段时间NameNode内存元数据信息。
(2)edits :元数据的操作日志(针对文件系统做的修改操作记录)
NameNode内存中存储的是=fsimage+edits
SecondaryNameNode负责定时默认1小时,从NameNode上,获取fsimage和edits 来进行合并,然后再发送给NameNode。减少NameNode的工作量。
Sencondary NameNode作用:
有两个,一个是镜像备份,二是日志与镜像的定期合并。
两个过程同时进行,称为checkpoint(检查点)
镜像备份的作用:备份fsimage(fsimage是元数据发送检查点时写入文件)
日志与镜像的定期合并的作用:将NameNode中edits日志和fsimage合并,防止如果NameNode节点故障,NameNode下次启动的时候,会把fsimage加载到内存中,应用edits,edits 往往很大,导致操作往往很耗时。
HDFS特点总结
1.高容错性
1)数据自动保存多个副本。
2)某一个副本丢失以后,它可以自动恢复,这是由 HDFS 内部机制实现的,我们不必关心
2.适合大数据处理
1)处理数据达到 GB、TB、甚至PB级别的数据。
2)能够处理百万规模以上的文件数量,数量相当之大。
3.流式文件访问
1)一次写入,多次读取。文件一旦写入不能修改,只能追加
2)它能保证数据的一致性
4.可构建在廉价机器上
1)它通过多副本机制,提高可靠性
2)它提供了容错和恢复机制。比如某一个副本丢失,可以通过其它副本来恢复
HDFS局限性(缺点)总结
1.低延时数据访问
它适合高吞吐率的场景但是它在低延时的情况下是不行的,比如毫秒级以内读取数据,这样它是很难做到的
2.小文件存储
1)存储大量小文件的话,它会占用 NameNode大量的内存来存储文件、目录和块信息
2)小文件存储的寻道时间会超过读取时间
HDFS保证可靠性的措施
1)冗余备份
每个文件存储成一系列数据块(Block)。为了容错,文件的所有数据块都会有副本(副本数量即复制因子,课配置)(dfs.replication)
2)副本存放
采用机架感知(Rak-aware)的策略来改进数据的可靠性、高可用和网络带宽的利用率
3)心跳检测
NameNode周期性地从集群中的每一个DataNode接受心跳包和块报告,收到心跳包说明该DataNode工作正常
4)安全模式
系统启动时,NameNode会进入一个安全模式。此时不会出现数据块的写操作。
5)数据完整性检测
HDFS客户端软件实现了对HDFS文件内容的校验和(Checksum)检查(dfs.bytes-per-checksum)