【HDFS】FsDatasetImpl#recoverClose方法

news/2024/5/20 2:31:55 标签: hdfs, hadoop, java
  • recoverClose的目的
  • recoverClose的过程
  • recoverClose的调用点

一、前言

HDFS客户端写文件时,如果某个datanode发生错误或者异常。客户端会把这个datanode从pipeline里踢除,然后进行pipiline recovery,用剩余datanodes去写或者满足一定的条件时补充新的datanode到pipeline中写。在继续向新的pipeline写数据之前,要把已经写了的副本用一个newGS去给finalized掉,并且添加到datanode的volumeMap里。 之后客户端的DataStreamer会根据当前的pipeline的状态去选择继续写还是endBlock(这取决于packet是否是block的最后一个packet)。如果发生错误时传输的packet不是block的最后一个packet,那么就把stage置为BlockConstructionStage.DATA_STREAMING,然后继续用剩余的datanodes写,注意这里已经做了pipeline recovery,执行过了updatePipeline,因此写的副本的GS是newGS。

这么做的原因是:把已经写入的部分给成功落盘并添加副本集合里,防止后续pipeline里的节点再出问题导致副本又丢了一份。而且在pipeline恢复成功时,DataNode侧的DataXceiver#writeBlock方法里,会调用notifyNamenodeReceivedBlock,向namenode进行此block的IBR汇报。

二、recoverClose的逻辑

目标:用于恢复一个failed pipeline的close。
此方法会增加repli


http://www.niftyadmin.cn/n/80630.html

相关文章

聚类-理论补充2

目录 一。拉普拉斯矩阵的定义 二。谱聚类算法:未正则拉普拉斯矩阵 三。谱聚类算法:随机游走拉普拉斯矩阵 四。谱聚类算法:对称拉普拉斯矩阵 五。进一步思考 六。随机游走和拉普拉斯矩阵的关系 七。标签传递算法 一。拉普拉斯矩阵的定义 …

docker安装配置镜像加速器-拉取创建Mysql容器示例

List item docker 常见命令大全docker安装docker拉取创建Mysql容器docker 安装 1、安装链接:https://blog.csdn.net/BThinker/article/details/123358697 ; 2、安装完成需要配置docker镜像加速器 3、docker 镜像加速器推荐使用阿里云的: 编…

GO的临时对象池sync.Pool

GO的临时对象池sync.Pool 文章目录GO的临时对象池sync.Pool一、临时对象池:sync.Pool1.1 临时对象的特点1.2 临时对象池的用途1.3 sync.Pool 的用法二、临时对象池中的值会被及时清理掉2.1 池清理函数2.2 池汇总列表2.3 临时对象池存储值所用的数据结构2.4 临时对象…

ChatGPT:自然语言处理的新里程碑

近年来,基于自然语言处理技术的对话系统逐渐成为了人工智能领域的热门研究方向。其中,ChatGPT作为一种基于预训练的生成式对话模型,因其在生成高质量回复方面的表现而备受关注。在本篇博客中,我们将详细介绍ChatGPT的技术原理和应…

葡萄酒(WINE)数据集分类(PyTorch实现)

一、数据集介绍 Data Set Information: These data are the results of a chemical analysis of wines grown in the same region in Italy but derived from three different cultivars. The analysis determined the quantities of 13 constituents found in each of …

【java基础】运算符

运算符 operator 运算符优先级 Operators 操作员Precedence 优先级postfix 后缀expr expr--unary 一元的expr --expr expr -expr ~ !multiplicative 〔数〕乘法的 / %additive 添加剂 -shift 移动<< >> >>>relational 关系的< > < > insta…

DPDK — MEMPOOL(librte_mempool,Memory Pool Manager,内存池管理组件)

目录 文章目录 目录MEMPOOL(librte_mempool,Memory Pool Manager,内存池管理组件)Mempool 的布局关系Mempool Local CacheMempool ObjectMEMPOOL(librte_mempool,Memory Pool Manager,内存池管理组件) MEMPOOL 库提供了一组 API,用于从指定的 Memzone 中分配 Memory …

在Linux和Windows上安装sentinel-1.8.5

记录&#xff1a;380场景&#xff1a;在CentOS 7.9操作系统上&#xff0c;安装sentinel-1.8.5。在Windows上操作系统上&#xff0c;安装sentinel-1.8.5。Sentinel是面向分布式、多语言异构化服务架构的流量治理组件。版本&#xff1a;JDK 1.8 sentinel-1.8.5 CentOS 7.9官网地址…