大数据入门基础Hadoop生态圈介绍——HDFS

什么是分布式文件系统

由于单机的存储能力有限,难以存储日益增长的数据,于是我们便将数据分配到多个机器中进行存储,因此我们迫切需要一种系统方便管理和维护多台机器上的存储数据的文件,这就是分布式文件系统。HDFS只是分布式文件系统中的一种。

HDFS的优缺点

优点:
        1、高容错性
                (1)数据自动保存多个副本。它通过增加副本的形式,提高容错性。
                (2)某个副本丢失后,它可以自动恢复
        2、适合大数据处理
                (1)数据规模:能够处理数据规模达到GB、TB甚至PB级别的数据
                (2)文件规模:能处理百万规模以上的文件数量。
                (3)可构建在廉价的机器上,通过多副本机制,提高可靠性
缺点:
                1、不适合低延时数据访问,比如毫秒级的数据存储是做不到的
                2、无法高效的对大量小文件进行存储
                3、不支持并发写入,文件随机修改

HDFS的组成

架构主要由四部分组成:Client、NameNode、DataNode、secondaryNameNode
一、Client
(1)文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行存储
(2)与NameNode进行交互,获取文件的存储位置
(3)与DataNode进行交互,读取或者写入数据
二、NameNode
(1)管理HDFS的名称空间-namespace
(2)管理数据块(Block)的映射信息
(3)配置副本策略,默认 3
(4)处理客户端的请求
三、DataNode
(1)存储实际的数据块
(2)执行数据块的读写操作
四、SecondaryNameNode
(1)辅助NameNode,分担其工作量
(2)定期合并NameNode的fsimage和Edits,并推送给NameNode
(3)在紧急情况辅助帮助恢复NameNode
注:SecondaryNameNode并非NameNode的热备,在NameNode宕机的时候并不能马上替换NameNode提供服务大数据入门基础Hadoop生态圈介绍——HDFS

HDFS写数据流程

大数据入门基础Hadoop生态圈介绍——HDFS

(1)Client通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否存在,父目录是否存在。
(2)NameNode响应Client是否可以上传。
(3)Client请求第一个Block上传到哪几个服务器。
(4)NameNode返回三个DataNode节点分别为DataNode1、DataNode2、DataNode3。
(5)Client通过FSDataDataOutputStream模块请求DataNode1上传数据,DataNode1收到请求会调用DataNode2,DataNode2调用DataNode3,将这个通信管道建立完成。
(6)DataNode1、DataNode2、DataNode3逐级应答客户端
(7)客户端开始往DataNode1上传第一个Block(先从磁盘读数据放到一个本地内存缓存)以packet为单位,DataNode1收到packet会传给DataNode2,DataNode2会传给DataNode3
(8)当第一个Block传输完成后,Client再次请求NameNode上传第二个Block(重复步骤3-7)

HDFS读数据流程

大数据入门基础Hadoop生态圈介绍——HDFS
(1)Client通过Distributed FileSystem向NameNode发送请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址
(2)挑选一台DataNode(就近原则)服务器读取数据
(3)DataNode开始传输数据到客户端(从磁盘读取数据输入流,以Packet为单位来做校验)
(4)Client以Packet为单位接收,先在本地缓存然后写入目标文件

DataNode工作机制

大数据入门基础Hadoop生态圈介绍——HDFS

(1)一个Block在DataNode以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和时间戳。
(2)DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息。
(3)心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。