HDFS架构

  • HDFS 是一个主从 Master/Slave 架构
  • 一个 HDFS 集群包含一个 NameNode,这是一个 Master Server,用来管理文件系统的命名空间,以及协调客户端对文件的访问
  • 一个 HDFS 集群包含多个 DataNode,用来存储数据
  • HDFS 会对外暴露一个文件系统命名空间,并允许用户数据以文件的形式进行存储
  • 在内部,一个文件被分成多个块并且这些块被存储在一组 DataNode 上
    在这里插入图片描述

NameNode

  • 文件的元数据采用集中式存储方案存放在 NameNode 当中
  • NameNode 负责执行文件系统命名空间的操作,如打开、关闭、重命名文件和目录
  • NameNode 同时也负责将数据块映射到对应的 DataNode 中

DataNode

  • DataNode 是文件系统的工作结点
  • DataNode 根据需要存储并检索数据块,并且定期向 NameNode 发送他们所存储的块的列表
  • 文件数据块本身存储在不同的 DataNode 当中,DataNode 可以分布在不同机架上
  • DataNode 负责服务文件系统客户端发出的读/写请求
  • DataNode 同时也负责接收 NameNode 的指令来进行数据块的创建、删除和复制
    Client
  • HDFS 的 Client 会分别访问 NameNode 和 DataNode 以获取文件的元数据信息及真实数据内容
  • HDFS 集群的 Client 将直接访问 NameNode 和 DataNode,相关数据会直接从 NameNode 或者 DataNode 传送到客户端;
    NameNode 和 DataNode 都是被设计为在普通 PC 上运行的软件程序
  • HDFS 是用 Java 语言实现的,任何支持 Java 语言的机器都可以运行 NameNode 或者 DataNode
  • Java 语言本身的可移植性意味着 HDFS 可以被广泛地部署在不同的机器上
  • 一个典型的部署就是,集群中的一台专用机器运行 NameNode,集群中的其他机器每台运行一个 DataNode 实例
  • 该架构并不排除在同一台机器上运行多个 DataNode 实例的可能,但在实际的部署中很少会这么做;
    单一 NameNode 的设计极大地简化了集群的系统架构,它使得所有 HDFS 元数据的仲裁和存储都由单一 NameNode 来决定,避免了数据不一致性的问题

HDFS 数据复制

HDFS 可以跨机架、跨机器,可靠地存储海量文件。
HDFS 把每个文件存储为一系列的数据块,除了最后一个数据块以外,一个文件的所有数据块都是相同大小的。
HDFS 为了容错,一个文件的数据块会被复制。对于每个文件来说,文件块大小和复制因子都是可配置的。应用程序可以声明一个文件的副本数。复制因子可以在文件创建时声明,并且可以在以后修改。
通用场景下,当复制因子是 3 时,HDFS 的放置策略:

  • 副本1放在本地机架的某个结点上
  • 副本2放在本地机架的不同结点上
  • 副本3放在不同机架的不同结点上

上述策略的优点:

  1. 该策略并不影响数据可靠性和可用性,因为机架不可用的概率要比结点不可用的概率低很多.
  2. 该策略与把3个副本放在3个不同机架上的策略相比,减少了机架之间的写操作,从而提升了写性能.
  3. 该策略减少了读取数据时的聚合网络带宽,毕竟一个数据块是放置在2个不同的机架上,而不是 3 个.

上述策略的缺点:
该策略没有均匀地分布副本,三分之二的副本在一个机架上,另三分之一的副本分布在其他机架上.

NameNode和DataNode的关系

  • NameNode 控制所有的数据块的复制决策,如下图所示:
    在这里插入图片描述它周期性地从集群的 DataNode 中收集心跳和数据块报告:
    收集到心跳意味着 DataNode 正在正常提供服务
    收集到的数据块报告会包含相应 DataNode 上的所有数据块列表

  • DataNode主动发送心跳:
    当一切运行正常时,DataNode 会周期性发送心跳信息给 NameNode(默认是每 3 秒钟一次).

  • NameNode主动监测心跳:
    如果 NameNode 在约定的时间内没有收到心跳信息(默认是 10 分钟);
    会认为 DataNode 出现了问题,就会把该 DataNode 从集群中移除,并且启动一个进程去恢复数据.

  • DataNode节点挂掉的影响:
    DataNode 脱离集群的原因有多种:如硬件故障、主板故障、电源老化和网络故障等.

  1. 对于 HDFS 来说,丢失一个 DataNode 意味着丢失了存储在它的硬盘上的数据块的副本.
  2. 假如在任意时间总有超过一个副本存在,故障将不会导致数据丢失;
    当一个硬盘故障时,HDFS 会检测到存储在该硬盘上的数据块的副本数量低于要求,然后主动创建需要的副本,以达到满副本数状态.

机架感知

机架感知的概念:
告诉Hadoop,集群中哪台机器属于哪个机架
机架感知的目的:

  1. 作业计算本地化
  2. 正确执行副本放置策略
    机架感知的配置:
    默认情况下,Hadoop机架感知是没有启用的,需要在NameNode机器的core-site.xml里配置一个选项:
<property>  <name>topology.script.file.name</name><value>/path/to/script脚本</value>
</property>

这个配置选项的value指定为一个可执行程序,通常为一个脚本,该脚本接受一个参数,输出一个值。
接受参数—datanode机器的ip地址.
输出的值—该ip地址对应的datanode所在的rackID,例如"/rack1".
NameNode启动时,会判断该配置选项是否为空–如果非空,则表示已经启用机架感知的配置:
此时namenode会根据配置寻找该脚本,并在接收到每一个datanode的心跳时,
将该datanode的ip地址作为参数传给该脚本运行,并将得到的输出作为该datanode所属的机架,保存到内存的一个map中.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS实现一个高性能的跑马灯

效果图 该跑马灯完全通过CATextLayer 实现&#xff0c;轻量级&#xff0c;并且通过 系统的位移动画实现滚动效果&#xff0c;避免了使用displaylink造成的性能瓶颈&#xff0c;使用系统动画&#xff0c;系统自动做了很多性能优化&#xff0c;实现更好的性能&#xff0c;并使用…

java设计模式 -- 工厂模式

1、基本概念 工厂模式&#xff08;Factory Pattern&#xff09;是 Java 中最常用的设计模式之一&#xff0c;这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。 工厂模式提供了一种创建对象的方式&#xff0c;而无需指定要创建的具体类。 工厂…

python与上位机开发day04

模块和包、异常、PyQt5 一、模块和包 1.1 模块 Python中模块就是一个.py文件&#xff0c;模块中可以定义函数&#xff0c;变量&#xff0c;类。模块可以被其他模块引用 1.1.1 导入模块 """ 导入格式1&#xff1a; import 模块名 使用格式&#xff1a; …

【yolov8目标检测部署】TensorRT int8量化

原作者github&#xff1a;https://github.com/xuanandsix/Tensorrt-int8-quantization-pipline/tree/main 改进&#xff1a; 源代码支持的TensorRT版本为7.许多属性已经弃用&#xff1b; 在原有的代码上将支持的TensorRT版本从7改到8. &#xff01;&#xff01;不知道如何安装T…

【设计模式】简单工厂模式(Simple Factory Pattern)

工厂模式&#xff08;Factory Pattern&#xff09; 用于创建不同类型的奖品对象。您可以创建一个奖品工厂&#xff0c;根据配置的类型来实例化相应的奖品对象。 public interface Prize {void award(); }public class MoneyPrize implements Prize {Overridepublic void awar…

在 Windows 系统上安装 TeamViewer 13

在 Windows 系统上安装 TeamViewer 13 References 默认安装到所有用户 同意协议 安装目录 勾选内容 打开文件位置 打开 rClientID.exe Extras -> Options -> Advanced Show advanced options -> Display language 重新启动TeamViewer 语言可修改为中文简体 …

稳扎稳打 部署丝滑 开源即时通讯(IM)项目OpenIM源码部署流程(linux windows mac)

背景 OpenIM包含多个关键组件&#xff0c;每个都是系统功能必不可少的一部分。具体来说&#xff0c;MongoDB 用于持久化存储&#xff1b;Redis 用作缓存&#xff1b;Kafka 用于消息队列&#xff1b;Zookeeper 用于服务发现&#xff1b;Minio 用于对象存储。这些组件的众多可能会…

C++14之std::exchange的使用和原理分析

目录 1.概述 2.使用 2.1.交换操作 2.2.移动语义 3.原理 4.综合示例 5.总结 1.概述 std::exchange 是 C 标准库中的一个实用函数&#xff0c;它的主要作用是替换一个对象的值&#xff0c;并返回该对象的旧值。这个函数在 C14 中引入&#xff0c;主要用于简化和优化代码。…

OpenCV如何在图像中寻找轮廓

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV如何模板匹配 下一篇 :OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 目标 在本教程中&#xff0c;您将学习如何&#xff1a; 使用 OpenCV 函数 cv::findContour…

55.基于SpringBoot + Vue实现的前后端分离-旅游管理系统(项目 + 论文)

项目介绍 本站是一个B/S模式系统&#xff0c;采用SpringBoot Vue框架&#xff0c;MYSQL数据库设计开发&#xff0c;充分保证系统的稳定性。系统具有界面清晰、操作简单&#xff0c;功能齐全的特点&#xff0c;使得基于SpringBoot Vue技术的旅游管理系统设计与实现管理工作系统…

使用STM32CubeMX对STM32F4进行串口配置

目录 1. 配置1.1 Pin脚1.2 RCC开启外部晶振1.3 时钟1.4 串口配置 2. 代码2.1 默认生成代码2.1 开启串口中断函数2.3 接收中断2.4 接收回调函数2.5 增加Printf 的使用 1. 配置 1.1 Pin脚 1.2 RCC开启外部晶振 1.3 时钟 外部使用8MHz晶振 开启内部16MHz晶振 使用锁相环 开启最高…

ROS2 学习笔记(二)常用小工具

1. rqt_console #启动 ros2 run rqt_console rqt_console日志级别&#xff1a;Fatal --> Error --> Warn --> Info --> Debug #修改允许发布的日志级别 ros2 run <package_name> <executable_name> --ros-args --log-level WARN2. launch文件 ROS2中…

Outlook大附件插件 有效解决附件大小限制问题

很多企业都是使用Outlook来进行邮件的收发&#xff0c;可是由于附件大小有限&#xff0c;导致很多大文件发不出去&#xff0c;就会产生Outlook大附件插件这种业务需求。 邮件系统在发送大文件时面临的限制问题主要如下&#xff1a; 1、附件大小限制&#xff1a;大多数邮件服务…

深度学习基础之《TensorFlow框架(16)—神经网络案例》

一、mnist手写数字识别 1、数据集介绍 mnist数据集是一个经典的数据集&#xff0c;其中包括70000个样本&#xff0c;包括60000个训练样本和10000个测试样本 2、下载地址&#xff1a;http://yann.lecun.com/exdb/mnist/ 3、文件说明 train-images-idx3-ubyte.gz: training s…

Hbase学习笔记

Hbase是什么 HBase是一个高可靠、高性能、面向列、可伸缩的分布式存储系统。它利用Hadoop HDFS作为其文件存储系统,并提供实时的读写的数据库系统。HBase的设计思想来源于Google的BigTable论文,是Apache的Hadoop项目的子项目。它适合于存储大表数据,并可以达到实时级别。HB…

【Redis 开发】Lua语言

Lua Lua语法 Lua语法 Lua是一种小巧的脚本语言&#xff0c;底层用C语言实现&#xff0c;为了嵌入式应用程序中 官网&#xff1a;https://www.lua.org/ 创建lua文件 touch hello.lua 运行lua文件 lua hello.lua 输出语句 print("Hello World!")数据类型 可以通过t…

一篇易懂的SPI通讯指南

SPI概念 SPI&#xff08;Serial Peripheral interface, 串行外设接口&#xff09;是微处理控制单元(MCU)和外围IC&#xff08;如传感器、ADC、DAC、驱动芯片和外部存储设备等&#xff09;之间进行通信的同步串行端口&#xff0c;其通信速率一般可以从几千bps到几百Mbps甚至更高…

QT httpServer多线程后台服务器的例子实现

1.需求 1.1 用户需要其他平台&#xff08;web端&#xff09;调用Qt平台的接口&#xff0c;获取想要的数据并实时显示在网页里&#xff0c;比如实时的温湿度&#xff0c;用户数据等 1.2 用户需要在其他平台&#xff08;web端&#xff09;调用Qt平台的接口&#xff0c;下发数据…

kettle从入门到精通 第五十五课 ETL之kettle Excel输入

想真正学习或者提升自己的ETL领域知识的朋友欢迎进群&#xff0c;一起学习&#xff0c;共同进步。 1、 Excel输入&#xff0c;Microsoft Excel输入步骤的作用是从Microsoft Excel中读取数据&#xff0c;如下图所示&#xff1a; 1&#xff09;Excel输入步骤从文件D:\data\测试数…

Linux实现简单进度条(附原理解释和动图效果)

1&#xff0c;行缓冲区 先看下面的代码和运行结果&#xff0c; #include<stdio.h> #include<unistd.h> int main() {printf("你好\n");sleep(3);return 0; }只是一个简单的打印“你好”然后休眠三秒&#xff0c;最后程序结束 再看下面的代码和运行结果…