HDFS核心元素及原理

x33g5p2x  于2021-03-14 发布在 HDFS  
字(2.1k)|赞(0)|评价(0)|浏览(724)

一、HDFS概述

当一台独立的物理计算机不足以存储数据集时,就需要对该数据集进行物理切分和分区操作,将其存储在若干台互为关联的计算机上。管理多台计算机的文件存储系统就是分布式文件系统。Hadoop有自己的分布式文件系统,名为:HDFS,它就是为了存储超大文件而设计的。

(1)分布式文件系统:Hadoop分布式文件系统定义了一个Java抽象类org.Apache.Hadoop.fs.FileSystem,里面包含了各种文件系统接口,并且该抽象类有很多具体的实现类,HDFS只是其中一个实现,还有一些文件系统例如:hfs、FTP等。

(2)数据块:HDFS在进行数据存储的时候,会将文件切分为数据块的方式进行存储。

  • 概念:
    • 数据块是磁盘进行数据读写的最小单位。
    • HDFS的数据块,我们称之为Block,它的大小要比常见的数据块、文件系统块大得多,在Hadoop1.x中,Block块的大小默认为64MB,在Hadoop2.x中,Block块的默认大小为128MB。
    • 如果HDFS上的一个文件小于Block的大小,她不会占据整个块的存储空间,而是占据它实际的文件大小空间。
  • 块存储的优点:
    • 可以存储超大文件,当文件大于任一磁盘容量的时候,文件被分隔成不同的块存储在集群中任何节点上。
    • 最小单位为块,方便存储系统管理
    • 方便对数据进行备份,每个块在集群中存储多个副本,HDFS默认是3个副本。

二、HDFS核心元素及其原理

HDFS通过两类节点来管理整个系统的数据,它们之间以(管理者--工作者)的形式运行。一类是:NameNode(管理者),一类是:DataNode(工作者)。

(1)HDFS读取数据的原理

:-:

  • 1.客户端读取数据时,先和NameNode建立联系,NameNode查看需要读取MetaData信息,MetaData数据存储在内存中。
  • 2.NameNode获得MetaData信息将其返回给客户端,然后客户端才能在DataNode中读取数据。

(2)MetaData:从单词来理解就是元数据,存储元数据,有别于文件数据本身,它是文件的一些属性信息、存储位置信息、副本数量及存储位置和节点的对应关系等。

  • HDFS存储数据包括两部分:一部分是元数据,一部分是数据块本身。
  • 元数据:(FileName,replicas,block-ids,id2host),始终保存在内存中
    • FileName:文件名
    • Replicas:副本数量
    • Block-ids:表示存储为几个Block,id分别为多少
    • id2host:Block存储节点

(3)NameNode:是整个文件系统的管理节点,它维护着整个文件和目录的元数据信息、文件系统的文件目录树以及每个文件对应的数据块列表,还能够接收用户的操作请求。

  • NameNode包含以下文件
    • fsimage:内存中的元数据序列化到磁盘上的文件名称,是元数据的镜像文件,它存储某一时间段NameNode内存元数据信息。
    • fstime:保存最近一次checkpoint的时间。
    • edits:操作日志文件。
    • fsimage、fstime、edits都是保存在Linux的文件系统中的,存储位置如下:hadoop包的/tmp/dfs/name/current

(3)DataNode:为真实的文件数据提供存储服务,在HDFS中最基本的存储单位是Block。默认Block大小为128MB,那么一个256MB的文件就有256/128=2个Block,而且每个Block默认都会保存3份。

:-:

  • 为了保证在节点发生故障时,数据不会丢失,DataNode在存储Block之后,会监控每个Block的数量是否和设置的副本数保持一致,如果有节点宕机了,Block的数量小于设置的副本数,DataNode和NameNode之间会根据心跳机制来判断DataNode节点是否宕机。如果宕机了,NameNode将会在另外一个节点上复制一个副本,以保证副本数量和设置的副数量一致。

(4)SecondaryNameNode:是HA(High Availably,高可用)的一个解决方案,它负责辅助NameNode完成相应的工作。

  • 工作时会下载数据信息fsimage和edits,然后把两者合并,生成新的fsimage并在本地进行保存,然后将其推送到NameNode,替换旧的fsimage。

:-:

  • 工作流程:
    • 1.secondary通知NameNode切换edits文件
    • 2.secondary从NameNode获得fsimage和edits(通过http)
    • 3.secondary将fsimage载入内存,然后合并edits,合并完成后清空edits
    • 4.secondary将新的fsimage发回给NameNode
    • 4.NameNode用新的fsimage替换旧的fsimage
  • checkpoint合并时机
    • 1.fs.checkpoint.period指定两次checkpoint的最大时间间隔,默认为3600s,也就是一小时合并一次
    • 2.fs.checkpoint.size规定edits文件的最大值,一旦超过这个值就强制checkpoint,不管是否达到最大间隔

相关文章

微信公众号

最新文章

更多