分布式

图文详解HDFS工作机制

2019-01-09  本文已影响577人  青芒v5

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

一、HDFS是什么

HDFS(Hadoop Distributed File System)分布式文件系统,它是谷歌的GFS提出后出现的一种用户级文件系统。提供了一个高度容错和高吞吐量的海量数据存储解决方案。

hadoop生态-HDFS的核心位置

二、漫画看懂HDFS骚操作

2.1 写操作
1 2 3
2.2 读操作
2.3 容错性
常见错误种类 节点故障 通信故障和数据损坏 读写故障

以上是漫画解说部分,主要涵盖了读写流程已经故障处理。下面会有具体的架构讲解。

三、HDFS架构原理

3.1 HDFS几个主要概念
3.1.1 NameNode
3.1.2 DataNode

数据存储节点

3.1.3 Secondary NameNode

它的主要职责

FailoverController
故障切换器,管理着将活动namenode转移为备用namenode的过程,默认通过ZK来确保仅有一个活跃namenode。每一个namenode都有一个运行着的故障转移器。

3.1.4 Balancer

用于平衡DataNode集群之间各节点的磁盘利用率。

3.1.5 HttpFS

提供Http方式访问和操作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。


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

3.3 写原理

假如我们要一个文件名字“example.txt”,248M。



假设block.size设置的128M,因此client会把该文件切分成两个block,分布是 128M和120M。

每当向HDFS写数据的时候,都遵循下面的几个流程

For Block A, list A = {IP of DataNode 1, IP of DataNode 4, IP of DataNode 6}
For Block B, set B = {IP of DataNode 3, IP of DataNode 7, IP of DataNode 9}

3.3.1 建立管道

client在blocks写入之前会确保提供的DataNodes是否已经做好接受数据的准备。在这样的情况下,client会连接该block列表中的各个DataNodes,为每个block建一个管道。以BlockA举例,它的DN(DataNode)列表是 { DN 1 IP, DN 4 IP, DN 6 IP }



如上图,大概有一下几个步骤:

3.3.2 数据流与复制

当client与DataNodes之间的管道建立之后,client将开始将推送数据到管道。我们这里假设的复制因子是3,所以blockA将被复制三份,但是注意的是client只会将blockA推送到DN1,然后由DataNodes自己按照顺序进行复制。


如上图所示,整个复制过程步骤如下:

3.3.3 管道关闭和确认

当block复制3份完成后,client和NameNode会有一系列的ack确认来保证数据被成功写入。
如下图所示,DataNodes的确认和写入的顺序恰好相反,DN6写入成功后会给DN4发送确认消息,接着DN4会将DN6和自己的确认消息发送给DN1,最后DN1将所有的确认消息发送给client,client再给NameNode确认block写入成功,然后NameNode更新对应的元数据,最终client关闭管道。


以上的所有流程,我们都是针对blockA进行解说,而blockB是完全一样的,blockB有自己的管道、自己的DataNodes 并行的进行写入。


如上图所示,有两个管道分别为blokA和blockB提供,他们各自的流程顺序如下:

3.4 读原理
读的原理相对写更容易理解,我们同样以example.txt举例。

如上图所示,有以下几个步骤

最后

本篇先以漫画的方式阐述场景HDFS 读写流程,然后又以HDFS里的概念进行进一步的描述,相信大家已经对此有所了解。后续有相关的疑问欢迎评论区留言。


参考文章
https://www.bogotobogo.com/Hadoop/BigData_hadoop_Ecosystem.php
https://blog.csdn.net/m0_37803704/article/details/80709577
https://www.edureka.co/blog/apache-hadoop-hdfs-architecture/

上一篇 下一篇

猜你喜欢

热点阅读