hadoop和Yarn的基本介绍
Hadoop的三大结构及各自作用?
Hadoop是一个由Apache基金会开发的分布式系统基础架构,主要用于处理大规模数据集的分布式存储和计算。Hadoop的三大核心结构是HDFS(Hadoop Distributed File System)、MapReduce和YARN(Yet Another Resource Negotiator),它们各自的作用如下:
1\. HDFS(Hadoop Distributed File System)
**作用** :提供高可靠性和高吞吐量的分布式文件存储系统。
* **高可靠性** :HDFS将文件分割成多个数据块(默认大小为128MB),并将这些数据块存储在多个节点上(默认每个数据块有3个副本)。即使某个节点出现故障,数据仍然可以从其他副本中恢复,从而保证了数据的高可靠性。
* **高吞吐量** :HDFS采用流式数据访问模式,适合大规模数据的读写操作。它通过将数据分散存储在多个节点上,可以同时启动多个数据块的读写操作,从而提高数据的读写吞吐量。
* **适合大规模数据存储** :HDFS能够存储海量的数据,支持PB级别的数据存储。它通过分布式存储的方式,将数据分散存储在多个节点上,从而解决了单机存储容量有限的问题。
2\. MapReduce
**作用** :提供一个分布式计算框架,用于处理大规模数据集的并行计算。
* **并行计算** :MapReduce将计算任务分解为多个Map任务和Reduce任务,这些任务可以并行运行在不同的节点上。Map任务负责处理输入的键值对,生成中间结果;Reduce任务负责对中间结果进行归并和汇总,最终生成最终结果。通过这种方式,MapReduce能够充分利用集群的计算资源,实现大规模数据的并行计算。
* **容错性** :MapReduce具有良好的容错机制。如果某个节点上的任务失败,系统会自动将该任务重新分配到其他节点上运行,从而保证了计算任务的正常完成。
* **易于编程** :MapReduce提供了简单的编程模型,用户只需要编写Map函数和Reduce函数,就可以实现复杂的分布式计算任务。MapReduce框架会自动处理任务的调度、数据的分发和结果的收集等细节,降低了分布式计算的开发难度。
3\. YARN(Yet Another Resource Negotiator)
**作用** :提供一个通用的资源管理系统,用于管理集群中的计算资源(如CPU、内存等)。
* **资源管理** :YARN负责监控集群中各个节点的资源使用情况,并根据用户的资源申请请求,动态地分配和回收资源。它通过资源调度器(如Capacity Scheduler、Fair Scheduler等)来实现资源的合理分配,确保不同用户和应用程序能够公平地使用集群资源。
* **多框架支持** :YARN不仅支持MapReduce框架,还可以支持其他计算框架(如Spark、Flink等)。它为不同的计算框架提供了一个统一的资源管理平台,使得用户可以在同一个集群上运行多种不同的计算框架,提高了集群资源的利用率。
* **任务调度** :YARN负责调度集群中的计算任务,根据任务的优先级、资源需求等因素,合理地安排任务的运行顺序和运行位置。它通过任务调度器来实现任务的动态调度,确保集群的计算资源能够高效地利用,提高集群的整体性能。
YARN(Yet Another Resource Negotiator)是 Hadoop 生态系统中的一个核心组件,它是一个通用的分布式资源管理系统,主要用于管理和调度集群中的计算资源(如 CPU、内存等),以支持多种分布式计算框架的运行。
YARN 的定义
YARN 是 Hadoop 的下一代计算平台,它将 Hadoop 的资源管理和作业调度功能从 MapReduce 框架中分离出来,成为一个独立的、通用的资源管理框架。它的主要目标是:
1. **解耦资源管理与计算框架**:将资源管理与具体的计算框架(如 MapReduce)分离,使得 Hadoop 能够支持更多类型的计算框架(如 Spark、Flink、Tez 等),而不仅仅是 MapReduce。
2. **提高资源利用率**:通过灵活的资源调度策略,优化集群资源的分配,提高集群的整体利用率。
3. **支持多租户环境**:允许多个用户或应用程序共享同一个 Hadoop 集群,同时保证资源的隔离和公平性。
YARN 的架构
YARN 的架构主要包括以下三个关键组件:
1. **ResourceManager(RM)**
- **作用**:负责整个集群的资源管理和调度。
- **功能**:
- 监控集群中各个节点的资源使用情况。
- 接收应用程序的资源请求,并根据调度策略分配资源。
- 管理应用程序的生命周期,包括启动、停止和监控应用程序。
2. **NodeManager(NM)**
- **作用**:运行在每个节点上,负责管理单个节点上的资源。
- **功能**:
- 启动和管理容器(Container),容器是 YARN 中的资源分配单元,封装了 CPU、内存等资源。
- 监控节点上的资源使用情况,并将资源使用情况报告给 ResourceManager。
- 管理节点上运行的任务,包括启动和停止任务。
3. **ApplicationMaster(AM)**
- **作用**:每个应用程序都有一个 ApplicationMaster,负责管理应用程序的生命周期。
- **功能**:
- 向 ResourceManager 申请资源。
- 与 NodeManager 通信,启动和管理任务。
- 监控应用程序的运行状态,处理任务的失败和重试。
YARN 的工作流程
1. **用户提交应用程序**:用户将应用程序(如 MapReduce 作业)提交到 YARN 集群。
2. **ResourceManager 分配资源**:ResourceManager 根据调度策略为应用程序分配资源。
3. **ApplicationMaster 启动**:ResourceManager 启动 ApplicationMaster,ApplicationMaster 负责管理应用程序的生命周期。
4. **ApplicationMaster 申请资源**:ApplicationMaster 向 ResourceManager 申请更多资源来运行任务。
5. **NodeManager 启动任务**:ResourceManager 将资源分配给 ApplicationMaster,ApplicationMaster 与 NodeManager 通信,启动任务。
6. **任务运行和监控**:任务在 NodeManager 上运行,ApplicationMaster 监控任务的运行状态,处理任务的失败和重试。
7. **应用程序完成**:应用程序运行完成后,ApplicationMaster 向 ResourceManager 注销,释放资源。
YARN 的特点
1. **通用性**:YARN 不依赖于特定的计算框架,可以支持多种计算框架(如 MapReduce、Spark、Flink 等)。
2. **高可用性**:通过多 ResourceManager 的部署,可以实现 ResourceManager 的高可用性。
3. **灵活性**:支持多种资源调度策略(如 Capacity Scheduler、Fair Scheduler 等),可以根据用户的需求灵活配置资源分配。
4. **可扩展性**:能够支持大规模集群的资源管理,适用于 PB 级别的数据处理。
总之,YARN 是 Hadoop 生态系统中一个非常重要的组件,它通过解耦资源管理和计算框架,提高了 Hadoop 的灵活性和资源利用率,使得 Hadoop 能够更好地支持多种分布式计算场景。
YARN(Yet Another Resource Negotiator)的三大核心组件是 **ResourceManager(RM)**、**NodeManager(NM)** 和 **ApplicationMaster(AM)**。它们各自的作用如下:
### 1\. ResourceManager(RM)
**作用** :负责整个集群的资源管理和调度。
* **资源监控** :
* ResourceManager 负责监控集群中每个节点的资源使用情况,包括 CPU、内存等。它通过与 NodeManager 的通信,获取每个节点的资源状态。
* 它维护一个全局的资源视图,知道集群中哪些资源是空闲的,哪些资源已经被分配。
* **资源分配** :
* 当应用程序(如 MapReduce 作业或其他计算框架)提交到 YARN 时,ResourceManager 根据调度策略(如 Capacity Scheduler 或 Fair Scheduler)为应用程序分配资源。
* 它将资源以 **Container** 的形式分配给应用程序的 ApplicationMaster。Container 是 YARN 中的资源分配单元,封装了 CPU、内存等资源。
* **应用程序管理** :
* ResourceManager 负责管理应用程序的生命周期,包括启动、停止和监控应用程序。
* 它维护一个应用程序队列,按照调度策略分配资源给队列中的应用程序。
2\. NodeManager(NM)
**作用** :运行在每个节点上,负责管理单个节点上的资源。
* **资源管理** :
* NodeManager 负责管理单个节点上的资源,包括启动和管理 **Container**。Container 是 YARN 中的资源分配单元,封装了 CPU、内存等资源。
* 它根据 ResourceManager 的指令启动或停止 Container,并确保 Container 在节点上正常运行。
* **资源监控** :
* NodeManager 监控节点上的资源使用情况,包括 CPU、内存等,并将这些信息定期报告给 ResourceManager。
* 如果某个 Container 超出了分配的资源(如内存使用超过限制),NodeManager 会将其杀死,以防止资源滥用。
* **任务管理** :
* NodeManager 负责管理节点上运行的任务,包括启动和停止任务。
* 它与 ApplicationMaster 通信,接收任务的启动和停止指令,并确保任务在节点上正常运行。
3\. ApplicationMaster(AM)
**作用** :每个应用程序都有一个 ApplicationMaster,负责管理应用程序的生命周期。
* **资源申请** :
* ApplicationMaster 向 ResourceManager 申请资源,以获取运行任务所需的资源。
* 它根据应用程序的需求,动态地申请和释放资源。例如,MapReduce 作业的 ApplicationMaster 会根据任务的进度,申请更多的资源来运行更多的任务。
* **任务管理** :
* ApplicationMaster 负责管理应用程序的任务,包括启动和停止任务。
* 它与 NodeManager 通信,启动和管理任务。如果某个任务失败,ApplicationMaster 会重新申请资源并重新启动任务。
* **监控和容错** :
* ApplicationMaster 监控应用程序的运行状态,处理任务的失败和重试。
* 如果某个任务失败,ApplicationMaster 会尝试重新启动任务,直到达到最大重试次数。如果 ApplicationMaster 自身失败,ResourceManager 会重新启动它。
### YARN 的工作流程(结合三大组件)
1. **用户提交应用程序** :
- 用户将应用程序(如 MapReduce 作业)提交到 YARN 集群。提交时,会指定应用程序的资源需求和运行参数。
2. **ResourceManager 分配资源** :
- ResourceManager 接收到应用程序的提交请求后,根据调度策略为应用程序分配资源。它首先分配一个 Container 用于启动 ApplicationMaster。
3. **ApplicationMaster 启动** :
- ResourceManager 在某个节点上启动 ApplicationMaster。ApplicationMaster 负责管理应用程序的生命周期。
4. **ApplicationMaster 申请资源** :
- ApplicationMaster 向 ResourceManager 申请更多资源来运行任务。它根据应用程序的需求,动态地申请资源。
5. **NodeManager 启动任务** :
- ResourceManager 将资源分配给 ApplicationMaster。ApplicationMaster 与 NodeManager 通信,启动任务。NodeManager 在指定的 Container 中启动任务。
6. **任务运行和监控** :
- 任务在 NodeManager 上运行,ApplicationMaster 监控任务的运行状态,处理任务的失败和重试。如果某个任务失败,ApplicationMaster 会重新申请资源并重新启动任务。
7. **应用程序完成** :
- 应用程序运行完成后,ApplicationMaster 向 ResourceManager 注销,释放所有资源。
//
YARN 提供了多种资源调度策略,用于管理和分配集群中的资源。最常见的三种资源调度策略是 **FIFO Scheduler**、**Capacity Scheduler** 和 **Fair Scheduler**。它们各自的特点和作用如下:
1\. FIFO Scheduler(先进先出调度器)
**定义** :
FIFO Scheduler 是 YARN 最简单的调度策略,它按照应用程序提交的顺序进行调度。
**特点** :
- **简单直观**:按照提交顺序处理应用程序,先提交的作业先分配资源。
- **适合小规模集群**:在资源充足且作业数量较少的场景下,FIFO Scheduler 可以高效运行。
- **资源独占**:一旦某个作业开始运行,它会占用所有可用资源,直到完成。这可能导致后续提交的作业长时间等待资源。
**适用场景** :
- **单用户环境**:适用于单用户或少量用户提交作业的场景,因为资源分配不会涉及复杂的用户或队列管理。
- **小规模集群**:在资源充足且作业数量较少的集群中,FIFO Scheduler 可以高效运行。
**缺点** :
- **资源饥饿**:如果一个大型作业长时间运行,后续提交的小型作业可能会长时间等待资源,导致资源饥饿问题。
- **缺乏优先级管理**:所有作业按提交顺序处理,无法根据作业的重要性或紧急程度进行优先级调度。
2\. Capacity Scheduler(容量调度器)
**定义** :
Capacity Scheduler 是 YARN 默认的调度策略,它通过将集群资源划分为多个队列(Queue),并为每个队列分配一定的资源容量,从而实现资源的共享和隔离。
**特点** :
- **资源隔离**:每个队列都有固定的资源容量,不同队列之间的资源相互隔离,避免了资源竞争。
- **多租户支持**:支持多用户或多应用程序共享集群资源,每个用户或应用程序可以分配到一个或多个队列。
- **弹性资源分配**:在资源允许的情况下,队列可以借用其他队列的空闲资源,提高了资源利用率。
- **优先级调度**:支持作业优先级,高优先级的作业可以优先获取资源。
**适用场景** :
- **多用户环境**:适用于多个用户或多个应用程序共享集群资源的场景,可以有效隔离不同用户或应用程序之间的资源竞争。
- **大规模集群**:在资源分配复杂且需要精细管理的集群中,Capacity Scheduler 可以提供高效的资源调度和管理。
**配置示例** :
假设集群有 100 个节点,每个节点有 8GB 内存和 4 个 CPU 核心。可以将集群资源划分为两个队列:`queue1` 和 `queue2`。
- `queue1` 分配 60% 的资源(60 个节点)。
- `queue2` 分配 40% 的资源(40 个节点)。
- 如果 `queue1` 的资源未完全使用,`queue2` 可以借用空闲资源,反之亦然。
**缺点** :
- **配置复杂**:需要详细配置队列的资源容量、最大容量、最小容量等参数,配置和管理较为复杂。
- **资源碎片化**:如果队列的资源分配不合理,可能会导致资源碎片化,降低资源利用率。
3\. Fair Scheduler(公平调度器)
**定义** :
Fair Scheduler 是 YARN 的另一种调度策略,它通过动态调整资源分配,确保所有运行的作业都能公平地获得资源。
**特点** :
- **动态资源分配**:根据作业的运行时间和资源需求,动态调整资源分配,确保所有作业都能获得公平的资源份额。
- **支持多池(Pool)**:可以将作业分组到不同的池(Pool),每个池可以设置不同的资源权重,从而实现更细粒度的资源管理。
- **优先级调度**:支持作业优先级,高优先级的作业可以优先获取资源。
- **资源抢占**:如果某个作业长时间占用过多资源,Fair Scheduler 可以通过资源抢占机制,将部分资源分配给其他作业。
**适用场景** :
- **多作业环境**:适用于多个作业同时运行的场景,可以确保每个作业都能获得公平的资源份额。
- **资源利用率优化**:通过动态资源分配和资源抢占机制,可以提高集群的整体资源利用率。
**配置示例** :
假设集群有 100 个节点,可以将作业分组到两个池:`pool1` 和 `pool2`。
- `pool1` 分配 60% 的资源权重。
- `pool2` 分配 40% 的资源权重。
- 如果 `pool1` 中的作业较少,`pool2` 中的作业可以动态获得更多的资源,反之亦然。
**缺点** :
- **资源抢占可能导致任务失败**:资源抢占机制可能会导致某些作业的资源被强制回收,从而导致任务失败或重新启动。
- **配置复杂**:需要详细配置池的资源权重、优先级等参数,配置和管理较为复杂。
相关文章:
hadoop和Yarn的基本介绍
Hadoop的三大结构及各自作用? Hadoop是一个由Apache基金会开发的分布式系统基础架构,主要用于处理大规模数据集的分布式存储和计算。Hadoop的三大核心结构是HDFS(Hadoop Distributed File System)、MapReduce和YARN(Y…...
神经接口安全攻防:从技术漏洞到伦理挑战
随着脑机接口(BCI)技术的快速发展,神经接口设备已从实验室走向消费市场。然而,2025年曝光的某品牌脑机接口设备漏洞(CVE-2025-3278)引发了行业对神经数据安全的深度反思。本文围绕神经接口安全的核心矛盾&a…...
云轴科技ZStack入选中国人工智能产业发展联盟《大模型应用交付供应商名录》
2025年4月8日至9日,中国人工智能产业发展联盟(以下简称AIIA)第十四次全体会议暨人工智能赋能新型工业化深度行(南京站)在南京召开。工业和信息化部科技司副司长杜广达,中国信息通信研究院院长、中国人工智能…...
SpringBoot项目异常处理
一、异常问题描述 进行添加员工测试的时候,服务端报错, 报错信息如下: java.sql.SQLIntegrityConstraintViolationException:主要就是因为在 employee 表结构中,我们针对于username字段,建立了唯一索引,添…...
机器学习05-CNN
CNN(卷积神经网络)学习文档 一、引言 卷积神经网络(Convolutional Neural Network,CNN)是深度学习中的一种重要网络结构,在图像识别、计算机视觉等领域取得了巨大成功。CNN 的设计灵感来源于生物视觉系统…...
Java Web 之 Servlet 100问
Filter 是什么? 在Java Web开发中,Filter(过滤器)是一种用于在请求到达目标资源(如Servlet、JSP)之前或响应返回客户端之前进行预处理和后处理的组件。Filter可以拦截请求和响应,执行特定的操作…...
z-library电子图书馆最新地址的查询方法
对于喜欢读书的伙伴们,应该都听说过z站(z-library),优点多多,缺点就是地址不稳定,经常会变化网站地址。然后我最近发现了一个工具,可以不间断更新官方可用的z站地址:电子书最新地址...
PyCharm入门导览
一、项目视图 项目视图位置如下所示: 项目视图是主要工具窗口之一。它包含项目目录、SDK特定的外部库和临时文件。点击带条纹的按 钮可以预览演示项目。也可以按Alt 1 打开。 二、Python解释器 点击右下角项目的名字,可以快速进入【Python解释器】界面…...
算法题(127):最大子段和
审题: 本题需要我们找到n个整数中连续且非空的最大子段和 思路: 方法一:前缀和 我们的思路是将每个索引位置的最大子段和求出,然后用answer进行max维护,最后输出answer即可 最大子段和怎么求? 子段和 f[i]…...
物联网分层架构全解析:从感知到应用的智能生态构建
物联网分层架构一般可细分为感知层、网络层、平台层和应用层,以下是各层更详细的介绍: 一、感知层 1.功能 数据采集:利用各类传感器对物理世界的各种信息进行采集,包括环境参数(如温度、湿度、光照、气压等…...
系统架构师2025年论文通用模板
搭建自己的模板 1、项目选择与实施建议整理 一、项目选择标准 金额与周期要求:优先选择金额在 200万以上 的中大型商业项目,研发周期建议 不少于8个月。避免选择小型项目(如金额低于100万、周期短于1年)。 …...
Flink 2.0 编译
文章目录 Flink 2.0 编译第一个问题 java 版本太低maven 版本太低maven 版本太高开始编译扩展多版本jdk 配置 Flink 2.0 编译 看到Flink2.0 出来了,想去玩玩,看看怎么样,当然第一件事,就是编译代码,但是没想到这么多问…...
Java线程的几种状态
线程状态我们在此介绍六种线程状态 1.NEW 2.RUNNABLE 3.TIMED_WAITING 4.BLOCKED 5.WAITING 6.TERMINATED 1.初始状态 (NEW) 当一个线程对象被创建但尚未调用 start() 方法时,线程处于初始状态。此时,线程还没有开始执行。 通俗的讲就是安排了工作但是…...
2025年03月中国电子学会青少年软件编程(Python)等级考试试卷(一级)真题
青少年软件编程(Python)等级考试试卷(一级) 分数:100 题数:37 答案解析:https://blog.csdn.net/qq_33897084/article/details/147335019?spm1001.2014.3001.5501 一、单选题(共25题࿰…...
「数据可视化 D3系列」入门第十章:饼图绘制详解与实现
饼图绘制详解与实现 一、饼图绘制核心知识1. d3.arc() 弧形生成器2. d3.pie() 布局函数3. arc.centroid() 中心点计算4. 颜色方案 二、饼图实现代码小结核心知识点下章预告:力导向图 一、饼图绘制核心知识 1. d3.arc() 弧形生成器 功能: 生成圆形、扇形…...
三维点拟合平面ransac c++
理论 平面的一般定义 在三维空间中,一个平面可以由两个要素唯一确定: 法向量 n(a,b,c):垂直于平面的方向 平面上一点 平面上任意一点 p(x,y,z) 满足: ( p − p 0 ) ∗ n 0 (p - p0) * n 0 (p−p0)∗n0 即 a ( x − x 0 ) …...
第六章:6.6输入以下的杨辉三角形,要求输出10行
//输入以下的杨辉三角形,要求输出10行 #include<stdio.h> int main() {int a[10][10] { 0 };int i 0, j 0;for (i 0; i < 10; i){for (j 0; j < 10; j){if (j 0){a[i][j] 1;}else if (i j){a[i][j] 1;}else{a[i][j] a[i - 1][j - 1] a[i - …...
初识Redis · C++客户端string
目录 前言: string的API使用 set get: expire: NX XX: mset,mget: getrange setrange: incr decr 前言: 在前文,我们已经学习了Redis的定制化客户端怎么来的,以及如何配置好Redis定制化客户端&…...
React 事件处理基础
React 中最常见的两个需求,一个是列表渲染,另一个就是绑定点击事件。 这一篇就是从最基础的按钮点击开始,分四个阶段,逐步理解 React 中事件的写法和参数传递方式。 📍阶段一:最简单的点击事件 function A…...
插入排序和希尔排序
今天给小伙伴们分享两个比较基础的排序算法,插入排序和希尔排序,这两个排序算法之间联系还是挺多的,所以放在一起。希尔排序可以看作是插入排序的升级版,在面对一些更为复杂的场景时,希尔排序的效率往往要比插入排序高…...
Model Context Protocol (MCP) 开放协议对医疗多模态数据整合的分析路径【附代码】
Model Context Protocol (MCP) 作为一种革命性的开放协议,正在重塑医疗领域多模态数据整合的方式。本文将深入分析MCP协议在医疗多模态数据整合中的具体路径、技术实现、应用场景及未来发展方向,揭示这一协议如何成为连接AI与医疗数据的关键桥梁。 MCP协议概述及其在医疗多模…...
Oracle 11g通过dg4odbc配置dblink连接PostgreSQL
1、安装unixodbc 2、安装postgresql yum install -y postgresql17-odbc 3、配置postgresqlodbc数据源 vim /usr/local/etc/odbcinst.ini##添加如下 [mypg] Driver /usr/lib64/psqlodbcw.so Servername localhost Port 5432 Database postgres Username postgres Pas…...
docker 安装prometheus普罗米修斯
prometheus(普罗米修斯):天生为采集存储监控数据而生的时序数据库。prometheus通过各种Exporter采集到监控数据,然后存储进prometheus中,以供查询展示 grafana:一个监控仪表系统。grafana的数据来源可以有…...
Ubuntu上安装Mysql
步骤 1:安装 MySQL Server sudo apt update sudo apt install mysql-server -y这将安装最新版本的 MySQL 8.0 以及所有依赖组件。 步骤 2:检查安装是否成功 mysql --version sudo systemctl status mysql如果状态是 active (running),说明成…...
Spring Boot启动流程深度解析:从main()到应用就绪的完整旅程
🌱 Spring Boot启动流程深度解析:从main()到应用就绪的完整旅程 #SpringBoot核心 #启动原理 #自动配置 #源码解析 一、启动流程图解 (1) 启动类执行 → (2) SpringApplication初始化 → (3) 事件驱动模型启动 ↓ …...
2025TGCTF Web WP复现
AAA 偷渡阴平 <?php$tgctf2025$_GET[tgctf2025];if(!preg_match("/0|1|[3-9]|\~|\|\|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\|\|\{|\[|\]|\}|\:|\|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $tgctf2025)){//hint:你可以对着键盘…...
交叉注意力层的实质作用:连接编码器和解码器
交叉注意力层的实质作用 在Transformer架构里,交叉注意力层主要作用是连接编码器和解码器,让解码器能够利用编码器输出的上下文信息 。具体来说: 聚焦相关信息:以机器翻译任务为例,在将源语言句子翻译成目标语言时,交叉注意力能使解码器生成的每个词,都聚焦于源语言序列…...
conversation_template | conversation_actors | conversation_line_template
目录 conversation_template conversation_actors conversation_line_template 实例应用 conversation_template id:某段谈话的唯一编号FirstLineId:谈话开始的第一段话的编号,取值来源 ConversationLine.db2 的 ID 字段TextureKitId&am…...
C++ `shared_ptr` 多线程使用
C shared_ptr 多线程使用 一、核心结论 引用计数:shared_ptr 的引用计数操作是原子的,线程安全控制块修改:修改 shared_ptr 指向的对象需要同步被管理对象:若对象本身非线程安全,访问时仍需加锁 二、分场景详解 场景…...
十天借助 Trae 实现 “幸运塔塔屋” 小程序时光记忆功能之旅
在软件开发的广阔天地中,创新与效率始终是开发者们不懈追求的目标。近期,我成功完成了一次极具挑战性与创新性的实践 —— 仅用十天时间,借助 Trae 这款强大的 AI 工具,开发出了 “幸运塔塔屋” 小程序,其中的 “时光记…...
WiFi“管家”------hostapd的工作流程
目录 1. 启动与初始化 1.1 解析命令行参数 1.2 读取配置文件 1.3 创建接口和 BSS 数据结构 1.4 初始化驱动程序 2. 认证和关联处理 2.1 监听认证请求 2.2 处理认证请求 2.3 处理关联请求 3. 数据转发 3.1 接收客户端数据 3.2 转发数据 4. 断开连接处理 4.1 处理客…...
计算机视觉——基于使用 OpenCV 与 Python 实现相机标定畸变校正
概述 相机标定是一种旨在通过确定相机的内参(焦距、光学中心、畸变系数)和外参(相机的位置和方向),提高图像在现实世界中的几何精度的过程。该过程可以纠正相机拍摄的图像中的畸变,使相机能够准确感知现实…...
OOM 未触发 JVM 崩溃的可能原因
1. OOM 未触发 JVM 崩溃的可能原因 (1) 未配置 JVM 参数强制崩溃 关键参数缺失: 若未添加 -XX:CrashOnOutOfMemoryError,JVM 在 OOM 时可能仅抛出异常并正常退出,而非崩溃,因此不会生成 hs_err_pid.log。 # 正确配置示例&…...
计算机视觉cv2入门之车牌号码识别
前边我们已经讲解了使用cv2进行图像预处理与边缘检测等方面的知识,这里我们以车牌号码识别这一案例来实操一下。 大致思路 车牌号码识别的大致流程可以分为这三步:图像预处理-寻找车牌轮廓-车牌OCR识别 接下来我们按照这三步来进行讲解。 图像预处理 …...
xml+html 概述
1.什么是xml xml 是可扩展标记语言的缩写: Extensible Markup Language。 <root><h1> text 1</h1> </root> web 应用开发,需要配置 web.xml,就是个典型的 xml文件 <web-app><servlet><servlet-name&…...
C++数据结构与二叉树详解
前言: 在C编程的世界里,数据结构是构建高效程序的基石,而二叉树则是其中最优雅且应用广泛的数据结构之一。本文将带你深入理解二叉树的本质、实现与应用,助你在算法设计中游刃有余。 一、二叉树的基本概念 1. 什么是二叉树 二叉树…...
解决6栈6层码头集装箱堆栈翻箱最优解问题
‘’’ con 1 origin_stack = [ [4, 4, 1, 0, 0, 0], # 第一栈 [4, 3, 2, 1, 0, 0], # 第二栈 [4, 2, 2, 1, 0, 0], # 第三栈 [3, 3, 3, 1, 0, 0], # 第四栈 [3, 4, 2, 1, 0, 0], # 第五栈 [4, 2, 3, 2, 0, 0] # 第六栈 ] con 2 origin_stack = [ [4, 4, 3, 0, 0, 0], # 第一栈…...
Java 序列化与反序列化终极解析
Java 序列化与反序列化终极解析 1. 核心概念 (1) 什么是序列化? 定义:将对象转换为字节流的过程(对象 → 字节) 目的: 持久化存储(如保存到文件) 网络传输(如RPC调用)…...
YOLOv5、YOLOv6、YOLOv7、YOLOv8、YOLOv9、YOLOv10、YOLOv11、YOLOv12的网络结构图
文章目录 一、YOLOv5二、YOLOv6三、YOLOv7四、YOLOv8五、YOLOv9六、YOLOv10七、YOLOv11八、YOLOv12九、目标检测系列文章 本文将给出YOLO各版本(YOLOv5、YOLOv6、YOLOv7、YOLOv8、YOLOv9、YOLOv10、YOLOv11、YOLOv12)网络结构图的绘制方法及图。本文所展…...
leetcode0145. 二叉树的后序遍历-easy
1 题目:二叉树的后序遍历 官方标定难度:易 给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[3,2,1] 解释: 示例 2: 输入…...
【Leetcode 每日一题】2364. 统计坏数对的数目
问题背景 给你一个下标从 0 0 0 开始的整数数组 n u m s nums nums。如果 i < j i < j i<j 且 j − i ≠ n u m s [ j ] − n u m s [ i ] j - i \ne nums[j] - nums[i] j−inums[j]−nums[i],那么我们称 ( i , j ) (i, j) (i,j) 是一个 坏数对 。…...
完整的 .NET 6 分布式定时任务实现(Hangfire + Redis 分布式锁)
完整的 .NET 6 分布式定时任务实现(Hangfire Redis 分布式锁) 以下是完整的解决方案,包含所有必要组件: 1. 基础设施层 1.1 分布式锁服务 // IDistributedLockService.cs public interface IDistributedLockService {ValueTa…...
人脸识别联合行为检测的办公管理新模式
基于人脸识别与行为检测的办公智能化解决方案 一、背景 在传统办公场景中,员工考勤管理、工位使用情况统计、安全监控等环节存在诸多痛点。例如,传统考勤方式如指纹打卡、刷卡等存在代打卡现象,考勤数据不准确;对于员工是否在工…...
鸿蒙NEXT开发键盘工具类(ArkTs)
export declare type KeyboardCallBack (show: boolean, height: number) > void; import { AppUtil } from ./AppUtil; import { LogUtil } from ./LogUtil; import { ArrayUtil } from ./ArrayUtil;/*** 键盘工具类* author 鸿蒙布道师* since 2025/04/18*/ export class…...
Python爬虫第17节-动态渲染页面抓取之Selenium使用下篇
目录 引言 一、获取节点信息 1.1 获取属性 1.2 获取文本值 1.3 获取ID、位置、标签名、大小 二、切换Frame 三、延时等待 3.1 隐式等待 3.2 显式等待 四、前进后退 五、Cookies 六、选项卡管理 七、异常处理 引言 这一节我们继续讲解Selenium的使用下篇࿰…...
【数据结构】第四弹——LinkedList与链表
文章目录 一. ArrayList 的缺陷二.链表2.1 链表的概念及结构2.2 链表的结构2.2.1 单向或者双向2.2.2 带头或者不带头2.2.3 循环非循环 2.3 链表的实现1. IList接口2. MySingleList 类中具体实现(不带头单向非循环链表)1. 节点抽象成内部类手搓一个链表2. 头插法3. 尾插法4. 指定…...
设计模式从入门到精通之(五)观察者模式
观察者模式:实现高效事件通知的秘诀 在日常生活中,我们经常需要同步通知多方的信息变更。比如天气预报系统、股票价格波动提醒、社交媒体的点赞通知等。这些场景中,通知机制需要高效、灵活,而不会因为通知方的变化影响系统整体。 …...
chili3d调试笔记3 加入c++ 大模型对话方法 cmakelists精读
加入 #include <emscripten/bind.h> #include <emscripten/val.h> #include <nlohmann/json.hpp> 怎么加包 函数直接用emscripten::function,如: emscripten::function("send_to_llm", &send_to_llm); set (CMAKE_C…...
使用人工智能大模型kimi,如何免费制作PPT?
使用人工智能大模型kimi,如何免费制作PPT? 手把手操作视频https://edu.csdn.net/learn/40406/666573...
ModbusTCP 转 Profinet 主站网关
一、 功能概述 1.1 设备简介 本产品是 ModbusTCP 和 Profinet(M) 网关(以下简称网关),使用数据映射 方式工作。 本产品在 ModbusTCP 侧作为 ModbusTCP 从站,接 PLC 、上位机、 wincc 屏 等;在 Profin…...