“ Hadoop 可以看成是 HDFS + MapReduce + Yarn组成,其中HDFS作为分布式文件系统被用到了很多其他系统,本文将简要介绍HDFS的概念和架构”
01—Hadoop 简介
Hadoop 狭义上可以看成是 HDFS + MapReduce + Yarn,即分布式存储 + 作业 + 调度,是处理海量数据的整体解决方案,HDFS为海量数据提供存储,MapReduce为海量数据提供计算框架,Yarn负责集群资源的管理和调度,其中,本文主要内容是HDFS。
02—HDFS 概念
之前已经介绍过《关系型数据库-MySQL》和《操作系统的文件系统》,实际上与分布式文件系统功能类似,他们都是负责存储文件的,不过,他们的使用场景是不一样的:关系型数据库主要为Web应用的结构化数据提供持久化和CURD操作等;文件系统是操作系统为用户读写文件等操作提供的软件,主要是面向单机系统的;而HDFS是分布式文件系统,主要建立在分布式系统上,用于存储海量数据,并提供读写操作等。
03—HDFS 架构
HDFS 全称 Hadoop Distributed Filesystem,HDFS可以建立在廉价的商用服务器集群上,节点故障是HDFS需要重点考虑的。因此概括来说,HDFS是具有高容错性、高可用性、高吞吐量访问,支持文件系统数据的流式处理,并适用于存储海量文件的分布式文件系统。
磁盘结构
block块,用于存储文件的基本单位,默认128M,适合存储比较大的文件,便于文件系统组织、管理。上传的文件,会被切分成一个个的block,分别存储在不同DN上。 默认每个block有三份,当一个block失效,则可以从副本中拿到数据。
Client
NN-namenode
DN-datanode
SNN-SeconddaryNameNode
心跳机制
心跳作用
机架感知
Hadoop在设计时考虑到数据的安全与高效,数据文件默认在HDFS上存放三份,存储策略为:
而Hadoop是根据机架感知来完成这种存储策略的,机架感知默认是不开启的,并且通过配置将正确的IP地址和机器映射到对应机架上,来完成HDFS按照正确的存储策略进行存储数据,以节省网络传输。
04—HDFS读写流程
写
读
HDFS集群在读写数据时,有可能会发送DN异常,HDFS会拥有一种容错机制,来保证流程继续进行下去:
写异常,也就是管道中有某个DN异常,会将所有写的数据重新加入到data queue,重新向NN申请新的Block位置,重新构建管道,进行重传。
读异常,可能是连接异常,由于NN返回的是DN列表,将会使用副本重新建立连接,读取数据;也可能是读取数据异常,仍然是读取副本数据。而发生读异常时,客户端会将问题反馈给NN,以便NN做协调和恢复。
05—HDFS的高可用与联邦
HA
HDFS的HA(High Availability)架构,设置两个NN(一主一备),一个状态是Active(活跃),另一个状态是Standby(待命),当Active节点发生故障时,Standby节点会立即切换成Active状态。为了解决Active与Standby的元数据保持一致,通常设置一个共享存储系统,用来实现状态一致,即Standby会实时同步Active发生变化时,写到QJM的更新数据。为了解决Standby可以快速切换成Active,HA架构要求所有DN需要同时配置Active和Standby两个NN地址,所以每次都会同时和两个NN进行心跳和数据上报。
联邦
虽然HDFS-HA保证了NN的故障恢复,避免了NN的单点问题,但集群中单个活动的NN也会成为集群瓶颈,所以需要对NN进行横向扩展以支撑更大的集群容量。联邦机制允许添加NN节点,每个NN单独负责一部分命名空间,每个NN仍然保持了HA结构(一主一从),每组NN之间相互独立,DN集群作为所有NN的公共存储,所以需要DN向所有的NN进行心跳和数据上报。
快照
文件压缩
文件压缩有两个好处:减少存储文件所需要的存储空间;加速数据在网络和磁盘中的传输速度。
小文件处理
HDFS不适合存储小文件,不过HDFS针对小文件提供了相应的解决方案,其中比较重要的是Sequence Files方案。
1、https://hadoop.apache.org/docs/r2.7.7/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html
2、https://hadoop.apache.org/docs/r2.7.7/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html
3、https://blog.csdn.net/qq_38262266/article/details/79171524
4、《Hadoop权威指南》