[DN优化] [锁优化][HDFS-15160] ReplicaMap, Disk Balancer and others use datanode readlock

[DN优化] [锁优化] [HDFS-15150] Introduce read write lock to Datanode 分析 背景:DN性能优化的一部分 目标:AutoCloseableLock 改为 ReadWriteLock 知识回顾:假设在程序中定义一个共享的数据结构,它大部分时间提供读服务,而写操作占有的时间很少,但是写操作完成之后的更新需要对后续的读服务可见。在没有写操作的时候,两个线程同时读一个资源没有任何问题,所以应该允许多个线程能在同时读取共享资源。但是如果有一个线程想去写这些共享资源,就不应该再有其它线程对该资源进行读或写(也就是说:读-读能共存,读-写不能共存,写-写不能共存)。这就需要一个读/写锁来解决 阅读详情

背景

现在我们已经引入了HDFS-15150,我们可以开始改进一些DN操作来使用读锁而不是写入锁来提高并发。

第一步是对Replicamap进行更改

- ReplicaMap:一些方法会调用`replicmap .replicas()`(例如`getBlockReports`, `getFinalizedBlocks`, `deepCopyReplica`),并且只以只读方式使用,所以它们也可以切换到使用readLock。

接下来是目录扫描仪和磁盘均衡器,只需要读锁。

- `Disk Balancer`, `Directory Scanner`: Next is the directory scanner and disk balancer, which only require a read lock.

最后,FSDATASETIMPL在那里它相当明显,他们只需要读锁。

- BlockSender and fsdatasetImpl: where is it fairly obvious they only need a read lock.

分析

(1)ReplicaMap该类维护副本的集合

- ReplicaInfo get(String bpid, long blockId) 方法写锁改为读锁
- int size(String bpid)方法写锁改为读锁
其他写相关依旧使用写锁

(2)DiskBalancer

- private Map<String, String> getStorageIDToVolumeBasePathMap() 锁改为读锁

(3)FsDatasetImpl

- public FsVolumeImpl getVolume(final ExtendedBlock b)写锁改为读锁
- public Block getStoredBlock(String bpid, long blkid)写锁改为读锁
- public Set<? extends Replica> deepCopyReplica(String bpid)写锁改为读锁
- public ReplicaInputStreams getTmpInputStreams 写锁改为读锁
- public ReplicaInfo moveBlockAcrossStorage 写锁改为读锁
- getBlockReports ...
- 其他方法

(3)BlockSender

配置

增加一项配置:开关 dn hdfs-site.xml中配置

<name>dfs.datanode.lock.read.write.enabled</name>
<value>true</value>

默认打开,如果开启则使用读写锁,如果关闭,所有的锁都是写锁。
FsDatasetImpl中

boolean enableRL = conf.getBoolean(
    DFSConfigKeys.DFS_DATANODE_LOCK_READ_WRITE_ENABLED_KEY,
    DFSConfigKeys.DFS_DATANODE_LOCK_READ_WRITE_ENABLED_DEFAULT);
// The read lock can be disabled by the above config key. If it is disabled
// then we simply make the both the read and write lock variables hold
// the write lock. All accesses to the lock are via these variables, so that
// effectively disables the read lock.
if (enableRL) {
  LOG.info("The datanode lock is a read write lock");
  this.datasetReadLock = new AutoCloseableLock(datasetRWLock.readLock());
} else {
  LOG.info("The datanode lock is an exclusive write lock");
  this.datasetReadLock = this.datasetWriteLock;
}
测试
  • 单元测试通过
2021-12-05 datanode存储相关(一):storage管理 基于源码hadoop-3.3.0 1 概述 众所周知,dn主要是用来存储hadoop集群中的具体的数据的。但实际上,Datanode还是需要保存一部分Datanode自身的元数据的, 这些元数据是通过Datanode磁盘存储上的一些文件和目录来保存的。 Datanode可以定义多个存储目录保存数据块,Datanode的多个存储目录存储的数据块并不相同,并且不同的存储目录可以是异构的, 这样的设计可以提高数据块IO的吞吐率[比如多块磁盘]。 1.1 实际存储 下面看一个实际中的存储: 我们 阅读详情

相关推荐

【HDFS】ReplicaMap类方法详解(一):所有方法介绍

【HDFS】ReplicaMap类方法详解(一):所有方法介绍

LifeIsGood 419

hdfs数据磁盘类型设置

储存类型: ARCHIVE:存档 ,存冷数据 DISK: 硬盘 SSD: ssd盘 RAM_DISK: 内存 hdfs设置 dfs.storage.policy.enabled=true 默认为true dfs.datanode.data.dir=[DISK]/data1/dn/disk0, [SSD]/da...

wflh323的专栏 909

【精】从HDFS的文件系统锁到读写锁

通过本文,你将了解到: HDFS中的FSNamesystemLock是什么? 读写锁ReentrantReadWriteLock、写锁降级以及ReentrantReadWriteLock源码对写线程饥饿情况做的一点优化。 简要了解JDK 8的新读写锁:StampedLock。 一、HDFS中的FSNamesystemLock 了解HDFS的朋友都知道,HDFS中有一把大锁。它是HDFS中令人又爱又恨的一个存在。爱是因为:它实现方式简单,保护整个文件系统在并操作下的正确性。恨是因为:正是由于它实现方式简单

LifeIsGood 2009

2021-12-08 datanode存储相关(二):数据块管理

1 概述 上文主要了解了dn数据存储的存储管理,这里主要分析一下数据块的管理。 从上一篇我们知道,在dn数据存储中,DataStorage管理dn提供的数据目录,一个数据目录对应一台机器上的数据卷。 FsDatasetImpl会通过持有一个 FsVolumeList 对象对 Datanode 上定义的所有存储目录下的数据块进行管理与操作,而 FsVolumeList 对象统一管理 Datanode 上定义的多个 FsVolumelmpl 对象。FsDatasetlmpl 还会持有一个DataStora

cn987654的博客 1271

如何对HDFS进行节点内(磁盘间)数据平衡

在CDP7中,因为是Hadoop3,默认就支持磁盘间数据均衡,本文档主要介绍在CDP中如何进行HDFS磁盘扩容并在节点内进行Balancer。特别是这种情况:当DataNode原来是挂载了几个数据盘,当磁盘占用率很高之后,再挂载新的数据盘。由于Hadoop 2.x 版本并不支持HDFS的磁盘间数据均衡,因此,会造成老数据磁盘占用率很高,新挂载的数据盘几乎很空。在这种情况下,挂载新的数据盘就失去了扩容HDFS数据盘的意义。磁盘平衡执行计划生成的文件内容格式是Json的,并且存储在HDFS之上。...

萌兔兔MMQ!! 2032

Hadoop系列之HDFS 磁盘均衡(17)

HDFS 磁盘均衡 HDFS 磁盘均衡器 HDFS 提供了一个用于 Datanode 内多磁盘之间的数据均衡工具,即 Diskbalancer (磁盘均衡器),它把数据均衡的分发到一个 Datanode 下的多个磁盘。Diskbalancer 和 Hadoop 2.0 版本以前提供的 Balancer 不同,因为 Balancer 关心的是不同 Datanode 之间的数据均衡,Datanode 内多个磁盘的数据均衡它是不起作用的。 HDFS 由于以下原因,在把数据存储到 Datanode 多个磁盘的时候,

6万+

ReadLock和WriteLock(读写锁)

ReadWriteLock也是一个接口,提供了readLock和writeLock两种锁的操作机制,一个资源可以被多个线程同时读,或者被一个线程写,但是不能同时存在读和写线程。使用场合假设在程序中定义一个共享的数据结构用作缓存,它大部分时间提供读服务(例如:查询和搜索),而写操作占有的时间很少,但是写操作完成之后的更新需要对后续的读服务可见。在没有读写锁支持的(Java 5 之前)时候,如果需要完成

cdw8131197的博客 2万+

在linux上本地大模型部署与推理

您的Python脚本(客户端)可能在您的个人电脑上,而模型服务(服务器)在远程Linux服务器上。如果您的服务器有强大的NVIDIA GPU,并且您对性能有更高的要求(例如需要高吞吐量),vLLM是更好的选择。这种方式无需向公网暴露服务器端口,而是通过加密的SSH通道将服务器的端口“映射”到您的本地电脑上。我们将启动一个API服务器,它会加载您指定的模型,并等待您的代码前来调用。如果您直接在SSH窗口运行上面的命令,一旦您关闭窗口,服务就会停止。这是根据您的原始代码修改的版本,适配本地vLLM服务。

frostmelody 全网同名,大家多多关注呀~ 持续分享优质内容! 2051

HDFS DataNode扫描机制及相关参数

目录 HDFS中的Block Block Scanner & Volume Scanner Directory Scanners Disk Checker 配置整理   众所周知,HDFS中数据都是保存在DataNode中,通过复制相同的数据到多个DN中,HDFS可以容忍DN的失败。但如果某些DN的磁盘出现故障,会怎么样呢?本文解释了DN上的一些后台任务是如何工作的,以帮助HDFS跨多...

MAYIBO—BG的专栏 3672

BSW: Dcm模块配置--28服务

这个章节讲解下UDS中的28服务(Communcation Control)的配置,顾名思义,对当前ECU的通讯状态进行变更,主要设置应用报文,网络管理报文的收发控制,通常应用在刷写APP软件时,降低总线负载。这里首先要提醒的一点是,28服务几乎不需要手写代码,只有在客户需求要求前置条件不满足时报特定NRC时才需要填充代码。实际配置中主要涉及的模块有DCM,BSWM,ComM,RTE.2.BswM模块的配置。3.ComM模块的配置。1.DCM模块的配置。

Forever_Oct的博客 3086

Windows+VSCode+Cline+MCP全流程配置指南

本文提供了一份详细的Windows+VSCode+Cline+MCP全流程配置指南,旨在帮助开发者打造高效的AI辅助编码工作站。文章从环境准备讲起,逐步指导安装VSCode、配置Cline插件、搭建Node.js环境,并重点详解如何通过MCP为Cline集成文件系统和GitHub等工具服务器,实现用自然语言操控开发环境,从而显著提升日常编码与文件管理效率。

weixin_28840143的博客 550

HDFS执行负载均衡时的threads quota is exceeded;浅谈HDFS的balancer

【告警现象】本人在使用hadoop2.7.3 执行hdfs balancer的时候,出现了以下告警:java.io.IOException: Got error, status message Not able to copy block 1073778252 to /172.13.6.52:30810 because threads quota is exceeded 【告警原因】1,在小于ha

宝罗Paul 的博客 6281

YOLO26涨点改进 | 全网独家首发 主干改进篇 | TGRS 2025 | RepViT-TD,告别庞大骨干!YOLO26 + RepViT-TD轻量又强大,实现更快更准的小目标检测!

本文提出将RepViT-TD轻量级主干网络应用于YOLO26目标检测框架,以提升小目标检测性能。RepViT-TD通过优化计算资源分配,强化前两层高分辨率特征提取能力,在保持轻量化的同时(仅4.85M参数)显著提升微小目标的检测精度(AI-TODv2数据集AP50达54.6%)。文章详细介绍了三种主干改进方案(RepVit_ldy1/2/3)的代码实现,并提供了完整的YAML配置文件修改指南,使模型能高效部署于边缘设备。实验表明,该方法在计算复杂度(38.19G FLOPs)和检测精度间取得了良好平衡。

Ai缝合怪、助力小伙伴高效发论文 326

Hadoop datanode启动源码解析

3.2.2 版本 DN启动流程DN流程图源码解析 dn不多做介绍,启动流程相对简单,通过main方法开始,一步一步去看源码,本文源码解析只展示重要方法 顺便求志同道合者,致力于大数据存储与计算 有无交流群共同学习(Hadoop源码/性能调优/生产环境真实场景) DN流程图 源码解析 定位到DataNode.java,DN也是一个main程序 public static void main(String args[]) { if (DFSUtil.parseHelpArgument(args, Da

enviable的博客 1585

RK3588平台开发系列讲解(项目篇)常见模型结构

📢 AI 模型常采用人工神经网络来模拟人脑神经的记忆和处理信号的能力。常见的人工神经网络类型有深度神经网络(Deep Neural Network,DNN)、卷积神经网络(Convolutional Neural Network,CNN)、循环神经网络(Recurrent Neural Network,RNN)等。

内核笔记 1756

c语言实现求一个矩阵特征值和特征向量

前言 求矩阵的特征值,主要是用的QR分解,在我的有一次博客里,我已经详细地给出了计算的过程,大家有兴趣可以去看下,经过几天的钻研,终于完成了整个的eig算法。下面我将把我的整个代码附上,有不懂的可以问我,欢迎一起讨论学习! 这是对上一次的修改版,上一次写的程序是在C++编译环境下编译的,所以放在c里面编译有些会出错。 最后,如果有不对的地方希望大...

qq_36417014的博客 2万+

DataNode启动流程源码分析

我们都知道在Hadoop hdfs文件系统中,Datanode是负责hdfs文件对应的数据块存储管理的组件,其会在启动时向NameNode汇报其上拥有的数据块,以及周期性心跳并接收来自NameNode下发的对应的数据块指令等等;其DataNode和NameNode的大致交互流程包括: Datanode启动时的握手、注册流程; 数据块汇报以及增量汇报等流程; 周期性心跳流程(当前数据节点负载、接受来自NameNode的指令); 先来看下DataNode的基本结构逻辑图,可以按照数据层、...

METON的博客 922

Qualcomm AI Engine Direct SDK(QNN)的使用介绍

Qualcomm AI Engine Direct SDK,高通新的AI模型推理框架,又名QNN,为AI开发提供统一API的底层框架。通过这个SDK,可以在高通的 CPU/GPU和HTP上对AI模型进行性能加速。2.Qualcomm AI Engine Direct SDK的公开英文文档。1.Qualcomm AI Engine Direct SDK的下载和安装。

u013250861的博客 6971

源码|HDFS之DataNode:启动过程

掌握Mac编译Hadoop源码与Hadoop单步debug追源码后,就能告别人肉调用栈,利用IDE轻松愉快的追各种开源框架的源码啦~ 今天是HDFS中DataNode的第一篇——DataNode启动过程。 源码版本:Apache Hadoop 2.6.0 可参考猴子追源码时的速记打断点,亲自debug一遍。 在开始之前 总览 HDFS-2.x与1.x的核心区别: 为支持Federatio...

weixin_34365417的博客 460

详解Agent Skills:让AI拥有更多专业能力(什么是Agent Skills?如何创建?如何使用?如何获取?)

本文分享如何将零散指令沉淀为可复用的 AI 能力模块🧩,介绍什么是Agent Skills?如何创建?如何获取?📚

XiaoqiangClub的博客 1269

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

NameNode锁细粒度优化在B站的实践

随着业务的高速发展,针对HDFS元数据的访问请求量呈指数级上升。

bilibili_TC的博客 1329

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Java中的读/写锁

相比Java中的锁(Locks in Java)里 Lock实现,读写锁更复杂一些。假设你的程序中涉及到对一些共享资源的读和写操作,且写操作没有读操作那么频繁。在没有写操作的时候,两个线程同时读一 个资源没有任何问题,所以应该允许多个线程能在同时读取共享资源。但是如果有一个线程想去写这些共享资源,就不应该再有其它线程对该资源进行读或写(译者注:也就是说...

weixin_33881140的博客 258

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Hadoop3 - HDFS Block 负载平衡以及 Disk 平衡

发生这种情况的原因可能是由于大量的写入和删除操作,也可能是由于更换了磁盘。如果我们使用基于可用空间的选择策略,则每个新写入将进入新添加的空磁盘,从而使该期间的其他磁盘处于空闲状态。计划中的每个移动步骤都具有目标磁盘,源磁盘的地址。的正值表示磁盘未充分利用,而负值表示磁盘相对于当前理想存储目标的利用率过高。值表示该机器节点具有较好的扩展性,而较高的值表示节点具有更倾斜的数据分布。,就可以找到集群中数据分布倾斜的节点,或者可以获取给定节点的。所谓的平衡指的是每个。的存储,在所在机器上的磁盘之间分配数据块。

小毕超博客 2109

HDFS Balancer负载均衡器

当我们的hadoop集群运行了一段时间之后,各个`DataNode`上的`数据分布`并`不一定`是`均匀分布`的。**比如说:** 我们向现有集群中添加了一个新的DataNode。

huan的学习记录 1237

(九)性能提升

文章目录前言DemoHDFS锁读写锁互斥解决读锁扩展延伸 前言 提升点: 元数据记录,修改了一个小地方,做性能提升; 读写锁高频竞争,有个地方由这样一个问题,把代码做一次调整; 在开发过程中,遇到过上面设计模式; Demo 没错又是这个核心的代码 ** * 管理元数据 * 磁盘 * @author Administrator * * 这段代码我是模仿hadoop的源码的写的,大家一定要掌握 * 后面我们要修改这段代码 * 其实我现在写的这段代码跟hadoop的源码的相似有90%的相似

weixin_37850264的博客 393

HDFS源码解析之简易分段锁双缓冲机制实现(五)

1. HDFS元数据原理流程 2. 自己实现分段加锁和双缓冲方案(百分之95的相似,比hdfs优化了一些地方) 2.1 DoubleBuffer package com.bigdata.hdfs.app.double_memery; import java.util.LinkedList; /** * Copyright (c) 2019 leyou ALL Rights Reserved Project: learning Package: * com.bigdata.hdfs.app.doub

百看不如一RUN 1114
上一篇: [DN优化] [锁优化] [HDFS-15150] Introduce read write lock to Datanode
王小禾
博客等级 码龄11年 80粉丝 291原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值