大数据框架之Hadoop:HDFS(四)HDFS的数据流(面试重点)

news2024/9/20 17:44:51

4.1HDFS写数据流程

4.1.1 剖析文件写入

HDFS写数据流程,如下图所示。

Untitled (1)

1)客户端通过 Distributed FileSystem 模块向 NameNode 请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。

2)NameNode 返回是否可以上传。

3)客户端请求第一个 Block上传到哪几个DataNode服务器上。

4)NameNode返回3个DataNode节点,分别为dn1、dn2、dn3。

5)客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成。

6)dn1、dn2、dn3逐级应答客户端。

7)客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答。

8)当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。(重复执行3-7步)。

4.1.2 网络拓扑-节点距离计算

在HDFS写数据的过程中,NameNode会选择距离待上传数据最近距离的DataNode接收数据。那么这个最近距离怎么计算呢?

节点距离:两个节点到达最近的共同祖先的距离总和。

image-20230201201817520

例如,假设有数据中心d1机架r1中的节点n1。该节点可以表示为/d1/r1/n1。利用这种标记,这里给出四种距离描述,如上图所示。

大家算一算每两个节点之间的距离,如下图所示。

image-20230201201706528

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

  1. 官方ip地址

官方文档说明

👉 For the common case, when the replication factor is three, HDFS’s placement policy is to put one replica on one node in the local rack, another on a different node in the local rack, and the last on a different node in a different rack.

  1. Hadoop2.7.2副本节点选择

Untitled (2)

4.2HDFS读数据流程

HDFS的读数据流程,如下图所示。

Untitled (1)

1)客户端通过 Distributed FileSystem 向 NameNode 请求下载文件,NameNode通过查询元数据,找到文件块所在的 DataNode 地址。

2)挑选一台 DataNode(就近原则,然后随机)服务器,请求读取数据。

3)DataNode 开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。

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

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

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

相关文章

c++函数指针进阶

c中有两种函数指针 普通函数指针成员函数指针 而对于成员函数指针,又分为两种 静态成员函数指针非静态成员函数指针 定义普通函数指针与静态函数指针的语法类似 void (*pa)(); 定义非静态成员函数指针 void (A::* pa)(); 在调用非静态成员函数时,实…

Spring循环依赖问题,Spring是如何解决循环依赖的?

文章目录一、什么是循环依赖1、代码实例2、重要信息二、源码分析1、初始化Student对Student中的ClassRoom进行Autowire操作2、Student的自动注入ClassRoom时,又对ClassRoom的初始化3、ClassRoom的初始化,又执行自动注入Student的逻辑4、Student注入Class…

8. QT_OpenGL--1. 在QtWidget中搭建OpenGL加载框架

1. 说明: 在 Qt 中使用 OpenGL,实际上时严格遵循一种代码开发框架的,在 QtWidget 中,需要使用 openGlWidget 控件,并自定义类,类中还需继承 QOpenGLWidget,QOpenGLFunctions_3_3_Core 两个类,并…

Word控件Spire.Doc 【Table】教程(14): 如何在C#中为word表格设置AutoFit选项

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转…

【沁恒WCH CH32V307V-R1的单线半双工模式串口通讯】

【沁恒WCH CH32V307V-R1的单线半双工模式串口通讯】1. 前言2. 软件配置2.1 安装MounRiver Studio3. UASRT项目测试3.1 打开UASRT工程3.2 编译项目4. 下载验证4.1 接线4.2 演示效果5. 小结1. 前言 该模块包含 3 个通用同步异步收发器(USART1/2/3)和 5 个通…

vivo 自研Jenkins资源调度系统设计与实践

作者:vivo 互联网服务器团队- Wu Qinghua 本文从目前业界实现Jenkins的高可用的实现方案,分析各方案的优缺点,引入vivo目前使用的Jenkins高可用方案,以及目前Jenkins资源的调度方案的设计实践和目前的落地运行效果。 一、前言 现…

微服务实战--高级篇:分布式事务seata

分布式事务 1.分布式事务问题 1.1.本地事务 本地事务,也就是传统的单机事务。在传统数据库事务中,必须要满足四个原则: 1.2.分布式事务 分布式事务,就是指不是在单个服务或单个数据库架构下,产生的事务&#xff0c…

PPP协议

PPP协议PPP协议概述PPP链路建立过程PPP链路接口状态机LCP报文格式LCP协商过程—正常协商(链路层协商过程)LCP协商过程—参数不匹配(链路层协商过程)LCP协商过程—参数不识别(链路层协商过程)PPP认证模式PAP…

vTESTstudio - VT System CAPL Functions - General/Trigger Function

前面文章中我们已经介绍了常用的几种板卡的基本信息,那这些板卡该如何去通过软件调用呢?带着这个问题我们开始新的一块内容 - VT系统相关的自动化控制函数介绍,我会按照不同的板卡来分类,对其可控制的函数进行介绍,方便…

快速理解 JVM 原理 - 【基础概念篇】

快速理解 JVM 原理 - 【基础概念篇】 Java虚拟机 是什么? Java 虚拟机 本质就是一台”虚拟的“计算机 ,大家通俗的理解是一款 “软件”安装在电脑上 虚拟机通常分为两类: 系统虚拟机【可运行完整操 作系统的软件平台】程序虚拟机 【为执行…

AA-PEG-AA,Acetic Acid-PEG-Acetic Acid,羧酸-聚乙二醇-羧酸供应

英文名称:Acetic Acid-PEG-Acetic Acid,AA-PEG-AA 中文名称:羧酸-聚乙二醇-羧酸 AA-PEG-AA是一种线性双功能PEG羧酸试剂。PEG和COOH基团之间存在亚甲基(CH2)键。AA-PEG-AA也称为CM-PEG-CM,CM:…

【GD32F427开发板试用】使用TinyMaix进行手写数字识别

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:xusiwei1236 一、TinyMaix简介 TinyMaix是国内sipeed团队开发一个轻量级AI推理框架,官方介绍如下: TinyMaix 是面向单…

django+mysql实现一个简单的web登录页面

目录 一、使用pyacharm创建一个django项目 二、启动django项目验证 三、配置mysql数据库 1、本地安装mysql数据库 1)安装mysql数据库 2)自己创建一个数据库 2、安装 pymysql 3、配置mysql数据库 1)在项目同名包下的_init_.py里面添加…

OpenGL渲染管线介绍

一、概述 OpenGL是跨平台计算机图形应用程序的应用规范,广泛应用于仿真、游戏、GIS系统等领域,实现二三维图形的渲染。OpenGL渲染过程需要经历CPU、GPU两个阶段,CPU中进行图形计算,完成之后调用OpenGL开发接口在GPU中创建缓存区缓…

前后端一些下载与配置(第二篇 第10天过后)nuxt banner redis

NUXT 应该是不用怎么装? 有现成的 axios 还需要在npm吗 好像已经有现成的了 banner banner 笔记汇总P396 Redis Linux安装redis tar -xzvf redis-6.2.6.tar.gz cd redis-6.2.6 照着他做 然后 cd /usr/local/redis/bin ./redis-server /usr/local/redis…

图数据建模基础

Neo4j 图的组件 节点(Nodes)标签(Labels)关系(Relationships)属性(Properties)建模过程 了解领域并为应用程序定义特定用例(问题)。开发初始图形数据模型。 对…

ansible的剧本(playbook)

一、playbooks 概述以及实例操作 1、playbooks 的组成 playbooks 本身由以下各部分组成 (1)Tasks:任务,即通过 task 调用 ansible 的模板将多个操作组织在一个 playbook 中运行 (2)Variables&#xff1…

多模式支持无线监控技术:主动式定位、被动式定位

物联网空间信息与数字技术发展至今,已经催生了一大批优秀的践行者。在日常与商业应用中,室内外定位领域依托于这一技术的发展,更是在近几年风光无限。但是并不是说室内定位与室外定位都已经相当成熟,相对来说,室内定位…

简单实用的内网穿透实现教程

内网穿透,字面理解就是网络地址穿透,是一种比较常用的将内网地址转换成公网地址的方式。通过内网穿透,可以将本地内网局域网提供给外网公网上访问,在外网也能连接访问内网主机和应用,当用户有日常远程和异地外网访问的…

Zabbix的自定义监控

Zabbix的自定义监控 zabbix自动可以提供很多监控项;但是往往不能满足需求;尝尝需要我们自己创建一系列的监控项,这就是自定义监控; 监控项:zabbix进行监控的一个指标,zabbix成为item; 它的值…