大数据高级开发笔记——第二节课 HDFS文件系统

大数据开发小白入门群:QQ:699479439


上一节我们简单介绍了hadoop主要由三大块组成:分布式文件系统(HDFS)、分布式计算框架(MapReduce)、分布式调度器(yarn)组成,从这节课开始,我们逐一的详细介绍这些技术。本节课,就详细了解一下分布式文件系统--HDFS。

一、课前知识:

文件系统: 文件系统(file system)是命名文件及放置文件的逻辑存储和恢复的系统,我的理解就是管理文件命名及存放的一种软件系统。

常见的格式有:windows下:FAT\FAT32\NTFS Linux下:Ext2 Ext3 Mac OS 下:HFS

分布式系统: 分布式文件系统(Distributed File System,DFS)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点(节点可简单的理解为一台计算机)相连;

常见的有: GFS、HDFS、Lustre 、Ceph 、GridFS 、mogileFS、TFS、FastDFS等。各自适用于不同的领域。它们都不是系统级的分布式文件系统,而是应用级的分布式文件存储服务。

文件系统是一个很庞大的概念,这里只是很简单的一个介绍。

二、HDFS文件系统

HDFS是大数据系统的基础,它提供了基本的存储功能, HDFS的思想很简单,就是namenode负责数据存储位置的记录,datanode负责数据的存储。使用者client会先访问namenode询问数据存在哪,然后去datanode存储;写流程也基本类似,会先在namenode上询问写到哪,然后把数据存储到对应的datanode上。所以namenode作为整个系统的灵魂,一旦它挂掉了,整个系统也就无法使用了。

1、 这里有几个概念:

namenode:主节点,主要负责HDFS集群的管理以及元数据信息管理

datanode:从节点,主要负责存储用户数据

secondaryNameNode:辅助namenode管理元数据信息,以及元数据信息的冷备份

注:怎么去理解元数据,最简单的一个比喻,我们在windows系统中,在一个文件上鼠标右键选择属性所显示的内容就是元数据,简单说就是描述文件名称、位置、大小等信息的数据。HDFS系统正是通过namenode来保存文件在哪里,有多大,权限等等属性的。

2、HDFS的存储空间


HDFS文件系统

通过上图,我们可以看出,HDFS的总存储容量,是集群中所有的磁盘相加的和,比如上图中,HDFS对上层应用系统提供了共60T的空间,上层应用不需要知道自己保存的文件具体在那一台服务器上。

三、HDFS存储的原理

在Hadoop中,一个文件被划分成大小固定的多个文件块,分布的存储在集群中的节点中。我们将这个划分的块称之为:block,block块的大小可以通过hdfs-site.xml当中的配置文件进行指定。在hadoop1当中,文件的block块默认是64M,hadoop2、3默认是128M。


HDFS多副本存储示意图

通过上图,我们可以看出几个概念:

1、blocak划分:一个300M的文件,按128M的划分,被分成了三块,分别是blk1、blk2、blk3,

2、副本:我们可以看出第一个block块,都有三个副本,分别存在同一集群的不同的机器上,(注意:副本数可以根据配置文件设置)

注: 如果有一个文件大小为1KB,也是要占用一个block块,但是实际占用磁盘空间还是1KB大小。所以,HDFS不适合存储小文件的场景,比如:我们应用系统中的一些附件上传,通常文件都不会太大(小于64M),所以,就不适用使用HDFS来存储。

提一个问题:为什么我们不能通过修改配置文件,来让HDFS适用于存储小文件。(提示:和namenode有关,namenode的数据量会非常大)。

四、HDFS架构

先盗一张图来看看,网上基本上都用这张图来说事:


HDFS架构示意

HDFS集群包括,NameNode和DataNode以及Secondary Namenode。

  • NameNode:负责管理整个文件系统的元数据,包括hdfs目录树、每个文件有哪些块、每个块存储在哪些datanode
  • DataNode: 负责管理用户的文件数据块,每一个数据块都可以在多个datanode上存储多个副本。
  • Secondary NameNode:用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照。最主要作用是辅助namenode管理元数据信息
举报
评论 0