Hadoop3教程(四):HDFS的读写流程及节点距离计算

news2024/11/25 15:38:01

文章目录

  • (55)HDFS 写数据流程
  • (56) 节点距离计算
  • (57)机架感知(副本存储节点选择)
  • (58)HDFS 读数据流程
  • 参考文献

(55)HDFS 写数据流程

数据文件ss.avi是如何从客户端写到HDFS的?

完整流程见下图,接下来我们会按顺序详细捋一下

在这里插入图片描述

0)首先,客户端里需要有一个HDFS Client,这个HDFS客户端在创建的时候需要限制是Distributed FileSystem。(因为HDFS Client有很多种类型,默认是Local的)。

1)其次,向NameNode发送请求,请求将文件ss.avi发送到NameNode的指定目录下,这里假定是/user/atguigu/

2)NameNode接收请求,并针对本次请求进行检查:

  • 检查该客户端是否有权限在指定目录下写文件;
  • 检查指定的目录树是否存在

然后,NameNode检查完之后,发回响应,通知Client可以上传文件。

3)再然后,Client接收到响应,请求上传第一个Block(0M~128M),要求NameNode返回存储用的DataNode位置。(即请求NameNode告知我应该往哪儿存)

4)接着,NameNode接收到请求,开始寻找合适的DataNode,并将其返回。默认情况下,HDFS是保留3个副本,因此会返回3个DataNode。

这里需要注意,NameNode挑选DataNode的时候,是有一个基本策略的,在3.x中,优先级从高到低是:

  • 本地节点
  • 其它机架的一个节点
  • 其它机架(跟第二个相同)的另一个节点

而在2.x版本中,是按照:

  • 本地节点
  • 本地机架的另一个节点
  • 其它机架的一个节点

这个之后会详细说明。

同时,DataNode的挑选也遵守负载均衡,某个节点存放的数据也不能过多。

5)再其次,Client接收到NameNode返回的DataNode名单之后,就会创建FSDataOutputStream,向名单里的DataNode写数据。

那Client具体是怎么往DataNode里写的呢?

Client只跟DataNode1建立Block传输通道,然后DataNode1跟DataNode2建立传输通道,DataNode2跟DataNode3建立传输通道,整个过程是一个串联的

传输通道中,每次发送的数据量是一个Packet(64K),一个Packet包含若干个chunk(512B)+chunksum(4B的校验位)的组合,当一个Packet的大小达到了64K之后(chunk组合的数量够了),就可以发送了。

Client发送一个Packet之后,还会维护一个ACK缓冲队列,在里面备份刚才发送的Packet。

每次发送了一个packet之后,各个DataNode要按顺序返回应答。待到Client接收到最后的应答之后,就认为这个packet传输完成了,就会从ACK缓冲队列中删掉这个packet的备份。如果传输失败,则从ack队列中缓冲读取,继续发送。

为了加快传输速度,DataNode内部是边读边传边写,一边从管道里读一个Packet,一边往磁盘里写一个Packet,一边把内存中的Packet直接传给下面的DataNode。

6)当一个block传输完成后,客户端会再次请求NameNode上传第二个block,即从第3步开始重复执行,直到最后数据传输完成。

(56) 节点距离计算

在选择副本存储节点的时候,主要考虑节点的距离(越近越好) + 负载均衡(单个节点总负载不能太高)

如何计算两个服务器之间的节点距离呢?

所谓的节点距离就是,两个节点到达最近的公共祖先的距离之和

计算距离的时候有些基本准则,跟树有些类似,整个架构的子孙关系是:

互联网 -> 集群(类似机房)-> 机架 -> 节点服务器

简单的说就是节点的直接祖先是机架,机架的直接祖先是集群。

每个节点服务器到自己机架的距离是1,到自己所在集群的距离是2,到整个互联网的距离是3。

在这里插入图片描述

所以,结合图可见,节点间的距离其实是固定的:

  • 同一节点的距离是0
  • 同一机架上的两个节点,距离是2(共同祖先是机架,即节点1 -> 共同机架 -> 节点2);
  • 同一集群,不同机架上的两个节点,距离是4(共同祖先是集群,即节点1 -> 机架1 -> 共同集群 -> 机架2 -> 节点2);
  • 不同集群上的两个节点,距离是6(共同祖先是互联网,链路就不演示了);

(57)机架感知(副本存储节点选择)

即副本存储节点的选择策略

3.x的基本策略:

  • 本地节点
  • 其他机架上的一个节点(随机)
  • 第二个副本所在机架上的另一个节点(随机)

所谓的本地节点,是指client的位置而言的,即client所在的节点视为是本地节点。

如果Client是在集群外,那就随便选一个节点作为本地节点。

这里其实有一个权衡,为了更加安全,所以第二个副本选择为另一个机架,防止前两个副本都在一个机架上,机架坏了,副本就没了。

但是如果是基于这种考虑,那第三个副本应该放在第3个机架上更安全啊,为什么要放在第2个机架上呢?

主要是考虑到效率问题,同机架内节点做数据传输更快,而且两个机架都出问题的情况比较少,所以就没必要那么谨慎的备份3个机架了。

(58)HDFS 读数据流程

我们有一个NameNode,和3个DataNode,现在想从DataNode下载一个ss.avi文件,完整流程见下图:

在这里插入图片描述

0)首先,客户端Client会生成一个Distributed FileSystem对象,来由它代表自己,对外做交互。

1)然后,Client会向NameNode发送文件的下载请求,比如说告诉它,我想下/user/atguigu/ss.avi这个文件;

2)NameNode接收到客户端的请求,然后就开始检查,自己目录里有没有这个文件、这个文件是不是这个客户端有权限下载的。如果这些检查都通过了,那么NameNode会把目标文件的元信息发送回Client。

3)Client接收到反馈,开始生成一个FSDataInputStream对象,来由它代表自己,对外建立数据传输。

注意,NameNode在反馈的时候,会把目前文件的所有副本地址都返回给Client,那 Client应该选择哪个或者哪些副本去读取呢? 这里是有两个基本原则的:

  • 一般是选择节点距离最近的那个副本节点
  • 负载均衡。每个节点可接受的线程数是有上限的,如果最近的节点当前的任务已经超过负载的话,那就可以换到别的副本去读,加快速度。

然后,NameNode会向指定的副本节点发送读请求。

注意:Client在读的时候是串行读,第一块读完了之后再读第二块,不是咔咔咔开多个线程,好几块一起读。

为什么不并行读呢?大概是因为并行读没法保证拼接的顺序吧。

4)客户端以Packet为单位接收,先在本地缓存,最后再写入目标文件。

参考文献

  1. Hadoop2.x与Hadoop3.x副本选择机制
  2. 【尚硅谷大数据Hadoop教程,hadoop3.x搭建到集群调优,百万播放】

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

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

相关文章

SpringBoot+原生HTML+MySQL开发的电子病历系统源码

电子病历系统源码 电子病历编辑器源码 云端SaaS服务 电子病历系统,采用 “所见即所得、一体化方式”,协助医生和护士准确、标准、快捷实现病历书写、修改、审阅、打印、体温单浏览、医嘱管理等,是提供病历快速简洁化完成的一系列综合型医生病…

MyCat分片水平拆分

场景 在业务系统中 , 有一张表 ( 日志表 ), 业务系统每天都会产生大量的日志数据 , 单台服务器的数据存 储及处理能力是有限的 , 可以对数据库表进行拆分。 准备 准备三台服务器,具体的结构如下: 并且,在三台数据库服务器中分表创建一…

启山智软/JAVA商城

一、项目介绍 启山网上商城采用目前流行的JAVA spring cloud架构开发,前端使用的是目前最流行的TypeScript、VUE3、uniapp、element-plus、pinia技术,后端采用的是JAVA、SpringBoot、spring cloud技术,数据库采用的是MSQ,采用前后…

C语言----程序环境

目录 前言: 1.翻译环境 1.1预编译(预处理) 1.2编译 1.3汇编 1.4链接 2.运行环境 前言: 我们在用vs或一些其他的编译器写代码的时候,当我们运行代码的时候,很自然而然的就出结果了,但是它究竟是如何是如何实现的呢?因为这部分的内容是涉及到"编译原理"的,所以本章…

读书笔记——C++高性能编程(六)

第六章.并发和性能 阿姆达尔定律 介绍了阿姆达尔定律(Amdahls Law),这个定律的意义是“系统中对某一部件采用更快执行方式所能获得的系统性能改进程度,取决于这种执行方式被使用的频率”。具体的公式如下: 其中s0是程…

基于CodeFormer使用C++实现图片模糊变清晰,去除马赛克等效果

前言 CodeFormer是一种基于AI技术深度学习的人脸复原模型,由南洋理工大学和商汤科技联合研究中心联合开发。该模型通过结合了VQGAN和Transformer等技术,可以通过提供模糊或马赛克图像来生成清晰的原始图像。可以实现老照片修复、照片马赛克修复、黑白照…

深入浅出ThreadPoolExecutor(一)

文章目录 线程池简诉ThreadPoolExecutor详解ThreadPoolExecutor参数详解创建线程池的工具类Executors 线程池简诉 针对各种池子,比如 连接池:用于管理和重复使用数据库连接,避免频繁创建和销毁数据库连接带来的性能开销。对象池:用于管理和重复使用对象…

中国雪深长时间序列数据集(1979-2020)

简介 中国雪深长时间序列数据集(1979-2020)提供1979年1月1日到2020年12月31日逐日的中国范围的积雪厚度分布数据,其空间分辨率为25km,是“中国雪深长时间序列数据集(1978-2012)”的升级版本。前言 – 人工…

5.Python-使用XMLHttpRequest对象来发送Ajax请求

题记 使用XMLHttpRequest对象来发送Ajax请求,以下是一个简单的实例和操作过程。 安装flask模块 pip install flask 安装mysql.connector模块 pip install mysql-connector-python 编写app.py文件 app.py文件如下: from flask import Flask, reque…

Docker逃逸---授权 SYS_ADMIN Capability逃逸原理浅析

目录 一、产生原因 二、利用条件 三、复现过程 1、容器内挂载宿主机cgroup 2、设置notify_no_release并寻找容器在宿主机上的存储路径 3、将恶意脚本写入release_agent 一、产生原因 给容器额外授权了SYS_ADMIN Cap,并且容器以root权限运行,攻击者…

HUAWEI(26)——防火墙双机热备

一、拓扑 二、需求 PC2 ping PC1 FW1与FW2双机热备,FW1为active,FW2为Standby,抢占延时1s VRRP 三、配置 1.IP地址,防火墙接口加入区域 防火墙用户名:admin 防火墙旧密码:Admin@123 防火墙新密码:admin@123 [FW1]interface GigabitEthernet 1/0/0 [FW1-GigabitEthe…

【计算机毕业设计】python在线课程培训学习考试系统637r7-PyCharm项目

使用说明 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件; 使用PyCharm 导入项目,修改配置,运行项目; 将项目中config.ini配置文件中的数据库配置改为自己的配置,…

CSS 滚动驱动动画 animation-range

animation-range 语法 normallength-percentagetimeline-range-name 具名时间线范围 named timeline rangecovercontainentry 和 entry-crossingexit 和 exit-crossing 兼容性 animation-range 这个属性可同时对 scroll progress timeline 和 view progress timeline 这两种不…

机器学习笔记 - 使用3D卷积神经网络进行视频分类

1、导入相应的库 3D CNN 使用三维滤波器来执行卷积。内核能够在三个方向上滑动,而在 2D CNN 中它可以在二维上滑动。 首先安装并导入必要的库,用于处理ZIP文件内容的Remotezip 、用于使用进度条的tqdm 、用于处理视频文件的OpenCV 、用于执行更复杂的张量操作的einop…

计算机的总线

文章目录 前言一、总线的概述1.总线的概述(是什么、什么用)2.总线的分类2.1 片内总线2.2 系统总线2.2.1 数据总线2.2.2 地址总线2.2.3 控制总线 二、总线的仲裁1.为什么需要总线仲裁2.总线仲裁的方法2.1 链式查询2.2 计时器定时查询2.3 独立请求 总结 前…

激发创意,打造震撼视觉效果——Adobe After Effects 2024(Ae2024)全新来袭!

想要创造独特的、令人惊叹的视觉效果吗?不要犹豫,现在就升级到全新的Adobe After Effects 2024(Ae2024)!作为业界领先的动态图形和视觉效果软件,Ae2024将为您的创作带来前所未有的火花。 Ae2024拥有强大的…

Android 音频可视化

Android音频可视化,指的是将音频的频率绘制到屏幕上,达到一种视觉效果,使播放或录制过程更加生动形象。 在Android进行视频可视化涉及的三个主要知识点,其中比较难以理解的傅里叶变换公式。 Android原生的Visualizer使用(获取频…

someip 入门

什么是someip? SomeIP(Scalable Service-Oriented MiddlewarE over IP)是一种基于以太网的通信协议,用于汽车领域的通信。它允许不同的汽车电子控制单元(ECUs)之间通过网络进行通信,以便在车辆内…

网站的搭建与应用|企业APP软件定制开发|小程序

网站的搭建与应用|企业APP软件定制开发|小程序 网站是一种数字化媒体,它可以将我们的信息传递给全球的用户,让更多的人了解我们、了解我们的产品和服务。那么,如何搭建一个网站呢?下面,我将为大家介绍一下网站的建设步…

JavaScript 通过数组对JSON key字段进行排序

这里我以vue为例 不过json排序用的js方式 任何前端项目都可以通过js完成 我们组件代码现在是这样的 <template><div><div v-for "item in navCateList" :key "item.id">{{ item.name }}</div></div> </template>&…