服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Hadoop源码分析五hdfs架构原理剖析

Hadoop源码分析五hdfs架构原理剖析

2021-12-16 10:50huserblog Java教程

本篇是Hadoop源码分析系列文章第五篇,主要介绍Hadoop的hdfs架构原理剖析,后续本系列文章会持续更新,有需要的朋友可以借鉴参考下

1、 hdfs架构

在本系列文章三中出现了与hdfs相关的数个服务。

如果在hadoop配置时写的配置文件不同,启动的服务也有所区别

按照本系列文章二中的配置,会启动以下服务:namenodejournalnodedatanodezkfc。其关系如图:

Hadoop源码分析五hdfs架构原理剖析

从图中可以看出namenode是绝对的中心节点,所有的节点都会和它进行交互。图中namenode有两台,一台为active,另一台为standby。其中active是正常提供namenode服务,standby不对外提供服务,它负责及时同步active的数据,并在active故障的时候转换为active继续提供服务。

namenode的下方是三台datanode。

datanode负责存储集群中的数据,并向namenode汇报其存储数据的情况。

namenode左右两边的是两个zkfc。

它负责的是namenode的故障转移,在active的namenode故障的时候,由zkfc将standby的namenode转换为active。zkfc上方连接的是zookeeper,它对namenode的故障转移是依靠zookeeper来实现的。

namenode的上方是三台journalnode集群。

journalnode负责存储namenode的日志文件,由active的namenode向journalnode写入,standby的namenode不会向journalnode写日志,standby主要会从其中读取日志文件。

注意,这里的日志文件不是普通的运行日志,而是namenode的操作日志。例如,客户端向hdfs上传了一个文件,这时namenode会执行一系列操作来完成这次上传,而这些操作连同操作方式与操作内容一起写到操作日志中(journalnode中),通过这些操作日志可以还原这次上传操作。

 

2、 namenode介绍

namenode作为hdfs的核心,它主要的作用是管理文件的元数据

元数据主要包括三类:文件的命名空间、文件与块的对应关系、块的存储位置。

文件与块的对应关系中的块

是由于hdfs在存储文件的时候并不是将整个文件将存储在某一台datanode上,而是将文件按照指定的大小切割成一定数量的块。

namenode负责管理hdfs的元数据

这意味着所有与hdfs相关的操作都需要与namenode进行交互。这样namenode的速度就不能太慢,所以namenode将元数据存储在内存中。但是数据不能只存储在内存中,所以这时需要将数据持久化到硬盘中。

namenode的数据持久化,采用了一种日志加快照的方式

日志即上文提到的操作日志,快照即将内存中的数据状态直接序列化到硬盘。在安装集群的时候会先格式化namenode,这时便会创建一个快照文件,名为fsimage。然后在namenode运行的时候它会将操作日志写入到fsimage文件所在的文件夹中。这里根据配置的不同写入的路径有所不同。如果使用本系列文章二中的配置,这个日志文件还会被写到journalnode中。

最后还会有一个程序读取这个快照文件和日志文件

将数据恢复到最新的状态,然后再更新原来的快照文件。下一次再读取快照和日志文件的时候就只读最新的文件。这里的程序会根据配置的不同有所区别,按照本系列文章二中的配置来说,是standby的namenode。这里为什么不直接使用active的namenode执行更新fsimage文件,而是使用standby的namenode先读取active的日志,然后再重演一遍操作日志恢复数据再由standby的namenode更新fsimage文件。这是因为更新fsimage操作很费时间,由active的namenode执行会导致整个集群不可用。

以上就是Hadoop源码分析五hdfs架构原理剖析的详细内容,本系列下一篇文章传送门Hadoop源码分析六启动文件namenode原理详解更多关于Hadoop源码分析的资料请持续关注服务器之家更新!

原文链接:https://blog.csdn.net/qq_39210987/article/details/113922279

延伸 · 阅读

精彩推荐
  • Java教程Java实现抢红包功能

    Java实现抢红包功能

    这篇文章主要为大家详细介绍了Java实现抢红包功能,采用多线程模拟多人同时抢红包,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙...

    littleschemer13532021-05-16
  • Java教程20个非常实用的Java程序代码片段

    20个非常实用的Java程序代码片段

    这篇文章主要为大家分享了20个非常实用的Java程序片段,对java开发项目有所帮助,感兴趣的小伙伴们可以参考一下 ...

    lijiao5352020-04-06
  • Java教程小米推送Java代码

    小米推送Java代码

    今天小编就为大家分享一篇关于小米推送Java代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    富贵稳中求8032021-07-12
  • Java教程Java8中Stream使用的一个注意事项

    Java8中Stream使用的一个注意事项

    最近在工作中发现了对于集合操作转换的神器,java8新特性 stream,但在使用中遇到了一个非常重要的注意点,所以这篇文章主要给大家介绍了关于Java8中S...

    阿杜7482021-02-04
  • Java教程升级IDEA后Lombok不能使用的解决方法

    升级IDEA后Lombok不能使用的解决方法

    最近看到提示IDEA提示升级,寻思已经有好久没有升过级了。升级完毕重启之后,突然发现好多错误,本文就来介绍一下如何解决,感兴趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程xml与Java对象的转换详解

    xml与Java对象的转换详解

    这篇文章主要介绍了xml与Java对象的转换详解的相关资料,需要的朋友可以参考下...

    Java教程网2942020-09-17
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    这篇文章主要介绍了Java使用SAX解析xml的示例,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java BufferWriter写文件写不进去或缺失数据的解决

    Java BufferWriter写文件写不进去或缺失数据的解决

    这篇文章主要介绍了Java BufferWriter写文件写不进去或缺失数据的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望...

    spcoder14552021-10-18