小小千想和您聊一聊

当前位置: 首页> 技术分享> HDFS基本概念

HDFS基本概念

  1.1 HDFS的介绍

  源自于Google的GFS论文发表于2003年10月 HDFS是GFS克隆版 ,HDFS的全称是Hadoop Distributed File System易于扩展的分布式文件系统,运行在大量普通廉价机器上,提供容错机制,为大量用户提供性能不错的文件存取服务

  整个Hadoop的体系结构主要是通过HDFS来实现对分布式存储的底层支持,并通过MR来实现对分布式并行任务处理的程序支持。

  HDFS采用主从(Master/Slave)结构模型,一个HDFS集群是由一个NameNode和若干个DataNode组成的(在最新的Hadoop2.2版本已经实现多个NameNode的配置-这也是一些大公司通过修改hadoop源代码实现的功能,在最新的版本中就已经实现了)。NameNode作为主服务器,管理文件系统命名空间和客户端对文件的访问操作。DataNode管理存储的数据。HDFS支持文件形式的数据。

  从内部来看,文件被分成若干个数据块,这若干个数据块存放在一组DataNode上。NameNode执行文件系统的命名空间,如打开、关闭、重命名文件或目录等,也负责数据块到具体DataNode的映射。DataNode负责处理文件系统客户端的文件读写,并在NameNode的统一调度下进行数据库的创建、删除和复制工作。NameNode是所有HDFS元数据的管理者,用户数据永远不会经过NameNode。

  2 HDFS设计目标

  1. 自动快速检测应对硬件错误

  2. 流式访问数据

  3. 移动计算比移动数据本身更划算

  4. 简单一致性模型

  5. 异构平台可移植

  移动计算和移动数据

  在学习大数据的时候接触了移动数据和移动计算这两种联系紧密而又有很大不同的概念,

  其中移动计算也叫做本地计算。在以前的数据处理中时使用的

  移动数据,其实就是将需要处理的数据传输到存放不同处理数据方式逻辑的各个节点上。这样做的效率很低,特别

  是大数据中的数据量是很大的,至少都是GB以上,更大的是TB、PB甚至更大,而且磁盘I/O、网络I/O的效率是很

  低的,这样处理起来就需要很长的时间,远远不能满足我们的要求。而移动计算就出现了。

  移动计算,也叫做本地计算,是数据就存放在节点上不再变动,而是将处理逻辑程序传输到各个数据节点上。由于

  处理程序的大小肯定不会特别的大,这样就可以实现很快将程序传输到存放数据的各个节点上去,然后本地执行处

  理数据,效率高。现在的大数据处理技术都是采用这种方式。

  HDFS模型例子:

  班级中有这么多笔记本其实就可以组成一个集群是吧,然后隔壁班需要将文件存储到笔记本中,一个一个进来随便找

  一个笔记本存储,走了之后,过了一段时间,需要将文件取走,但是每一个人都不知道自己上传到那个服务器上了,那么每

  台都需要找,,这样一来操作的复杂度就高了,那么需要怎么改善这个问题?

  牺牲一下,我的笔记本不存数据了,专门记录存储的的过程(NameNode),第一个人进来先找我,说我要存储文件,然后我

  说去第一台电脑存吧,然后就去第一台电脑存储了,它在存储文件的时候,上传文件需要等几分钟,然后第二个人进来了,

  也要存文件,然后我说你去第二台电脑上存储,那么我与存储人之间的交互信息量大吗?不大,是吧我的主要作用就是告

  诉对方去哪存储, 第一台电脑在传第二台电脑也再传,是不是同时在传,那么这就相当于负载了,那么他们在上传的时候

  是独立的资源,而不会去抢占资源.

  问题:什么时候记录这个存储记录?

  是在一开始对话的时候我就记录,还是在当他传完数据后记录?

  一定是传完数据后记录,这是为了数据的一致性

  上传成功后,是上传人员告诉我上传成功还是电脑给发送信息上传成功

  一定是电脑发送信息上传成功,因为只有电脑去认了上传成功了有文件有记录就OK

  是不是很简单,很轻松啊,要是早几年听是不是HDFS就是你开发的了

  HDFS的特点

  优点:

  1. 高可靠性:Hadoop按位存储和处理数据的能力值得人们信赖;

  2. 高扩展性:Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。

  3. 高效性:Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。

  4. 高容错性:Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。

  缺点:

  1. 不适合低延迟数据访问。

  2. 无法高效存储大量小文件。

  3. 不支持多用户写入及任意修改文件。

  1.4 hdfs核心设计思想及作用

  • 分而治之:将大文件、大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析;

  • 为各类分布式运算框架(如:mapreduce,spark,tez,……)提供数据存储服务

  • hdfs更具体描述

  首先,它是一个文件系统,用于存储文件,通过统一的命名空间——目录树来定位文件

  其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色;

  1.5 重要特性如下:

  1. HDFS中的文件在物理上是分块存储(block),块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在hadoop2.x版本中是128M,老版本中是64M。

  2. HDFS文件系统会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data。

  3. 目录结构及文件分块信息(元数据)的管理由namenode节点承担——namenode是HDFS集群主节点,负责维护整个hdfs文件系统的目录树,以及每一个路径(文件)所对应的block块信息(block的id,及所在的datanode服务器)。

  4. 文件的各个block的存储管理由datanode节点承担--- datanode是HDFS集群从节点,每一个block都可以在多个datanode上存储多个副本(副本数量也可以通过参数设置dfs.replication)。

  HDFS架构组成


  NameNode(NN)

  基于内存存储 :不会和磁盘发生交换只存在内存中

  这样做的主要目的是为了快,但是内存存储的一个通病就是掉电易失

  一旦断电内存中存储的数据就什么都没有了,所以就需要持久化了(有点打脸了因为是需要到磁盘中的存储)

  NameNode持久化

  NameNode的metadate信息在启动后会加载到内存

  存储到磁盘中有两种方法:

  第一种:在某个时间点以类似于”拍快照”的形式将数据信息存储到磁盘中

  metadata存储到磁盘文件名为”fsimage”,Block的位置信息不会保存到fsimage

  若是回复,需要等待DataNode重新汇报信息Block每副本位置(由DataNode上报)

  第二种:以日志的方式生成文件edit log记录对metadata的操作日志

  NameNode主要功能:

  接受客户端的读写服务,收集DataNode汇报的Block列表信息

  NameNode保存metadata信息包括

  文件所属权和权限,文件大小,时间(Block列表:Block偏移量),位置信息

  DataNode(DN)

  DataNode是Block真正存储的地方。DataNode的本地磁盘以文件形式存储着Block信息。同时还存储着Block的元数据信息文件。

  元数据主要存储MD5值 用来进行验证

  HDFS在启动时,DataNode会向NameNode汇报block的信息。

  DataNode通过向NameNode发送心跳保持与其联系(3秒一次),如果NameNode 10分钟没有收到DataNode的心跳,则认为其已经lost,并复制其上的block到其它DataNode。

  SecondaryNameNode(SNN)

  初看名字,你可能会以为SecondaryNameNode是NameNode的备份,实际上,SecondaryNameNode的主要作用并不是这个,当然它也可以用来做备份。

  要了解SecondaryNameNode的作用,就不得不说一下HDFS的启动过程。

  上面我们已经提到了两个文件fsimage和edits。fsimage是当前HDFS系统的快照。edits记录了对HDFS的各种操作日志。

  假设:有一个集群跑了10年一点问题都没有,fsimage是十年前的一个点,为了不影响性能,只记录了一次,而edits一直在记录日子,吧唧,服务器宕机了,重启恢复,

  HDFS在启动的时候,根据fsimage和edit log日志可以得到系统当前最新的状态,并产生一个新的fsimage文件。这样的启动时很耗时间的。尤其是当edit log文件非常大的时候,合并会占用很多额外的时间。

上一篇:HTML5工具初识之网页编辑器

下一篇:大数据概念

QQ技术交流群

千锋大数据官方①群
857910996

加入群聊