第二讲 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 Name Node is not in the data path. The Name Node only provides the map of where data is and where data should go in the cluster (file system metadata)
因此NameNode只能反映数据块的映射。
(二)SecondaryNameNode
备用NameNode显然与NameNode有密切关系,它有重要