HDFS文件的读写流程
Hadoop
HDFS的读写文件流程
HDFS写文件流程
-
客户端通过Distributed FileSystem模块向NameNode请求上传文件(hadoop fs -put 文件名 文件路径 )
- 判断该客户端是否有写入权限
- NameNode检查目标文件是否已存在,父目录是否存在。
-
NameNode返回是否可以上传(不满足上述直接报错)。
-
客户端请求第一个 Block上传到哪几个DataNode服务器上。
-
根据副本放置策略,负载均衡,机架感知以及网络拓扑图获取.
副本放置策略:
第一副本:放置在上传文件的DataNode上;如果是集群外提交,则随机挑选一台磁盘不太慢,CPU不太忙的节点上;
第二副本:放置在于第一个副本不同的机架节点上;
第三副本:与第二个副本相同机架的不同节点上;
如果还有更多的副本,则随机放在节点中。
-
-
NameNode返回3个DataNode节点,假设分别为dn1、dn2、dn3。
-
数据逻辑切块
物理切块:真实的切分,将200M切分为128M+72M。两个块会分别存储
逻辑切块:可以理解为切分前的准备,每个块128M,计算出需要切分成几个块(切块规划) -
客户端通过FSDataOutputStream模块请求dn1上传数据(与dn1请求链接),dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成。
-
dn1、dn2、dn3逐级应答客户端。
-
客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet(默认64k)为单位,dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答。
此时开始物理切片
-
当一个Block传输完成之后,上传通道关闭,客户端再次请求NameNode上传第二个Block的服务器。(重复执行3-7步)
-
所有数据上传成功后,会向客户端返回上传结果,客户端向NameNode返回信息,告知数据上传成功。
-
上传失败的处理
- 文件上传过程中如果有一个节点的块上传失败,那么hdfs会立即进行一次重试,如果重试还是失败,则会将失败的节点从pipeline中剔除,并将失败的节点报告给namenode
- hdfs可以忍受的极限是至少有一个节点上传成功,如果3个节点都失败,则会重新向namenode申请3个节点,重新构建数据通道,最终是保证至少有一份上传成功,其他的副本会在集群空闲的时候进行异步复制
HDFS读文件流程
-
客户端向Namenode请求下载文件(hadoop fs -get 文件 )
-
Namenode接受到客户端的请求
- 判断该客户是否有写入的权限
- 判断该文件是否存在
-
client(客户端)根据Namenode返回Datanode队列,并行的从这些Datanode中读取block块的数据
- 就近原则返回DataNode
-
上述block块内容读取完毕后,会继续访问Namenode剩余部分或者全部的block块的地址,然后并行读取,(以packet为单位来做校验),直至所有的block读取完成
第一个块下载成功之后会生成一个 crc文件,和上传时候的.meta文件进行完整度校验
校验内容:起始偏移量和末尾偏移量之间的内容
校验通过则认为第一个块下载成功 -
按照block的信息(编号等),将这些block块组合成一个完整文件,至此HDFS读数据完成
-
下载出现异常
- 数据块的某一个节点读取不到数据的时候会向namenode进行汇报,namenode就会标记这个节点可能是问题节点(以后下载时,就会将这个 问题节点返回的优先度下降),接着客户端继续读取这个块的其他节点
- 块下载失败会有3次尝试重新下载的机会,如果块过多的,NameNode会分批次返回块信息
补充:HDFS文件块大小
HDFS块的大小是指在HDFS中存储一个文件时,将文件分成多少个块,并且每个块的大小是多少。在HDFS中,块的大小通常是64MB或128MB。这个大小是可以配置的,但需要注意的是,块的大小不应该设置得太小,因为块的数量会增加,而且设置太小,会增加寻址时间,程序一直在找块的开始位置.但是,块的大小也不应该设置得太大,因为这会增加数据丢失的风险,如果一个块出现故障,整个块都需要重新传输,这会导致数据恢复的时间变长,而且从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。导致程序在处理这块数据时,会非常慢。
总结:HDFS块的大小设置主要取决于磁盘传输速率。
-
HDFS中的文件在物理上是分块存储(Block),块的大小可以通过配置参数( hdfs-site.xml文件中的dfs.blocksize)来规定,默认大小在Hadoop2.x/3.x版本中是128M,1.x版本中是64M。
-
如果在系统运行过程中修改了dfs.blocksize属性的值,那么这个修改只对新文件起作用,对于已经存在的文件不会产生影响。
-
块大小的计算方式
- 如果寻址时间约为10ms,即查找到目标block的时间为10ms。
- 寻址时间为传输时间的1%时,则为最佳状态,因此,传输时间=10ms/0.01=1000ms=1s
- 而目前磁盘的传输速率普遍为100MB/s。,所以block大小=1s*100MB/s=100MB
相关文章:

HDFS文件的读写流程
Hadoop HDFS的读写文件流程 HDFS写文件流程 客户端通过Distributed FileSystem模块向NameNode请求上传文件(hadoop fs -put 文件名 文件路径 ) 判断该客户端是否有写入权限NameNode检查目标文件是否已存在,父目录是否存在。 NameNode返回是…...

SpringCloudGateway集成SpringDoc
SpringCloudGateway集成SpringDoc 最近在搞Spring版本升级,按客户要求升级Spring版本,原来用着SpringBoot 2.2.X版本,只需要升级SpringBoot 2.X最新版本也就可以满足客户Spring版本安全要求,可是好像最新的SpringBoot 2.X貌似也不…...

ArcGIS将两个相同范围但不同比例或位置的矢量数据移动到相同位置
有两个市图层,一个是正确经纬度的市行政范围图层,另一个是其他软件导出获取的不正确经纬度信息或缺失信息。 如果单纯的依靠移动图层,使不正确的移动到正确位置需要很久。尝试定义投影等也不能解决。 使用ArcMap 的空间校正工具条ÿ…...

MySQL编写建表语句,如何优雅处理创建时间与更新时间
在 MySQL 中,可以使用 TIMESTAMP 或者 DATETIME 数据类型来存储日期和时间信息,并结合默认值和触发器来实现自动更新 createTime 和 updateTime 字段。 以下是一个示例建表语句,演示如何设置自动更新的 createTime 和 updateTime 字段&#…...
NetSuite as OIDC Provider 演示
书接上回。上次谈了借助第三方身份认证服务SSO登录NetSuite。 NetSuite OIDC、SAML SSO 演示_NetSuite知识会的博客-CSDN博客NetSuite的SSO的策略:第三方的身份认证服务商NetSuite as OIDC Provider。本文演示前者。https://blog.csdn.net/remottshanghai/article/…...

webrtc sdp各字段含义
WebRTC使用Session Description Protocol(SDP)实现传输协议的协商和描述。以下是SDP中常见的字段及其含义: v:协议版本号o:会话创建者的标识符、会话ID、和会话版本号s:会话名称t:会话时间描述…...

Docker 常用服务 安装使用 教程
Docker安装常用服务 1、 安装mysql # 1.拉取mysql镜像到本地 docker pull mysql:tag (tag不加默认最新版本) # 2.运行mysql服务 docker run --name mysql -e MYSQL_ROOT_PASSWORDroot -d mysql:tag --没有暴露外部端口外部不能连接 docker run --name mysql -e MYSQL_ROOT_PAS…...

Java String类(2)
String方法 字符串拆分 可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串 相关方法如下: 方法功能String[ ] split(String regex)//以regex分割将字符串根据regex全部拆分String[ ] split(String regex, int limit)将字符串以指定的格式,拆…...

基于图像切割计算轨迹相似度
目录 背景思路与核心代码数值实验优缺点分析参考文献 背景 在前面2文,我们分别讨论了利用夹角余弦来计算轨迹相似度和利用缓冲原理来计算轨迹相似度两种方法,前者可以作为一个baseline提供参考,后者的计算更符合人们的感官和事实,…...

Day49|leetcode 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II
leetcode 121. 买卖股票的最佳时机 题目链接:121. 买卖股票的最佳时机 - 力扣(LeetCode) 视频链接:动态规划之 LeetCode:121.买卖股票的最佳时机1_哔哩哔哩_bilibili 题目概述 给定一个数组 ,它的第 个元…...

【项目经验】:elementui表格中表头的多选框换成文字
一.项目需求 表格可以多选,表头都是汉字。。。。类似于这种 二.实现功能 用到的方法 Table Attributes 参数说明类型可选值默认值header-cell-class-name表头单元格的 className 的回调方法,也可以使用字符串为所有表头单元格设置一个固定的 className。…...

【LeetCode】剑指 Offer <二刷>(4)
目录 题目:剑指 Offer 09. 用两个栈实现队列 - 力扣(LeetCode) 题目的接口: 解题思路: 代码: 过啦!!! 题目:剑指 Offer 10- I. 斐波那契数列 - 力扣&am…...

CentOS7查看和关闭防火墙
CentOS 7.0默认使用的是firewall作为防火墙 查看防火墙状态 firewall-cmd --state1 停止firewall systemctl stop firewalld.service1 禁止firewall开机启动 systemctl disable firewalld.service 1 转自:CentOS 6和CentOS 7防火墙的关闭 Centos7开放及查看…...

LeetCode 无重复字符的最长子串 打败100%的人
😀前言 LeetCode上的“无重复字符的最长子串”问题要求我们找到给定字符串中不包含重复字符的最长子串的长度。这个问题是一个典型的滑动窗口技巧的应用,需要有效地处理字符出现的情况来找到解决方案。 . 在本解决方案中,我们将探讨两种不同的…...

Spring Boot中通过maven进行多环境配置
上文 java Spring Boot将不同配置拆分入不同文件管理 中 我们说到了,多环境的多文件区分管理 说到多环境 其实不止我们 Spring Boot有 很多的东西都有 那么 这就有一个问题 如果 spring 和 maven 都配置了环境 而且他们配的不一样 那么 会用谁的呢? 此…...

python自动化Selenium的使用
python自动化Selenium的使用 Selenium是一个自动化测试框架,用于模拟和控制浏览器操作,支持多种编程语言。它可以模拟人类用户在浏览器上的操作(如点击、滚动、输入等),并检查网页内容和元素的属性。Selenium可用于对…...

大数据课程K13——Spark的距离度量相似度度量
文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握Spark的距离度量和相似度度量; ⚪ 掌握Spark的欧氏距离; ⚪ 掌握Spark的曼哈顿距离; ⚪ 掌握Spark的切比雪夫距离; ⚪ 掌握Spark的最小二乘法; 一、距离度量和相似度度量 1. …...

Lambda表达式第四版
1、冗余的Runnbale代码 package com.lambda;public class Demo01Runnable {public static void main(String[] args) {RunnableImpl runnable new RunnableImpl();Thread thread new Thread(runnable);thread.start();//Lambda表达式} }class RunnableImpl implements Runnab…...

自定义类加载器
java中自定义类加载器,并将双亲委派改为逆向双亲委派 自定义类加载器JarLoader: package cn.ac.iscas.dmo.common.tools.core.classloader;import org.apache.commons.collections4.MapUtils;import java.io.*; import java.net.URL; import java.net.U…...

【Redis】Redis 的学习教程(七)之 SpringBoot 集成 Redis
在前几篇文章中,我们详细介绍了 Redis 的一些功能特性以及主流的 java 客户端 api 使用方法。 在当前流行的微服务以及分布式集群环境下,Redis 的使用场景可以说非常的广泛,能解决集群环境下系统中遇到的不少技术问题,在此列举几…...

Vlan和Trunk
文章目录 一、VLAN的定义与背景1. 传统以太网的问题(广播域)2. 用VLAN隔离广播域3. VLAN的优点与应用 二、VLAN的转发过程举例三、802.1Q标签:帧格式与作用四、VLAN工作原理交换机端口类型AccessTrunkHybrid PVID(Port VLAN ID&am…...

java 批量下载将多个文件(minio中存储)压缩成一个zip包
我的需求是将minio中存储的文件按照查询条件查询出来统一压成一个zip包然后下载下来。 思路:针对这个需求,其实可以有多个思路,不过也大同小异,一般都是后端返回流文件前端再处理下载,也有少数是压缩成zip包之后直接给…...

nnUNet v2数据准备及格式转换 (二)
如果你曾经使用过nnUNet V1,那你一定明白数据集的命名是有严格要求的,必须按照特定的格式来进行命名才能正常使用。 这一节的学习需要有数据,如果你有自己的数据,可以拿自己的数据来实验,如果没有,可以用十…...

ant-vue1.78版监听a-modal遮罩层的滚动事件
监听a-modal遮罩层的滚动事件 我们开发过程中经常有遇到监听页面滚动的事件需求,去做一些下拉加载或者是下拉分页的需求,我们直接在vue的生命周期中去绑定事件监听非常的方便,但如果是弹框的遮罩层的滚动监听呢?页面的监听完全是…...

MATLAB中residue函数用法
目录 语法 说明 示例 求解具有实根的部分分式展开式 展开具有复数根和同次分子及分母的分式 展开分子次数高于分母次数的分式 residue函数的功能是部分分式展开(部分分式分解)。 语法 [r,p,k] residue(b,a) [b,a] residue(r,p,k) 说明 [r,p…...

攻防世界-Caesar
原题 解题思路 没出现什么特殊字符,可能是个移位密码。凯撒密码加密解密。偏移12位就行。...

嵌入式开发-lin总线介绍 一.概述
1.1lin总线定义和历史 LIN总线(Local Interconnect Network)是一种基于UART/SCI(Universal Asynchronous Receiver-Transmitter/Serial Communication Interface)的低成本串行通信协议。它主要用于汽车、家电、办公设备等多种领域…...

羊城杯-2023-Crypto
文章目录 Danger_RSA题目描述:题目分析: Easy_3L题目描述:题目分析: XOR贯穿始终题目描述:题目分析: MCeorpkpleer题目描述:题目分析: SigninCrypto题目描述:题目分析&am…...

RabbitMQ快速上手及讲解
前言:在介绍RabbitMQ之前,我们先来看下面一个场景: 1.1.1.1 异步处理 场景说明: 用户注册后,需要发注册邮件和注册短信,传统的做法有两种 1.串行的方式 (1)串行方式:将注册信息写入数据库后&a…...

使用多线程std::thread发挥多核计算优势(解答)
使用多线程std::thread发挥多核计算优势(题目) 单核无能为力 如果我们的电脑只有一个核,那么我们没有什么更好的办法可以让我们的程序更快。 因为这个作业限制了你修改算法函数。你唯一能做的就是利用你电脑的多核。 使用多线程 由于我们…...