HDFS

Posted 虹猫tomcat

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDFS相关的知识,希望对你有一定的参考价值。

2013年,谷歌发布了三篇影响大数据领域格局的文章,也称作三驾马车,分别是GFS、MapReduce和BigTable。后来Doug Cutting根据GFS的论文创建了分布式文件系统HDFS,他也被称为Hadoop之父。


单个机器的容量往往无法满足包含大量数据文件的存储,需要跨机器存储,分布在集群上统一管理,这样的文件系统称为分布式文件系统。HDFS使用多台计算机存储文件, 并且提供统一的访问接口, 用户像是访问一个普通文件系统一样使用分布式文件系统。


HDFS的应用场景


HDFS适用于以下场景:

存储非常大的文件,M、G、TB级别,需要高吞吐量,对时延没有要求;


采用流式的数据访问方式,即一次写入、多次读取,不顾延迟的代价,一次把数据读完;


Hadoop可运行于普通廉价机器,节约成本,高容错性,为数据存储提供了所需的扩展能力。


HDFS不适用于以下场景:

低延时的数据访问,对延时要求在毫秒级别的应用,不适合采用HDFS;


大量的小文件,文件的元数据保存在NameNode的内存中, 整个文件系统的文件数量会受限于NameNode的内存大小;


多方读写,需要任意的文件修改HDFS采用追加的方式写入数据,不支持文件任意的修改,不支持多个写入器。


HDFS架构



工作流程:

HDFS(一)


HDFS是一个主从架构,主要由Client、NameNode、DataNode和Secondary NameNode四部分组成。


Client(客户端):


文件上传至HDFS时,Client 将文件切分成若干的Block块,然后进行存储。


与NameNode交互,获取文件的位置信息。


与DataNode交互,读取或者写入数据。Client 提供一些命令来管理和访问HDFS,如启动或者关闭HDFS。


NameNode(Master):主要负责文件元数据的操作、管理 HDFS 的名称空间管理数据块(Block)、映射信息、配置副本策略、处理客户端读写请求。




持久化机制:由于元数据信息保存在NameNode的内存中,内存中数据是临时存储的,当NameNode重启后原来的数据会丢失,因此元数据信息会定期保存到本地磁盘fsImage文件(镜像文件)和edits文件(日志文件)中,重启后读取这些文件即可恢复数据。


心跳机制:一段时间内NameNode若接受到DataNode的心跳信息,则认为DataNode工作正常,若在一定时间内未接受到DataNode的心跳,则认为DataNode已经宕机 ,NameNode会把DataNode上的数据块重新复制。 


NameNode具有副本机制,根据全局情况做出放置副本的策略,决定副本文件数据块到底存放到哪些DataNode上。


DataNode(Slave):DataNode根据NameNode下达的命令执行实际的操作,存储实际的数据块或执行数据块的读/写操作。


数据流不经过NameNode,会询问它跟那个DataNode联系,DataNode负责处理文件内容的读写请求。Data Node周期性向NameNode汇报数据块信息、缓存数据块信息。对于经常访问的信息放在缓存中读取速度远远快于磁盘,可以有效提高效率。


Secondary NameNode:它不是NameNode的热备,只能辅助 NameNode,由于NameNode内存中存放了大量的元数据信息,Secondary NameNode可以分担它的工作量,定期合并fsimage和fsedits文件,并发送给NameNode。在紧急情况下,可辅助恢复 NameNode。


HDFS的文件副本机制


所有的文件都是以 Block 块的方式存放在HDFS文件系统当中, 一个文件有可能大于集群中任意一个磁盘,引入块机制,可以很好的解决这个问题。


使用块作为文件存储的逻辑单位可以简化存储子系统,块非常适合用于数据备份进而提供数据容错能力。


在2.x版本的Hadoop中,Block块大小默认为128M,在之前搭建Hadoop集群中的配置文件hdfs-site.xml中,dfs.blocksize用于设置Block的大小,单位为字节:


HDFS(一)


HDFS的副本策略,默认的副本数为3:


HDFS(一)


HDFS的机架感知策略


机架就是存放服务器的架子:



以默认的副本数为例,第一个副本会存放在和客户端同一个机器,第二个副本采用随机的方式或者考虑机器容量,放在和客户端同机架不同的机器上,第三个副本采用随机的方式或者考虑机器容量,放在和客户端不同机架的机器上。


关于HDFS的理论知识是非常重要的。后面后继续介绍HDFS的命令行操作,文件读写以及API操作。

以上是关于HDFS的主要内容,如果未能解决你的问题,请参考以下文章

话说HDFS

HDFS讲义

hadoop安装教程

大数据- HDFS

hadoop安装教程

SpringBoot集成Hadoop