图文详解HDFS工作机制

本篇主要从下面几个方面进行展开

  • HDFS是什么
  • 漫画看懂HDFS骚操作
  • HDFS架构原理
一、HDFS是什么
HDFS(Hadoop Distributed File System)分布式文件系统,它是谷歌的GFS提出后出现的一种用户级文件系统 。提供了一个高度容错和高吞吐量的海量数据存储解决方案 。
图文详解HDFS工作机制

文章插图
hadoop生态-HDFS的核心位置
二、漫画看懂HDFS骚操作
图文详解HDFS工作机制

文章插图
2.1 写操作
图文详解HDFS工作机制

文章插图
1
图文详解HDFS工作机制

文章插图
2
图文详解HDFS工作机制

文章插图
3
2.2 读操作
图文详解HDFS工作机制

文章插图
2.3 容错性
常见错误种类
图文详解HDFS工作机制

文章插图
节点故障
图文详解HDFS工作机制

文章插图
通信故障和数据损坏
图文详解HDFS工作机制

文章插图
读写故障
图文详解HDFS工作机制

文章插图

图文详解HDFS工作机制

文章插图

图文详解HDFS工作机制

文章插图
以上是漫画解说部分,主要涵盖了读写流程已经故障处理 。下面会有具体的架构讲解 。
三、HDFS架构原理
图文详解HDFS工作机制

文章插图
3.1 HDFS几个主要概念
3.1.1 NameNode
  • 维护和管理DataNodes
  • 管理文件系统namespace并控制client对应的访问权限
  • 记录所有存储在集群中的文件的元信息 。eg: blocks存储的位置、文件的大小、权限、文件结构等,有两个文件和元数据关联着
  • FsImage
  • 保存了最新的元数据检查点,包含了整个HDFS文件系统的所有目录和文件的信息 。对于文件来说包括了数据块描述信息、修改时间、访问时间等;对于目录来说包括修改时间、访问权限控制信息(目录所属用户,所在组)等 。
  • 一般开始时namenode的操作都放在EditLog中,然后通过异步更新 。
  • EditLog
  • 记录最近通过namenode对文件系统的所有修改操作 。
  • 记录文件系统的所有操作元数据 。存储在 EditLogs
  • 维护着与DataNodes的心跳检测
  • DataNodes磁盘存储均衡、DataNodes故障转移
3.1.2 DataNode
数据存储节点
3.1.3 Secondary NameNode
图文详解HDFS工作机制

文章插图
它的主要职责
  • 备用节点,也称为standby namenode 。NameNode是HDFS的大脑核心,一旦NameNode出现不可用,那么整个HDFS集群将不可用,Secondary NameNode作为NameNode的备用节点,进行NameNode容错
  • 负责合并Editlogs和FsImage
  • 定时从 namenode 下载Editlogs并和现有FsImage进行合并,然后将合并后的FsImage更新到namenode
FailoverController
故障切换器,管理着将活动namenode转移为备用namenode的过程,默认通过ZK来确保仅有一个活跃namenode 。每一个namenode都有一个运行着的故障转移器 。
3.1.4 Balancer
用于平衡DataNode集群之间各节点的磁盘利用率 。
3.1.5 HttpFS
提供Http方式访问和操作HDFS功能
图文详解HDFS工作机制

文章插图
上面几个概念的拓扑图
3.2 Block数据块
HDFS里的数据都是以blocks分散在DataNodes 。
通常,文件系统我们存放数据都是以一个blocks集进行存储,HDFS也是如此 。
在 hadoop 集群中,每个 block 的默认大小为 128M(此处指 hadoop 2.x 版本,hadoop 1.x 版本为 64M),也可以通过配置进行修改
dfs.block.size或 dfs.blocksize =64M
HDFS 不会将每个文件存储在配置的 block 大小的确切倍数中,比如一个 514M 的文件 example.txt,下图所示,假设 block 大小为默认的 128M,那么将会创建 5 个block,前 4 个 block 大小为 128M,但是最后一个 block 的大小则仅为 2M 。
图文详解HDFS工作机制

文章插图
block大小的设置,如果太小会产生太多的blocks,这样元数据就会很多,从而使管理blocks和元数据产生巨大开销,增加NameNode和DataNode的负载 。


推荐阅读