第二讲 HDFS部署、原理与基本框架(理论部分)
实践部分的链接:https://blog.csdn.net/xlkdxes/article/details/107739796
预习笔记
一、HDFS设计思想与特色
HDFS是分布式文件系统,基本思想是将大型文件分块存储到多个服务器上处理。如下图所示:
这时考虑文件存储方式。若使用文件为基本存储单位,首先由于各个文件大小不同,因此难以实现负载平衡。其次是只能利用一个节点资源处理文件,且无法发挥集群处理数据的优势,难以并行化处理。
于是考虑数据块(blocks)存储方式。如下图所示:
实际是将TB级文件切分成若干64MB数据块进行存储。其中每一个block数据块大小64MB,有三个副本。
采用HDFS有如下优点:
- 易于拓展的分布式文件系统。
- 具有高容错性。
- 运行在大量普通廉价的机器上。
- 为大量用户提供性能不错的文件存储服务。
- 适合用于批处理。
- 适合处理大数据量。
- 流式文件访问。
当然也有如下缺点:
- 低延迟的数据访问。
- 存储小文件无优势。
- 无法并发写入、文件随机修改。
二、HDFS架构
HDFS总体架构图
HDFS体系由四个核心的模块组成:NameNode,SecondaryNameNode,DataNode和Client。
(一)NameNode
作为整个HDFS的心脏,它的功能至关重要:
- 它在整个集群中扮演Master角色
- 它用来管理HDFS的namespace
在系统中一个文件对应一个确切的位置与文件名,因此HDFS用来管理文件命名空间,所有关于文件的名称管理都在NameNode中进行。 - 配置副本策略
一个数据块(block)一般有三个副本。
① 在Hadoop 0.17之前:
副本1:同机架不同节点
副本2:同机架另一不同节点
副本3:不同机架另一节点
② 在Hadoop 0.17之后:
副本1:同机架同节点
副本2:不同机架同节点
副本3:不同机架不同节点
假如说一个DataNode挂了,这时NameNode与这个副本配置策略就发挥至关重要的作用,首先它会通过心跳包探测哪个DataNode挂了,之后它访问自己的元数据迅速查找受影响的数据块。之后用这个策略就可以分配数据块到不同DataNode,之后再让DataNode复制完成整个过程,具体过程见下图:
- 处理Client读写请求
通过访问NameNode处理对应的读DataNode或者写DataNode请求,详细读写请求处理流程见HDFS工作原理。
此外,HDFS有以下核心文件:
- VERSION
该文件包含版本信息以及文件版本信息。 - seen_txid
事务管理用文件,里面包含正在进行的进程编号。 - fsimage_*
元数据镜像文件,里面保存文件系统的目录树。 - fsimage_*.md5
校验元数据镜像文件。 - edits_*
元数据操作日志,里面包含针对目录树的修改操作。
其中fsimage_*与edits_*是两个核心的文件,edits_*作用在fsimage上从而不断更新fsimage的内容。具体流程可见SecondaryNameNode功能。
NOTICE:The N