HDFS介绍(一)

162 阅读4分钟

什么是分布式文件系统

分布式文件系统

HDFS简介

  • HDFS是Hadoop Distributed File System的缩写,是Hadoop的核心组件之一,用于解决海量数据的存储问题;

  • HDFS能够在普通硬件上运行,具有高度容错的特性;

  • HDFS是Hadoop生态圈中最基础的底层模块;

  • HDFS使用多台计算机存储文件,但是提供了统一的访问接口,可以像访问普通文件系统那样访问HDFS,可以不用关心底层的存储逻辑。

image.png

HDFS的设计理念

  • 硬件故障是常态,HDFS集群可能有成千上百台服务器组成,任何一台机器出现故障,如何保障数据不丢失?因此故障检测和数据恢复是HDFS架构的核心目标,即高容灾能力;
  • HDFS应用主要是以流式读取数据(Streaming Data Access)。主要面向批处理,而不是用户交互式,相较于访问反应时间,更加注重数据访问的高吞吐量
  • HDFS存储大文件更加高效,小文件的存储不适用于HDFS;
  • HDFS对文件的要求是write-one, read-many。文件一旦写入就不支持修改,对于数据一致性的假设让高吞吐成为了可能;
  • 移动数据的代价高于移动计算,一个计算请求,离它操作的数据越近,计算就会越高效;
  • HDFS具简单的跨平台可移植性

HDFS的应用场景

适用场景:大文件、数据流式访问、一次写入多次读写、低成本部署、廉价PC、高容错

不适合场景:小文件、数据交互式访问要求高、低延时、频繁修改

HDFS架构设计

1. 主从架构

  • HDFS集群是典型的主从架构集群(还有主备,不要混淆了) image.png
  • 由一个NameNode和一些DataNode组成
  • 面向文件包含:文件数据(自身数据data)和文件元数据(metadata)
  • NameNode(可以理解为账本)负责存储和管理文件元数据,并且维护了一个层次型的文件目录树
  • DataNode负责存储文件数据(block块),并且提供block的读写(每个想存取数据的人都是先去问NameNode,然后去不同的DataNode那里存数据,是一种变相的负载能力
  • DataNode与NameNode维持心跳,并且汇报自己的block信息
  • Client和Namenode交互文件元数据和datanode交互文件block数据 2. 分块存储
  • 文件线性按照字节切割为块(block,每N个字节划为一个块),具有offset和id,(只要是文件,就是一个字节数组);
  • 文件和文件的block大小可以不一样(但是同一个文件除了最后一个块其他块的大小都一样);
  • block的大小依据硬件的I/O特性来调整;
  • block被分散在集群的节点中,具有Location;
  • block具有副本(replication,副本是满足可靠性和性能的关键),没有主从概念,副本不能出现在一个节点;
  • 文件上传可以指定块的大小和副本数,上传后只能修改副本的数量;
  • 一次写入多次读取,不支持修改(修改造成偏移量的变化,多台计算会为了这个修改操作进行计算,造成资源浪费);
  • 支持追加数据(删除支持,是文件层面的,不是块层面的,不然偏移也会变)。 3. 副本机制
  • 如果一个块的副本有三个 所有的block都会有副本,副本数可以在文件创建的时候指定,也可以使用命令进行修改。
  • 第一个副本:放置在上传文件的DataNode,如果是集群外提交,则随机挑选一台磁盘不太满,CPU节点不太忙的节点。
  • 第二个副本:放置于在第一个副本不同的机架的节点上(必须要出机架)
  • 第三个副本:与第二个副本相同的机架的节点
  • 更多副本:随机节点

之前的hadoop老版本,第一个和第二个副本不出机架,第三个才出机架,这是有问题的,如果只有两个副本,那么两个副本还是在同一个机架

image.png 4. 元数据记录

元数据(MetaData),在HDFS中NameNode管理的元数据有两类:

  • 文件自身的属性信息 文件的名称、权限、修改时间、文件大小、复制因子、数据块大小。

image.png

  • 文件位置映射信息 记录文件块和DataNode之间的映射信息,即block位于哪个节点上。

5. 抽象统一的层次目录结构(NameSpace)

  • HDFS支持传统的层次性文件系统。用户可以创建目录,然后将文件保存在目录下
  • NameNode负责维护文件系统的NameSpace名称空间,任何对文件系统的名称空间或属性的修改都会被NameNode记录下来
  • HDFS会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件