一、Hadoop组成
- 在Hadoop 1.x版本中,Hadoop由HDFS和MapReduce组成,前者负责分布式存储,后者负责分布式计算;
- 在Hadoop 2.x版本中,Hadoop引入了第三个组件YARN(Yet Another Resource Negotiator),其负责资源分配和调度;
二、高可用的HDFS组成
HDFS采用主从结构,Active NameNode和Standby NameNode,是一种高可用HA的设计,两个节点内存中的metadata是同步的(即一致),因此可以保证当前者出错时,后者能够马上顶上,即:
- Active NameNode提供naming服务;
- Standby NameNode定期对metadata进行checkpoint;
- 一旦前者fail,就直接over到后者;
基于高可用HA的HDFS包含组件:
- 多个DataNode;(1个DataNode是一个进程)
- 1个Active NameNode;(1个NameNode是一个进程)
- 1个Standby NameNode;
- JournalNode集群;
【接下来从功能和处理性能角度分析为何需要👆这些组件:】
2.1 DataNode:
- 存储数据;
- 数据会复制备份(默认3份),以应对当某个机器节点的数据丢失后没,从其他节点进行恢复;
2.2 Active NameNode:
- 接收客户端的请求,管理整个 HDFS 集群的metadata(即元数据),比如说文件目录树、权限的设置、副本数的设置,等等;
- metadata存放在内存中,以避免频繁的磁盘IO影响性能;
这就带来问题1:
- 将metadata存放在内存中,万一停电、NameNode所在机器宕机,而导致metadata丢失怎么办?
这个问题的答案就是:
- NameNode中的fsimage文件和edits log文件;
- fsimage文件:负责维护文件系统树、所有文件和文件夹的元数据metadata,就像是(全量);
- edits log文件:负责存储文件的add、delete以及update的操作记录,就像是(增量);
- 之所以使用两个文件,是因为fsimage文件通常很大;可以将edits log文件和fsimage文件合并为新的fsimage文件,并将旧的文件删除;
- 每次NameNode重启时都需要将fsimage文件和edits log文件解析到内存中;
这样的话,当NameNode所在机器宕机,重启NameNode时将edits log加载到内存中即可恢复metadata,这样问题1就解决了;
但这样依旧存在问题2:
- 因为每次NameNode重启时需要加载edits log,如果edits log变得越来越大时,加载edits log到内存中将会占据越来越多的内存,这将会对性能造成较大影响;
2.3 Standby NameNode 和 JournalNode集群:
>>>>>> 解决方案:
引入fsimage文件、JournalNodes集群、Standby NameNode,将Active NameNode中众多的edits log文件同步写入到Standby Namenode中的fsimage文件(该文件是merge了edits log之后的最新完整的metadata),然后将新的fsimage文件去替换Active NameNode中的旧的fsimage文件,从而实现fsimage文件(存储了最新完整的metadata)的更新,从而避免Active NameNode重启时加载众多edits log文件较大耗时。
其解决步骤如下:
- 首先,DataNode的要发生变化时,Active NameNode将metadata的修改记录写入到自身所在磁盘的edits log(有很多历史的log文件,名称不同)、和JournalNode集群的edits log中;
- Standby NameNode从JournalNode中拉取edits log并将其加载到 Standby NameNode的内存的文件目录树中,保证Standby NameNode内存中的metadata和Active Standby NameNode中的保持一致;
- Standby NameNode定时将其内存中的metadata写入到其磁盘的fsimage文件中,该文件是Standby NameNode的完整的metadata,该操作被称为checkpoint操作;
- 将Standby NameNode中的磁盘文件fsimage复制到Active NameNode中;
- 删除Active NameNode中旧的edits log;
这样,当Active NameNode重启时,只需要加载fsimage即可,而不需要加载众多的edits log,从而提升重启速度;
具体过程,如图所示:
![](https://img.haomeiwen.com/i13578911/b0618efd17e31c3d.png)
网友评论