当前位置: 首页 > news >正文

深入MapReduce——从MRv1到Yarn

引入

我们前面篇章有提到,和MapReduce的论文不太一样。在Hadoop1.0实现里,每一个MapReduce的任务并没有一个独立的master进程,而是直接让调度系统承担了所有的worker 的master 的角色,这就是Hadoop1.0里的 JobTracker。在Hadoop1.0里,MapReduce论文里面的worker就是TaskTracker,用来执行map 和 reduce的任务。而分配任务,以及和TaskTracker沟通任务的执行情况,都由单一的JobTracker 来负责。

这样实现的好处是比较简单,相对的,导致了JobTracker的负载过重,成为了整个Hadoop 系统“瓶颈”。在Hadoop 2.0,Hadoop社区把JobTracker的角色,拆分成了进行任务调度的Resource Mananger,以及监控单个MapReduce任务执行的Application Master,回到了和MapReduce论文相同的架构。

Hadoop 能有今天这个地位,Yarn可以说是功不可没。因为有了 Yarn ,更多计算框架可以接入到 HDFS 中,而不单单是 MapReduce,MapReduce 早已经被 Spark 等计算框架赶超,而 HDFS 却依然屹立不倒。究其原因,正式因为 Yarn 的包容,使得其他计算框架能专注于计算性能的提升。HDFS 可能不是最优秀的大数据存储系统,但却是应用最广泛的大数据存储系统,Yarn 功不可没。

今天我们来看看关于Yarn的涉及与实现。

Yarn

Yarn是“Yet Another Resource Negotiator”的缩写,字面意思就是“另一种资源调度器”。

事实上,在Hadoop社区决定将资源管理从Hadoop 1中分离出来,独立开发Yarn的时候,业界已经有一些大数据资源管理产品了,比如Mesos等,所以Yarn的开发者索性管自己的产品叫“另一种资源调度器”。这种命名方法并不鲜见,曾经名噪一时的Java项目编译工具Ant就是“Another Neat Tool”的缩写,意思是“另一种整理工具”。

YARN的基本设计思想是将JobTracker拆分成两个独立的服务:一个全局的资源管理器ResourceManager和每个应用程序特有的ApplicationMaster。其中,ResourceManager负责整个系统的资源管理和分配,而ApplicationMaster则负责单个应用程序的管理。

架构设计

YARN总体上仍然是master/slave结构。在整个资源管理框架中,ResourceManager为master,NodeManager为slave,ResourceManager负责对各个NodeManager上的资源进行统一管理和调度。

当用户提交一个应用程序时,需要提供一个用于跟踪和管理这个程序的ApplicationMaster。它负责向ResourceManager申请资源,并要求NodeManager启动可以占用一定资源的任务。由于不同的ApplicationMaster分布在不同的节点上,因此它们之间不会相互影响。

核心组件

ResourceManager

整个系统有且只有一个 ResourceManager ,它是基于应用程序对集群资源的需求进行调度的 Yarn 集群主控节点,负责协调和管理整个集群的资源,处理客户端请求、启动/监控ApplicationMaster、监控NodeManager、资源分配与调度。

它包含了两个主要的组件:调用器(Scheduler)以及应用管理器(ApplicationsManager,ASM)

调度器(Scheduler)

调度器根据容量、队列等限制条件(如每个队列分配一定的资源,最多执行一定数量的作业等),将系统中的资源分配给各个正在运行的应用程序。

从本质上来说,定时调度器就是一个资源分配算法(或者说是一种策略)。当 Client 提交一个任务的时候,它会根据所需要的资源以及当前集群的资源状况进行分配。

注意:

它只负责向应用程序分配资源,并不负责监控或者跟踪应用的执行状态等,也不负责重新启动因应用执行失败或者硬件故障而产生的失败任务。

调度器被设计成一个可插拔的组件,用户可根据自己的需要设计新的调度器,YARN提供了多种直接可用的调度器,比如Fair SchedulerCapacity Scheduler等。

应用管理器(ApplicationsManager)

应用程序管理器负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重新启动它等。

具体职责包括:

  1. 应用程序提交

    • 接收客户端提交的应用程序请求。

    • 验证应用程序的配置和资源请求。

  2. 资源分配

    • 根据集群的资源情况和调度策略,分配资源给各个应用程序。

    • 启动应用程序的第一个容器,即 ApplicationMaster 容器。

  3. 监控应用程序

    • 监控应用程序的运行状态。

    • 处理应用程序的完成、失败和重试等情况。

  4. 维护应用程序队列:管理应用程序队列,确保资源分配的公平性和高效性。

ApplicationMaster(AM)

AM是每个应用程序的专属组件,负责管理该应用程序的具体执行。用户提交的每个应用程序在启动时都会有一个独立的 AM。

它实际上是一个简化版的JobTracker,主要功能包括:

  • 与RM调度器协商以获取资源。

  • 与NM通信以启动/停止任务。

  • 监控所有任务的运行状态,并在任务运行失败时重新为任务申请资源以重启任务。

ApplicationMaster负责数据切分、为应用程序申请资源,并分配给内部任务、任务监控与容错 每当 Client 提交一个 Application 时候,就会新建一个 ApplicationMaster 。由这个ApplicationMaster 去与 ResourceManager 申请容器资源,获得资源后会将要运行的程序发送到容器上启动,然后进行分布式计算。(也就是所谓的移动计算)

具体职责包括:

  1. 资源请求

    • 向 ResourceManager 请求资源,以运行应用程序的任务。

    • 根据应用程序的需求,动态调整资源请求。

  2. 任务调度和监控

    • 将获得的资源分配给具体的任务(Task)。

    • 启动和监控任务的执行,处理任务的失败和重试。

  3. 任务协调

    • 协调应用程序的所有任务,确保任务按计划执行。

    • 收集任务的执行结果,并进行必要的合并和处理。

  4. 状态报告

    • 向 ResourceManager 报告应用程序的运行状态和进度。

    • 在应用程序完成时,通知 ResourceManager 释放资源。

ASM和AM的区别

  • ApplicationsManager(ResourceManager 的一部分);
  • 管理整个集群中的应用程序生命周期;
  • 负责资源分配、应用程序提交和监控;     
  • 启动 ApplicationMaster 容器。

ApplicationMaster:    

  • 每个应用程序的专属组件,管理该应用程序的具体执行;
  • 负责资源请求、任务调度和监控、任务协调和状态报告;    
  • 动态调整资源请求,确保应用程序的高效执行。

总结:ApplicationsManager 负责全局资源管理和调度,而 ApplicationMaster 负责具体应用程序的执行和协调。

NodeManager

NM是每个节点上的资源和任务管理器。

  • 它会定时地向RM汇报本节点上的资源使用情况和各个Container的运行状态;

  • 它接收并处理来自AM的任务启动/停止等各种请求。

NodeManager 是 YARN 集群当中真正资源的提供者,是真正执行应用程序的容器的提供者, 监控应用程序的资源使用情况,并通过心跳向集群资源调度器 ResourceManager 进行汇报,处理来自ResourceManager和ApplicationMaster的命令。

Container

Container是YARN中的资源分配单位,它封装了多维度的资源,如内存、CPU、磁盘、网络等。当AM向RM申请资源时,RM为AM返回的资源便是用Container表示的。YARN中每个任务均会对应一个Container,且该任务只能在该Container中执行,并仅能使用该容器代表的资源量。需要注意的是,Container不同于MRv 1中的slot,它是一个动态资源划分单位,是根据应用程序的需求动态生成的。

Container 是一个抽象出来的逻辑资源单位。它对任务运行环境的抽象,封装了内存、CPU、磁盘、网络等多维资源以及环境变量、启动命令等任务运行相关的信息,当AM向RM申请资源时,RM为AM返回的资源便是用Container表示的。

  • 由 NodeManager 启动和管理,并被它所监控。
  • 被 ResourceManager 进行调度。

YARN中每个任务均会对应一个Container,且该任务只能在该Container中执行,并仅能使用该Container代表的资源量。

注意:Container不同于MRv1中的slot,它是一个动态资源划分单位,是根据应用程序的需求动态生成的。

Container是 Yarn 对资源做的一层抽象。就像我们平时开发过程中,经常需要对底层一些东西进行封装,只提供给上层一个调用接口一样,Yarn 对资源的管理也是用到了这种思想。 Yarn 将CPU核数,内存这些计算资源都封装成为一个个Container。

Job提交流程

当用户向YARN中提交一个应用程序后,YARN将分两个阶段运行该应用程序:

  • 第一个阶段是启动ApplicationMaster;

  • 第二个阶段是由ApplicationMaster创建应用程序,为它申请资源,并监控它的整个运行过程,直到运行成功。

流程概述

  1. 用户向 YARN 中提交应用程序,其中包括 ApplicationMaster 程序,启动 ApplicationMaster 的命令,用户程序等

  2. ResourceManager 为该程序分配第一个 Container,并与对应的 NodeManager 通讯,要求它在这个 Container 中启动应用程序 ApplicationMaster

  3. ApplicationMaster 首先向 ResourceManager注册,这样用户可以直接通过 ResourceManager 查看应用程序的运行状态,然后将为各个任务申请资源,并监控它的运行状态,直到运行结束,重复 4 到 7 的步骤

  4. ApplicationMaster 采用轮询的方式通过 RPC 协议向 ResourceManager 申请和领取资源

  5. 一旦 ApplicationMaster 申请到资源后,便与对应的 NodeManager 通讯,要求它启动任务

  6. NodeManager为任务设置好运行环境(包括环境变量、jar包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。

  7. 各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。
    在应用程序运行的过程中,用户可随时通过RPC协议向ApplicationMaster查询应用程序的当前运行状态。

  8. 应用程序运行完成后,ApplicationMaster 向 ResourceManager 注销并关闭自己。

关于Yarn的RPC

在YARN中,任何两个需相互通信的组件之间仅有一个RPC协议,而对于任何一个RPC协议,通信双方有一端是Client,另一端为Server,且Client总是主动连接Server,因此,YARN实际上采用的是拉式(pull-based)通信模型,主要有以下几个RPC协议:

  • Client与RM之间的协议—ClientRMProtocol:Client通过该RPC协议提交应用程序,查询应用程序状态等。
  • Administrator与RM之间的通信协议—RMAdminProtocol:Administrator通过该RPC协议更新系统配置文件,比如节点黑白名单、用户队列权限等。
  • AM与RM之间的协议—AMRMProtocol:Job AM通过该RPC协议向RM注册和撤销自己,并为各个任务申请资源。
  • AM与NM之间的协议—ContainerManager:AM通过该RPC协议要求NM启动或者停止Container,获取各个Container的使用状态等信息。
  • NM与RM之间的协议—ResourceTracker:NM通过该RPC协议向RM注册,并定时发送心跳信息汇报当前节点的资源使用情况和Container运行情况。

注意:

为了提高Hadoop的向后兼容性和不同版本之间的兼容性,YARN中的序列化框架采用了Google开源的Protocol Buffers。

关于RPC可以看这篇文章。

调度策略

Hadoop作业调度器主要有三种:FIFO、Capacity Scheduler和Fair Scheduler。

Yarn中FIFO、Capacity、Fair三种资源调度器区别对比如下:

Yarn资源调度器

特点

适用场景

FIFO调度器

1)简单易懂,无需额外配置。
2)应用按照提交的先后顺序(先进先出)运行。
3)不适合共享集群,每个应用必须等待直到轮到自己运行。

非共享集群,对任务执行顺序要求不高的场景。生产环境一般不用。

Capacity调度器(开源Yarn默认使用)

1)允许多个组织共享集群资源,每个组织拥有专门的队列。
2)支持队列的层次划分,以及队列资源的灵活配置。
3)可以限制队列的最大容量,缓解资源竞争。

共享集群的场景,多个组织或团队共享同一集群资源的情况。

Fair调度器(CDH默认使用)

1)公平地为所有运行的应用分配资源,支持多个队列间的资源公平共享。
2)支持动态创建队列,并通过一套规则系统确定应用的放置位置。
3)支持资源的抢占功能,确保资源的公平分配。

1) 多个用户或组织在共享集群中需要公平地获得资源的场景。
2) 对队列级别的资源控制和细粒度调度策略要求较高的环境。

Hadoop2.x默认的资源调度器是Capacity Scheduler。(可以查看yarn-default.xml)

FIFO调度器(First-In-Fist-Out Scheduler)

Yarn中最简单的调度器。FIFO Scheduler 会将提交的应用程序按提交顺序放入一个先进先出的队列中,进行资源分配时,先给队列中最头上的应用分配资源,待头上的应用资源需求满足后再给下一个应用分配资源,以此类推。这种调度器调度资源时,有可能某个资源需求大的应用占用所有集群资源,从而导致其他的应用被阻塞。

FIFO调度器只支持单队列,先进队列的任务先获取资源,排在后面的任务只能等待,不能同时保证其他任务获取运行资源,这种调度器很少使用。

Capacity调度器(Capacity Schduler)

Yarn中默认配置的资源调度器,允许多租户安全地共享一个大型集群。Capacity调度器中,支持配置多个资源队列,可以为每个资源队列指定最低、最高可使用的资源比例,在进行资源分配时,优先将空闲资源分配给“实际资源/预算资源”比值最低的队列,每个资源队列内部采用FIFO调度策略。

Capacity调度器的核心思想是提前做预算,在预算指导下分享集群资源。其特点如下:

  • 支持多租户共享集群,通过配置可以限制每个用户使用的资源比例。
  • 集群资源由多个资源队列分享。
  • 每个队列需要预先配置资源分配比例(最低、最高使用的资源比例),即事先规划好预算比例。
  • 空闲资源优先分配给“实际资源/预算资源”比值最低的队列。
  • 每个队列内部任务采用FIFO调度策略。
  • 如果一个资源队列中资源有剩余,可以共享给其他需要资源的队列,但一旦该资源队列有任务提交运行,共享给其他资源队列的资源会及时回收供该资源队列使用。

Capacity资源分配策略

Capacity Scheduler调度器中如果有多个资源队列,这些个资源队列进行资源分配时优先分配给“实际资源/预算资源”比值最低的队列。每个队列中有多个Job,给每个队列内的多个Job进行资源分配时,默认按照Job的FIFO顺序进行资源分配,用户也可以提交JOB时指定任务执行的优先级,优先级最高的先分配资源。

Fair调度器(Fair Scheduler)

一个将Yarn资源公平的分配给各个Application的资源调度方式,这种调度方式可以使所有Application随着时间的流逝可以获取相等的资源份额,其设计目标就是根据定义的参数为所有的Application分配公平的资源。

FairScheduler资源调度核心思想就是通过资源平分的方式,动态分配资源,无需预先设定资源比例,实现资源分配公平,其特点如下:

  • 支持多租户共享集群。(与Capacity调度器一样)
  • 集群资源由多个资源队列分享。(与Capacity调度器一样)
  • 如果一个资源队列中资源有剩余,可以共享给其他需要资源的队列,但一旦该资源队列有任务提交运行,共享给其他资源队列的资源会及时回收供该资源队列使用。(与Capacity调度器一样)
  • 可以设置队列最小资源,允许将最小份额资源分配给资源队列,保证该资源队列可以启动任务。
  • 默认情况允许所有Application程序运行,也可以限制每个资源队列中同时运行Application的数量。
  • 根据Appliation的配置,抢占和分配资源可以是友好的或者强制的,默认不启用资源抢占。

Fair资源分配策略

Fair Scheduler支持多资源队列,每个资源队列进行资源调度时按照配置指定的权重平均分配资源。在每个资源队列中job的资源调度策略有三种选择:FIFO、Fair(默认)、DRF,这三种Job调度策略解释如下。

  • FIFO:Job按照先进先出进行资源调度,如果该队列中有多个Job,第一个Job分配完资源后,还有资源供第二个Job运行,那么可能存在多个Job并行运行的情况。这种情况下与Capacity调度器一样。
  • Fair:FairScheduler中每个资源队列默认资源调度策略,只基于内存调度分配资源,按照不同Job的使用内存比例平均分配资源。
  • DRF:基于vcores和内调度分配资源。

备注:DFR(Dominant Resource Fairness,主导资源公平性)。

在Yarn中如果进行资源调度时只考虑单一资源类型,如内存,那么这个事情就很简单,只需要将不同资源队列/Job按它们使用的内存量比例进行调度资源即可,FIFO/Fair就是只基于内存进行资源调度分配。然而当涉及多个资源类型时,情况就变得复杂,例如:一个用户的Application需要大量的CPU但使用很少内存,而另一个用户的Application需要很少的CPU但大量的内存,这里不能仅考虑内存比值来进行资源调度分配,否则可能出现资源分配不合理情况,这种情况除了内存之外还要考虑Application的Vcore使用情况,这就可以使用DRF资源分配策略。

DRF(Dominant Resource Fairness,资源分配策略中,会查看每个Application中主导资源(Dominant Resource)是什么,并将其作为集群调度资源的衡量标准。例如:yarn集群中共100个CPU和10TB内存,应用程序A请求容器(2个CPU,300GB内存),应用程序B请求容器(6个CPU,100GB内存)。A的请求是集群的(2%,3%),所以内存是主导资源,B的请求是集群的(6%,1%),所以CPU是主导资源,由于B程序的容器请求主要资源是A程序容器请求主要资源的2倍(6%/3%=2),所以在DRF资源分配策略下,B程序最大可使用在集群2/3资源。

总结

今天梳理了关于Yarn的核心设计与实现,由于要回老家过年了,笔记本不太方便捋源码,MR和Yarn的深入源码分析文章就暂时延后到年后回来再写。

我们目前见识了很多大数据技术的设计与实现,会发现有很多类似的设计,甚至可以用“新瓶装旧酒”来形容。无论大数据技术如何变化,不变的是那些凝结了人类历史知识和经验的技术精华,过年这几天我会专门开一个基础专题系列,让我们重点看一下这些技术精华是什么。

最后,提前祝大家新年快乐🎉🎉🎉

相关文章:

深入MapReduce——从MRv1到Yarn

引入 我们前面篇章有提到,和MapReduce的论文不太一样。在Hadoop1.0实现里,每一个MapReduce的任务并没有一个独立的master进程,而是直接让调度系统承担了所有的worker 的master 的角色,这就是Hadoop1.0里的 JobTracker。在Hadoop1…...

线段树 算法

文章目录 基础知识适用场景小结 题目概述题目详解300.最长递增子序列2407.最长递增子序列 II 基础知识 线段树和树状数组都只是一个工具来的,题目并不会一下子就告诉你这个题目用到线段树和树状数组,这个取决于你想使用的数据结构以及所要优化的方向 线…...

Redis实战(黑马点评)——redis存储地理信息、位图、HyperLogLog 用法

Redis存储geo数据类型基本介绍 geo 就是 geolocation 的简写形式,代表地理坐标。redis 在 3.2 版本中加入了对 geo 的支持,允许存储地理坐标信息,帮助我们根据经纬度来检索数据。常见的命令有: geoadd:添加一个地理空…...

Flutter_学习记录_基本组件的使用记录

1.TextWidge的常用属性 1.1TextAlign: 文本对齐属性 常用的样式有: TextAlign.center 居中TextAlign.left 左对齐TextAlign.right 有对齐 使用案例: body: Center(child: Text(开启 TextWidget 的旅程吧,珠珠, 开启 TextWidget 的旅程吧&a…...

C语言实现统计数组正负元素相关数据

在编程的世界里,对数组中元素的统计分析是常见的需求。今天,我们就来探讨一段用C语言实现的代码,它能统计数组中负数的个数以及正数的平均值。 代码功能概述 这段C语言代码的主要功能是:首先从用户处获取一个整数 n ,用…...

AJAX RSS Reader:技术解析与应用场景

AJAX RSS Reader:技术解析与应用场景 引言 随着互联网的快速发展,信息量呈爆炸式增长。为了方便用户快速获取感兴趣的信息,RSS(Really Simple Syndication)技术应运而生。AJAX RSS Reader作为一种基于AJAX技术的信息读取工具,在用户体验和信息获取方面具有显著优势。本…...

使用openwrt搭建ipsec隧道

背景:最近同事遇到了个ipsec问题,做的ipsec特性,ftp下载ipv6性能只有100kb, 正面定位该问题也蛮久了,项目没有用openwrt, 不过用了开源组件strongswan, 加密算法这些也是内核自带的,想着开源的不太可能有问题&#xff…...

将5分钟安装Thingsboard 脚本升级到 3.9

稍微花了一点时间,将5分钟安装Thingsboard 脚本升级到最新版本 3.9。 [rootlab5 work]# cat one-thingsboard.shell echo "test on RHEL 8.10 " source /work/java/install-java.shell source /work/thingsboard/thingsboard-rpm.shell source /work/po…...

Linux---架构概览

一、Linux 架构分层的深度解析 1. 用户空间(User Space) 用户空间是应用程序运行的环境,与内核空间隔离,确保系统稳定性。 应用程序层: 用户程序:如 edge、vim,通过调用标准库(如 …...

dnf妖气追踪找门方案

第一种 跟之前一样还是确定boss的 位置,但是妖气追踪有几个boss位置重复的思路就是分两大类第一类就是boss位置不一样的,第二类在boss位置一样的大类 下面再分一一个小类, 这个小类就是boss位置重复的下面判断 第一个门蓝色人的位置 来确定后面门的路线还有一种情况就是在选择…...

【C语言练习题】整数和实数在计算机中的二进制表示

1. 请写出下列十进制整数在计算机中的二进制存储形式(假设为16位整数): 32767: -1: 32768: -2: 答案: 0111111111111111 1111111111111111 1000000000000000 1111111111111110 解…...

OSCP:Windows 服务提权详解

在Windows操作系统中,服务是一种特殊的后台进程,它们通常以较高的权限(如 SYSTEM 或 Administrator)运行。攻击者可以通过控制服务的创建、配置或运行过程实现权限提升(提权)。本文将详细分析Windows服务提…...

寻找两个正序数组的中位数:分治法与二分查找的结合

寻找两个正序数组的中位数:分治法与二分查找的结合 在算法领域,“寻找两个正序数组的中位数” 是一道经典的高频面试题(LeetCode 第 4 题)。它不仅考察基本的数组操作,还涉及二分查找与分治思想的结合。今天&#xff…...

Python-基于PyQt5,json和playsound的通用闹钟

前言:刚刚结束2024年秋季学期的学习,接下来我们继续来学习PyQt5。由于之前我们已经学习了PyQt5以及PyUIC,Pyrcc和QtDesigner的安装,配置。所以接下来我们一起深入PyQt5,学习如何利用PyQt5进行实际开发-基于PyQt5,json和…...

51单片机开发:定时器中断

目标:利用定时器中断,每隔1s开启/熄灭LED1灯。 外部中断结构图如下图所示,要使用定时器中断T0,须开启TE0、ET0。: 系统中断号如下图所示:定时器0的中断号为1。 定时器0的工作方式1原理图如下图所示&#x…...

循序渐进kubernetes-RBAC(Role-Based Access Control)

文章目录 概要Kubernetes API了解 Kubernetes 中的 RBACRoles and Role Bindings:ClusterRoles and ClusterRoleBindings检查访问权限:外部用户结论 概要 Kubernetes 是容器化应用的强大引擎,但仅仅关注部署和扩展远远不够,集群的安全同样至…...

在Scene里面绘制编辑工具

功能要求 策划要在scene模式下编辑棋子摆放。用handle.GUI绘制来解决了。 问题 在scene模式下编辑产生的数据,进入游戏模式后就全不见了。改为executeAlways也没用。我的解决办法是把编辑数据序列化保存到本地。在OnEnable的时候再读取。但是我忽然想到&#xff…...

深入探索 Vue 3 Markdown 编辑器:高级功能与实现

目录 1. 为什么选择 Markdown 编辑器?2. 选择合适的 Markdown 编辑器3. 安装与基本配置安装 配置 Markdown 编辑器代码说明 4. 高级功能实现4.1 实时预览与双向绑定4.2 插入图片和图像上传安装图像上传插件配置图像上传插件 4.3 数学公式支持安装 KaTeX配置 KaTeX 插…...

动手学图神经网络(3):利用图神经网络进行节点分类 从理论到实践

利用图神经网络进行节点分类:从理论到实践 前言 在之前的学习中,大家对图神经网络有了初步的了解。本次教程将深入探讨如何运用图神经网络(GNNs)来解决节点分类问题。在节点分类任务里,大家往往仅掌握少量节点的真实标签,却要推断出其余所有节点的标签,这属于归纳式学…...

具身智能研究报告

参考: (1)GTC大会&Figure:“具身智能”奇点已至 (2)2024中国具身智能创投报告 (3)2024年具身智能产业发展研究报告 (4)具身智能行业深度:发展…...

LabVIEW春节快乐

尊敬的LabVIEW开发者与用户朋友们: 灵蛇舞动辞旧岁,春风送暖贺新年!值此癸巳蛇年新春佳节来临之际,向每一位深耕LabVIEW开发领域的伙伴致以最诚挚的祝福:愿您与家人在新的一年里平安顺遂、阖家幸福,事业如…...

MybatisX插件快速创建项目

一、安装插件 二、创建一个数据表测试 三、IDEA连接Mysql数据库 四、选择MybatiX构造器 五、配置参数 六、项目结构...

技术周总结 01.13~01.19 周日(Spring Visual Studio git)

文章目录 一、01.14 周二1.1)问题01:Spring的org.springframework.statemachine.StateMachine 是什么,怎么使用?:如何使用StateMachine: 1.2)问题02:Spring StateMachine 提供了一系列高级特性 …...

【C++】List的模拟实现

文章目录 1.ListNode 结构体2.List成员变量与typedef3.迭代器iterator4.begin()、end()、size()、empty()、构造函数5. insert()、erase()6.push_back()、pop_back()、push_front()、pop_front()7.拷贝构造、赋值、析构8.总代码 以后有时间会更新其它成员函数 1.ListNode 结构…...

剑指 Offer II 002. 二进制加法

comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20002.%20%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%8A%A0%E6%B3%95/README.md 剑指 Offer II 002. 二进制加法 题目描述 给定两个 01 字符串 a 和 b ,请计算…...

(15)基于状态方程的单相自耦变压器建模仿真

1. 引言 2. 单相降压自耦变压器的状态方程 3. 单相降压自耦变压器的simulink仿真模型 4. 实例仿真 5. 总结 1. 引言 自耦变压器的原边和副边之间存在直接的电气连接,所以功率是通过感应和传导从原边转移到副边的,这与双绕组变压器不同,后者的原边和副边是电气隔离的。从…...

03.01、三合一

03.01、[简单] 三合一 1、题目描述 三合一。描述如何只用一个数组来实现三个栈。 你应该实现push(stackNum, value)、pop(stackNum)、isEmpty(stackNum)、peek(stackNum)方法。stackNum表示栈下标,value表示压入的值。 构造函数会传入一个stackSize参数&#xf…...

.git/hooks/post-merge 文件的作用

.git/hooks/post-merge 文件是 Git 版本控制系统中的一个钩子(hook)脚本,其作用是在合并(merge)操作完成后自动执行一些特定的操作。以下是关于 .git/hooks/post-merge 文件作用的详细解释: 作用 自动化任…...

SpringBoot项目创建

一、创建新的工程 二、配置pom.xml文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http…...

评估训练模型所需的算力

1.模型规模(核心因素) 1.1 参数量决定算力下限: 10亿参数模型:需约1-10 PetaFLOP/s-days(等效1万亿次浮点运算持续1天) 千亿参数(如GPT-3):约3,000-5,000 PetaFLOP/s-days 万亿参数模型:超过50,000 PetaFLOP/s-days 1.2 显存需求公式: 显存(GB) ≈ (参数量 20 by…...

Tez 0.10.1安装

个人博客地址&#xff1a;Tez 0.10.1安装 | 一张假钞的真实世界 具体安装步骤参照官网安装手册即可。此处只对官网手册进行补充。 从官网下载apache-tez-0.10.1-bin.tar.gz进行安装未成功&#xff0c;出现下面的异常。最终按照官网源代码编译的方式安装测试成功。 环境 Had…...

代码随想录算法训练营第三十八天-动态规划-完全背包-139.单词拆分

类似于回溯算法中的拆分回文串题目是要求拆分字符串&#xff0c;问这些字符串是否出现在字典里。但这道题可以反着来考虑&#xff0c;从字典中的单词能不能组成所给定的字符串 如果这样考虑&#xff0c; 这个字符串就背包&#xff0c;容器字典中的单词就是一个一个物品问题就转…...

selenium clear()方法清除文本框内容

在使用Selenium进行Web自动化测试时&#xff0c;清除文本框内容是一个常见的需求。这可以通过多种方式实现&#xff0c;取决于你使用的是哪种编程语言&#xff08;如Python、Java等&#xff09;以及你的具体需求。以下是一些常见的方法&#xff1a; 1. 使用clear()方法 clear…...

新增文章功能

总说 过程参考黑马程序员SpringBoot3Vue3全套视频教程&#xff0c;springbootvue企业级全栈开发从基础、实战到面试一套通关_哔哩哔哩_bilibili 之前又偷懒几天。回老家没事干&#xff0c;玩也玩不好&#xff0c;一玩老是被家里人说。写代码吧还是&#xff0c;他们都看不懂&a…...

【设计测试用例自动化测试性能测试 实战篇】

&#x1f308;个人主页&#xff1a;努力学编程’ ⛅个人推荐&#xff1a; c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构&#xff0c;刷题刻不容缓&#xff1a;点击一起刷题 &#x1f319;心灵鸡汤&#xff1a;总有人要赢&#xff0c;为什么不能是我呢 设计测试用例…...

【算法与数据结构】动态规划

目录 基本概念 最长递增子序列&#xff08;中等&#xff09; 最大子数组和&#xff08;中等&#xff09; 基本概念 重叠子问题 一个问题可以被分解为多个子问题&#xff0c;并且这些子问题在求解过程中会被多次重复计算。例如&#xff0c;在计算斐波那契数列时&#xff0c;…...

扣子平台音频功能:让声音也能“智能”起来。扣子免费系列教程(14)

在数字化时代&#xff0c;音频内容的重要性不言而喻。无论是在线课程、有声读物&#xff0c;还是各种多媒体应用&#xff0c;音频都是传递信息、增强体验的关键元素。扣子平台的音频功能&#xff0c;为开发者和内容创作者提供了一个强大而灵活的工具&#xff0c;让音频的使用和…...

【CS61A 2024秋】Python入门课,全过程记录P4(Week7 Generators开始,更新于2025/1/29)

文章目录 关于基本介绍&#x1f44b;新的问题更好的解决方案Week7Mon Generators阅读材料Lab 05: Iterators, MutabilityQ1: WWPD: List-MutationQ2: Insert Items 关于 个人博客&#xff0c;里面偶尔更新&#xff0c;最近比较忙。发一些总结的帖子和思考。 江湖有缘相见&…...

JUC--ConcurrentHashMap底层原理

ConcurrentHashMap底层原理 ConcurrentHashMapJDK1.7底层结构线程安全底层具体实现 JDK1.8底层结构线程安全底层具体实现 总结JDK 1.7 和 JDK 1.8实现有什么不同&#xff1f;ConcurrentHashMap 中的 CAS 应用 ConcurrentHashMap ConcurrentHashMap 是一种线程安全的高效Map集合…...

【Linux网络编程】网络层说明

目录 前言&#xff1a; 1&#xff0c;网络层介绍 2&#xff0c;IP协议 3&#xff0c;IP协议的格式 4&#xff0c;网段划分 5&#xff0c;特殊的IP地址 6&#xff0c;私有IP地址和公网IP地址 前言&#xff1a; 网络层对于程序员来说不太重要&#xff0c;这方面知识大致了…...

002-基于Halcon的图像几何变换

本节将简要介绍Halcon中有关图像几何变换的基本算子及其应用&#xff0c;主要涉及五种常见的二维几何变换形式&#xff1a;平移、镜像、旋转、错切和放缩。这几种变换可归结为一类更高级更抽象的空间变换类型&#xff0c;即仿射变换&#xff08;Affine transformation&#xff…...

unity学习22:Application类其他功能

目录 1 是否允许后台运行 1.1 Application.runInBackground&#xff0c;显示是否允许后台运行 1.2 设置的地方 2 打开URL 2.1 Application.OpenURL("") 打开超链接 3 退出游戏 3.1 Application.Quit() 退出游戏 4 场景相关 5 返回游戏状态 6 控制游戏的行…...

配置cursor进行Java springboot项目开发

本文用于记录如何配置cursor进行Java SpringBoot项目开发&#xff0c;因为项目团队同事基本都是在使用idea开发工具&#xff0c;所以在尝试cursor新ide的时候发现还是有一些小坑要处理一下的。 首先为了后续在多个不同的java项目之间进行切换的时候不想翻来覆去的总配置指定jdk…...

ChirpIoT技术的优势以及局限性

ChirpIoT是一种由上海磐启微电子开发的国产无线射频通讯技术&#xff0c;ChirpIoT技术基于磐启多年对雷达等线性扩频信号的深入研究&#xff0c;并在此基础上对线性扩频信号的变化进行了改进&#xff0c;实现了远距离传输的一种无线通信技术。相关产品型号有E29-400T22D、E290-…...

ODP(OBProxy)路由初探

OBProxy路由策略 Primary Zone 路由 官方声明默认情况&#xff0c;会将租户请求发送到租户的 primary zone 所在的机器上&#xff0c;通过 Primary Zone 路由可以尽量发往主副本&#xff0c;方便快速寻找 Leader 副本。另外&#xff0c;设置primary zone 也会在一定成都上减少…...

【25考研】人大计算机考研复试该怎么准备?有哪些注意事项?

人大毕竟是老牌985&#xff0c;复试难度不会太低&#xff01;建议同学认真复习&#xff01;没有机试还是轻松一些的&#xff01; 一、复试内容 由公告可见&#xff0c;复试包含笔试及面试&#xff0c;没有机试&#xff01; 二、参考书目 官方无给出参考书目&#xff0c;可参照…...

阿里云域名备案

一、下载阿里云App 手机应用商店搜索"阿里云",点击安装。 二、登录阿里云账号 三、打开"ICP备案" 点击"运维"页面的"ICP备案"。 四、点击"新增网站/App" 若无备案信息,则先新增备案信息。 五、开始备案...

实现基础的shell程序

1. 实现一个基础的 shell 程序&#xff0c;主要完成两个命令的功能 cp 和 ls 1.1.1. cp 命令主要实现&#xff1a; ⽂件复制⽬录复制 1.1.2. ls 命令主要实现&#xff1a; ls -l 命令的功能 1.1. 在框架设计上&#xff0c;采⽤模块化设计思想&#xff0c;并具备⼀定的可扩…...

yolov5错误更改与相关参数详解(train.py)

1.错误更改 main中相关参数 if __name__ __main__:parser argparse.ArgumentParser()parser.add_argument(--weights, typestr, default, helpinitial weights path)parser.add_argument(--cfg, typestr, defaultmodels/yolov5s.yaml, helpmodel.yaml path)parser.add_arg…...

(详细)Springboot 整合动态多数据源 这里有mysql(分为master 和 slave) 和oracle,根据不同路径适配不同数据源

文章目录 Springboot 整合多动态数据源 这里有mysql&#xff08;分为master 和 slave&#xff09; 和oracle1. 引入相关的依赖2. 创建相关配置文件3. 在相关目录下进行编码&#xff0c;不同路径会使用不同数据源 Springboot 整合多动态数据源 这里有mysql&#xff08;分为maste…...