暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Hadoop|一次性搞懂分布式文件系统-HDFS

泰迪教育 2020-08-26
1217





泰迪学院-Hadoop连载

公众号ID:taidixueyuan


这是一个全新的栏目,专门为Hadoop小白开放。今日内容预告:Hadoop核心之一,分布式文件系统-HDFS


1.HDFS架构及简介


HDFS是以分布式进行存储的文件系统,主要负责集群数据的存储与读取。HDFS是一个主/从(Master/Slave)体系结构的分布式文件系统,从某个角度看,它就和传统的文件系统一样。HDFS支持传统的层次型文件组织结构,用户或者应用程序可以创建目录,然后将文件保存在这些目录里。文件系统名字空间的层次结构和大多数现有的文件系统类似,可以通过文件路径对文件执行创建、读取、更新和删除操作。但是由于分布式存储的性质,它又和传统的文件系统有明显的区别。它的基本架构如图1所示。


HDFS文件系统主要包括一个NameNode、一个Secondary NameNode和多个DataNode。


(1)元数据


元数据不是具体的文件内容,它有三类重要信息:第一类是文件和目录自身的属性信息,例如文件名、目录名、父目录信息、文件大小、创建时间、修改时间等;第二类记录文件内容存储相关信息,例如文件分块情况、副本个数、每个副本所在的DataNode信息等;第三类用来记录HDFS中所有DataNode的信息,用于DataNode管理。


图1  HDFS架构图


(2)NameNode


用于存储元数据以及处理客户端发出的请求。在NameNode中存放元信息的文件是 fsimage文件。在系统运行期间所有对元信息的操作都保存在内存中,并被持久化到另一个文件edits中。当NameNode启动的时候,fsimage会被加载到内存,然后对内存里的数据执行edits所记录的操作,以确保内存所保留的数据处于最新的状态。


(3)Secondary NameNode


用于备份NameNode的数据,周期性将edits文件合并到fsimage文件并在本地备份,将新的fsimage文件存储到NameNode,取代原来的fsimage,删除edits文件,创建一个新的edits继续存储文件修改状态。


(4)DataNode


DataNode是真正存储数据的地方。在DataNode中,文件以数据块的形式进行存储。当文件传到HDFS端时以128MB一个数据块将文件进行切割,将每个数据块存到不同的或相同的DataNode并且备份副本,一般默认3个,NameNode会负责记录文件的分块信息,确保在读取该文件时可以找到并整合所有块。


(5)数据块


文件在上传到HDFS时根据系统默认文件块大小把文件分成一个个数据块,Hadoop 2.x默认128MB为一个数据块,比如在存储大小为129MB的文件时,该文件则被分为两个块来存储。数据块会被存储到各个节点,每个数据块都会备份副本。


2.HDFS分布式原理


什么是分布式系统?分布式系统会划分成多个子系统或模块,各自运行在不同的机器上,子系统或模块之间通过网络通信进行协作,实现最终的整体功能。利用多个节点共同协作完成一项或多项具体业务功能的系统就是分布式系统。


分布式文件系统是分布式系统的一个子集,它们解决的问题就是数据存储。换句话说,它们是横跨在多台计算机上的存储系统。存储在分布式文件系统上的数据自动分布在不同的节点上。


HDFS作为一个分布式文件系统,主要体现在以下三个方面。


(1)HDFS并不是一个单机文件系统,它是分布在多个集群节点上的文件系统。节点之间通过网络通信进行协作,提供多个节点的文件信息,让每个用户都可以看到文件系统的文件,让多机器上的多用户分享文件和存储空间。


(2)文件存储时被分布在多个节点上。这里涉及一个数据块的概念,数据存储不是按一个文件存储,而是把一个文件分成一个或多个数据块存储,数据块的概念在上一节已经描述过。数据块在存储时并不是都存在一个节点上,而是被分布存储在各个节点中,并且数据块会在其他节点存储副本。


(3)数据从多个节点读取。读取一个文件时,从多个节点中找到该文件的数据块,分布读取所有数据块直到最后一个数据块读取完毕。


3.HDFS宕机处理


数据存储在文件系统中,如果某个节点宕机了,很容易造成数据流失,HDFS针对这个问题提供了有效的保护措施。


(1)冗余备份


在数据存储的过程中,每个数据块都进行了副本备份,副本个数可以自行设置。


(2)副本存放


仅仅对数据进行冗余备份还不够,假设所有的备份都在一个节点上,那么该节点宕机后,数据一样会丢失,因此HDFS要有一个更有效的副本存放策略。目前使用的策略是,以dfs.replication=3为例,在同一机架的两个节点上各备份一个副本,然后在另一个机架的某个节点上再放一个副本。前者防止该机架的某个节点宕机,后者防止某个机架宕机。


(3)宕机处理


① 当一切运行正常时,DataNode会周期性发送心跳信息给NameNode(默认是每3秒钟一次)。如果NameNode在预定的时间内没有收到心跳信息(默认是10分钟),它会认为DataNode出问题了,把它从集群中移除。对于HDFS来说,丢失一个DataNode意味着丢失了存储在它的硬盘上的数据块的副本。HDFS会检测到存储在该硬盘的数据块的副本数量低于要求,且主动对副本数量不符合要求的数据块创建需要的副本,以达到满副本数状态。DataNode可能因为多种原因脱离集群,如硬件故障、主板故障、电源老化和网络故障等。


② 当HDFS读取某个数据块时,如果正好该节点宕机了,客户端就会到存储该数据块的其他节点上读取,除非其他节点损坏或者该文件块在存储时损坏,否则文件依然可以得到该数据块的信息。HDFS也会检测到该数据块副本个数不符合要求而重新补全副本。


③ 当HDFS存储数据时,如果要存放数据的节点宕机,HDFS会再分配一个节点给数据块存储,然后备份宕机节点的数据。


4.HDFS特点


(1)优点


① 高容错性

HDFS上传的数据自动保存多个副本,通过增加副本的数量来增加它的容错性。如果某一个副本丢失,HDFS机制会复制其他机器上的副本,而我们不必关注它的实现。


② 适合大数据的处理

HDFS能够处理GB、TB甚至PB级别的数据,规模达百万,数量非常大。


③ 流式数据访问

HDFS以流式数据访问模式来存储超大文件,“一次写入,多次读取”。文件一旦写入,不能修改,只能增加。这样可以保证数据的一致性。


(2)缺点


① 不适合低延迟数据访问

如果要处理一些用户要求时间比较短的低延迟应用请求,则HDFS不适合。HDFS是为了处理大型数据集分析任务而设计的,目的是为达到高的数据吞吐量,这就可能要求以高延迟作为代价。


② 无法高效存储大量小文件

因为NameNode把文件系统的元数据放置在内存中,所以文件系统所能容纳的文件数目是由NameNode的内存大小来决定的,即每存入一个文件都会在NameNode中写入文件信息,如果写入太多小文件,NameNode内存会被占满而无法写入文件信息。而与多个小文件大小相同的单一文件只会写入一次文件信息到内存中,所以更适合大文件存储。


③ 不支持多用户写入及任意修改文件

在HDFS的一个文件中只有一个写入者,而且写操作只能在文件末尾完成,即只能执行追加操作。目前HDFS还不支持多个用户对同一文件的写操作,以及在文件任意位置进行修改。



泰迪学院出品




文章转载自泰迪教育,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论