【Hadoop】HDFS的体系架构

  • 整体上说
  • HDFS框架结构一
  • HDFS框架结构二(HDFS High Availability)

整体上说

HDFS 采用 Master/Slave 架构。一个 HDFS 集群是由一个 NameNode 和一定数目的 DataNodes组成。其中 NameNode 是一个中心服务器,负责文件系统的名字空间(namespace) 管理以及客户端对文件的访问。集群中的 DataNode 一般是一个节点一个,负责管理它所在节点上的存储。

  • 从内部看,一个文件其实被分成一个或多个数据块,这些块存储在多个 DataNode 之上。
  • NameNode 执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录,同时它也负责确定数据块到具体 DataNode节点的映射。
  • DataNode 负责处理文件系统客户端的读写请求,在 NameNode 的统一调度下进行数据块的创建、删除和复制。

HDFS使用Java语言开发,因此任何支持Java的机器都可以部署NameNode或DataNode。由于采用了可移植性极强的 Java 语言,这就使得 HDFS 可以部署到几乎所有类型的机器上。


HDFS框架结构一

在这里插入图片描述

整个结构是一个主从结构。即在集群中一个主机器对应多个从属机器

  • NameNode是 HDFS 的元数据节点,负责管理文件系统的名字空间以及和客户端进行交互。

    • 数据块和副本存放在哪些 DataNode 上是由NameNode 决定的,读取文件时 NameNode 会尽量让用户先读取最近的副本,以降低带宽消耗和读取时延
    • NameNode 全权管理数据块的复制,它周期性地从集群中的每个 DataNode 接收心跳信号和块状态报告。接收到心跳信号意味着该 DataNode 节点工作正常。块状态报告包含了一个该 DataNode上所有数据块信息的列表。
    • 作为master的NameNode负责管理分布式文件系统的命名空间(NameSpace),即维护的是文件系统树及树内的文件和目录。这些信息以 两个核心文件(fsImage和editlog)的形式持久化本地磁盘中。不同的是,namenode也记录了每个文件的各个块所在的datanode的位置信息,但并不持久化存储这些信息,而是在系统每次启动时扫描所datanode重构得到这些信息,也就是说保存在运行内存中。
    • Checkpoint:当NameNode 启动时,它从硬盘中读取 Edit log 和 FsImage, 并将所有 Edit log 中的事务应用在内存中的 FsImage 上,并将这个新版本的 FsImage 从内存中保存到本地磁盘上,然后删除旧的 Editlog, 因为这个旧 Edit log 中的事务都已应用在 FsImage 上。以上这个过程称为一个检查 点(checkpoint)。
    • HDFS中的更新操作都被写到EditLog,而不是直接写入FsImage,这是因为对于分布式文件系统而言,FsImage文件通常都很庞大,如果所有的更新操作都直接往FsImage文件中添加,那么系统就会变得非常缓慢。相对而言,EditLog通常都要远远小于FsImage,更新操作写入到EditLog是非常高效的。名称节点在启动的过程中处于“安全模式”,只能对外提供读操作,无法提供写操作。在启动结束后,系统就会退出安全模式,进入正常运行状态,对外提供写操作
  • Secondary NameNode:是NameNode的助手,辅助NameNode合并fsimage和EditsLog。

    • 在Namenode运行期间,HDFS会不断发生更新操作,这些更新操作不会直接写到fsimage文件中,而是直接被写入到editlog文件的,文件会越来越大。当Namenode重启时,会加载fsimage加载到内存中,并且逐条执行editlog中的记录,editlog文件大,就会导致整个过程变得非常缓慢,使得Namenode在启动过程中长期处于“安全模式”,无法正常对外提供写操作,影响了用户的使用。

      HDFS采用了SecondaryNameNode这个守护线程,可以定期完成editlog与fsImage的合并操作,减小editlog文件大小,缩短Namenode重启时间;也可以作为Namenode的一个“检查点”,将保存Namenode内存中的元数据信息,保存在fsimage镜像文件中。

    • 但是当NameNode 宕掉后,Secondary NameNode并不会成为新的NameNode。所以在这个架构中,NameNode 是单点故障

    • Secondary NameNode 的处理流程如下:

      • NameNode 响应 Secondary NameNode 的请求,将 edits log 推送给 Secondary NameNode, 并开始重新写一个新的 edits log
      • Secondary NameNode 收到来自 NameNode 的 fsimage 文件和 edits log
      • Secondary NameNode 将 fsimage 加载到内存,应用 edits log, 并生成一个新的fsimage 文件
      • Secondary NameNode 将新的 fsimage 推送给 NameNode
      • NameNode 用新的 fsimage 取代旧的 fsimage, 同 时 在 fstime 文件中记下checkpoint 发生的时间点
  • DataNode 是 HDFS 文件系统的工作节点,DataNode 会按照客户端或者是 NameNode 的调度来存储和检索数据,并定期向 NameNode 发送它所存储的数据块列表。

    • DataNode 是文件系统中真正存储数据的地方,一个数据块在 DataNode 磁盘存储时,会存储数据块本身,以及元数据包括数据块的长度、块数据的校验和、以及时间戳。
  • Heartbeats心跳用来监控集群中的各个机器。

    • 当DataNode启动后,它会向NameNode注册自己。这个注册的过程是告知NameNode有一个新的DataNode可用,并准备好存储数据块。
    • 注册成功后,DataNode会定期发送心跳给NameNode,通知NameNode它仍然是活跃的。NameNode在收到DataNode的心跳后,可以返回一些指令给DataNode。例如,NameNode可能会指示DataNode复制某个数据块到另一台机器,或者删除某个数据块。
    • 如果NameNode在超过10分钟的时间内没有收到某个DataNode的心跳,它会认为该DataNode不可用。这个时间阈值可以根据具体的配置来调整,但10分钟是一个常见的默认值.

HDFS框架结构二(HDFS High Availability)

Hadoop2.0引入了主备Standby NameNode。在 Hadoop2.0 之前,每个集群只能有一个 NameNode,它是单点故障,如果它出现问题就会导致整个集群瘫痪。因此 NameNode 需要有一定的冗余,通常的做法是把 NameNode 配置成 Active/Standby, 在 Active 失效的时候能立即无缝切换至 Standby 机上。

在这里插入图片描述

现阶段 Active/Standby 直接的同步有两种方式:

  • JournalNodes(JNs)伺服方式:ActiveNode 持续地将 EditsLog 写入到 JournalNode 伺服进程,而 StandbyNode 则能够实时监视并从中读取相关内容进行同步。JournalNodes 只允许一个 NameNode 进行写入操作,如果 Active 失效,Standby 将自动获得写入权。

  • Shared NFS Directory 方式:通过挂接一个主从 NameNode 节点都拥有读写权限的共享文件夹的方式进行同步。Active 一方不断将 EditsLog 写入该文件夹,而 Standby 则监视该文件的同时同步到自己的 Namesapce 中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/255880.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Docker】Docker安装部署maven私服

文章目录 镜像拉取构建nexus实例登录maven私服如何查看实例初始化的admin密码呢?1.查看容器挂载卷2.找到nexus_nexus_data查看挂载卷详情3.查看admin账号密码4.登录并重置密码 使用nexus私服1.设置settings.xml2.设置idea pom 出现的问题小插曲 镜像拉取 docker pu…

DVWA靶场的设置

1).在win 10系统安phpstudy2016,如图所示 2)创建DVWA的靶场,解压DVWA-master.zip到C:\phpStudy\WWW\DWA-master 3)配置DVWA链接数据库 右键选择记事本打开configlconfig.inc.php.dist【也可以使⽤其他编辑⼯具打开】,…

react基于antd二次封装spin组件

目录 react基于antd二次封装spin组件组件使用组件效果 react基于antd二次封装spin组件 组件 import { Spin } from antd; import propTypes from "prop-types"; import React from react; import styleId from "styled-components"; // 使用 父div必须加…

【vtkWidgetRepresentation】第十四期 二维标注

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享vtk中的二维标注,主要用于医学领域,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 目录 前言 1. vtkBiDimension…

LVS-DR部署

目录 LVS的工作模式及其工作过程 NAT模式(VS-NAT) 直接路由模式(VS-DR) IP隧道模式(VS-TUN) DR模式 LVS负载均衡群集的分析及特点 数据包流向分析 DR 模式的特点 LVS-DR部署实例 LVS-DR模式部署流…

主从reactor多线程实现

现场模型图片,从网上找的 出于学习的目的实现的,如有不对的地方欢迎留言知道,简单实现了http的请求,可通过postman进行访问 启动项目: 返回数据示例 postman请求 附上源码,有问题直接看源码吧

TensorFlow 2 和 Keras 之间的区别总结

1、什么是TensorFlow 2 TensorFlow 2是谷歌开源的一款深度学习框架,于2019年发布,并且在同年10月1日发布了TensorFlow 2.0.0正式稳定版。这款框架被很多企业与创业公司广泛用于自动化工作任务和开发新系统。 TensorFlow 2在分布式训练支持、可扩展的生…

Linux-----21、挂载

# 挂载命令 将硬件资源,或文件资源💿,和📂空目录🔗连接起来的过程 # mount linux 所有存储设备都必须挂载使用,包括硬盘 ​ 命令名称:mount ​ 命令所在路径:/bin/mount ​ 执行…

PIC单片机项目(4)——基于PIC16F877A的温度光照检测装置

1.功能设计 基于PIC16F877A单片机,使用DS18B20进行温度测量,使用光敏电阻进行光照测量,将测量值实时显示在LCD1602屏幕上,同时可以设定光照阈值和温度阈值。当温度大于阈值,则蜂鸣器报警,当光照小于阈值&am…

【分布式算法】Gossip协议详解

一、为什么需要 Gossip 协议? 为了实现 BASE 理论中的“最终一致性原则”。两阶段提交协议和 Raft 算法需要满足“大多数服务节点正常运行”原则,如果希望系统在少数服务节点正常运行的情况下,仍能对外提供稳定服务,这时就需要实…

RabbitMQ入门指南(二):架构和管理控制台的使用

专栏导航 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、RabbitMQ架构 二、RabbitMQ管理控制台的使用 1.Exchange交换机 2.Queue队列 3.绑定Exchange交换机和Queue队列 4.发送消息 5.数据隔离 总结 前言 RabbitMQ是一个高效、可靠的开源消息队列系统…

HTML_CSS的基本选择器的使用及其作用范围和优先级

目录 ✨CSS的使用:行内样式内部样式外部样式 ✨CSS基本选择器:id选择器class选择器标签选择器 ✨优先级:选择器的优先级样式表的优先级 ✨CSS的使用: 根据定义CSS的位置不同,分为行内样式、内部样式和外部样式 行内样…

鸿蒙OS:打破界限的操作系统新星

导言 鸿蒙OS(HarmonyOS)是华为公司为应对技术封锁而推出的分布式操作系统,其背后蕴含着华为构建全球数字生活愿景的雄心。本文将深入剖析鸿蒙OS的起源、核心特性,并展望其未来在数字生态中的角色。 1. 背景与起源 华为的…

[自动化运维工具]ansible简单介绍和常用模块

ansible 源操作主机功能 自动化运维(playbook剧本yaml) 是基于python开发的一个配置管理和应用部署工具,在自动化运维中,现在还是异军突起 ansible能批量配置,部署,管理上千台主机,类似于xshell…

其他配置相关安装

consul安装和配置 docker run -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600/udp consul consul agent -dev -client0.0.0.0访问:http://192.168.0.102:8500/ DNS查询 dig 192.168.0.102 -p 8600 consul.service.consul SRVnacos安装 ht…

音视频技术开发周刊 | 324

每周一期,纵览音视频技术领域的干货。 新闻投稿:contributelivevideostack.com。 467亿参数MoE追平GPT-3.5!爆火开源Mixtral模型细节首公开,中杯逼近GPT-4 今天,Mistral AI公布了Mixtral 8x7B的技术细节,不…

力扣题:数字与字符串间转换-12.25

力扣题-12.25 [力扣刷题攻略] Re:从零开始的力扣刷题生活 力扣题1:481. 神奇字符串 解题思想:首先将字符串构建出来,然后进行遍历即可 class Solution(object):def magicalString(self, n):""":type n: int:rty…

【SpringCloudAlibaba】Sentinel熔断限流工具的使用

一、前言 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维…

【docker】修改docker的数据目录

背景 主节点是分配了较少内存和存储的低配机器,因为我们系统的rancher是用docker镜像启动的,而rancher和docker的默认目录都放在/var/lib下面,而这个/var目录目前只分配10G的存储,导致节点存储报警。因此想修改docker的数据目录&…

Ubuntu 18.04配置NFS服务器以及配置时遇到NFS问题

1.安装相关软件 sudo apt-get install nfs-kernel-server sudo apt-get install nfs-common 2.配置共享目录 2.1修改exports文件 sudo vi /etc/exports在最后添加如下并保存退出 /home/xiaowu/nfs 192.168.31*(rw,sync,no_root_squash,no_subtree_check) /home/xiaowu/nfs…
最新文章