浅析资源调度框架YARN

news2025/8/1 19:18:48

第一章 资源调度框架YARN理论

1.1 YARN概述

分布式操作系统

hadoop 1.x
	MapReduce
	主从架构    主节点JobTracker   从节点TaskTracker
	slot
hadoop 2.x
	MapReduce编程API + YARN
	主从架构     主节点ResourceManager  从节点NodeManager
	Container
hadoop 3.x
	Common
	HDFS   纠删码  
	MapReduce
	YARN
	MapReduce编程API + YARN

YARN(Yet Another Resource Negotiator)

Yarn 是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而 MapReduce 等运算程序则相当于运行于操作系统之上的应用程序。

有以下注意点:

1、yarn 并不清楚用户提交的程序的运行机制

2、yarn 只提供运算资源的调度(用户程序向 yarn 申请资源,yarn 就负责分配资源)

3、yarn 中的主管角色叫 ResourceManager

4、yarn 中提供运算资源的角色叫 NodeManager

5、yarn 与运行的用户程序解耦

6、MapReduce、Spark、Flink等运算框架都可以整合在 yarn 上运行

7、yarn 就成为一个通用的资源调度平台

1.2 YARN 的重要概念

1、ResourceManager

​ ResourceManager 是基于应用程序对集群资源的需求进行调度的 Yarn 集群主控节点,负责协调和管理整个集群的资源,响应用户提交的不同类型应用程序的解析,调度,监控等工作。ResourceManager 会为每一个 Application 启动一个 MRAppMaster, 并且 MRAppMaster 分散在各个 NodeManager 节点。

​ 由两个组件构成:调度器(Scheduler)和应用程序管理器(ApplicationsManager,ASM)

2、NodeManager

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

3、Container

​ Container 是一个抽象出来的逻辑资源单位。它封装了一个节点上的 CPU,内存,磁盘,网络等信息,MapReduce 程序的所有 Task都是在一个容器里执行完成的,容器大小可以动态调整。

1.3 调度器

1.3.1 FIFO(先进先出调度器)

FIFO(First In First Out先进先出调度器):单队列的,根据提交作业的先后顺序,先来先服务

在这里插入图片描述

FIFO优缺点:

优点:简单方便
缺点:不支持多队列,生产环境使用较少

1.3.2 Capacity Scheduler (容量调度器)

在这里插入图片描述

1.3.3 Fair Scheduler(公平调度器)

1、特点
在这里插入图片描述

2、缺额的概念

概念: 某一时刻一个作业应获资源和实际获取资源的差距叫缺额

公平调度器设计目标是:在时间尺度上,所有作业获得公平的资源。
调度器会优先为缺额大的作业分配资源

3、队列内部资源分配策略

1、FIFO策略
公平调度器每个队列资源分配策略可以选择FIFO,这样的话,公平调度器相当于容量调度器。
2、Fair策略
Fair 策略(默认)是一种基于公平算法实现的资源多路复用方式,默认情况下,每个队列内部采用该方式分配资源。这个时候用,如果一个队列中有两个程序运行,那么每个程序可得到1/2的资源。若是有三个应用程序同时运行,则每个应用程序可得到1/3的资源。
具体资源分配流程和容量调度器一致;
(1)选择队列
(2)选择作业
(3)选择容器
以上三步都是按照公平策略分配资源
3、DRF策略
DRF(Dominant Resource Fairness),前面说的资源,基本上都是单一标准,比如只考虑内存(这个其实就是Yarn默认的情况)。但是资源有很多种,例如内存,CPU,网络带宽,磁盘等等,这样我们很难通过单个标准来衡量两个应用应该分配的资源比例。

所以在YARN中,可以用DRF来决定多资源如何调度:
例如:集群一共有300 CPU和100T 内存,而应用1需要(3 CPU, 5TB),应用2需要(30 CPU,1TB)。则两个应用分别需要1(1%CPU, 5%内存)和2(10%CPU, 1%内存)的资源,这就意味着1是内存主导的, 2是CPU主导的,针对这种情况,可以选择DRF策略对不同应用进行不同资源(CPU和内存)的一个不同比例的限制。 

4、来个例子吧

(1)队列资源分配

root
|---queue1  40%
|---queue2  30%
|---queue3  30%
     |---Job000 7.5%
     |---Job001 7.5%
     |---Job002 7.5%
     |---Job003 7.5%
     
假设总资源是100,有三个队列queue1、queue2、queue3,对资源的需求分别为:40、30、30
第一次计算:
	100/3 = 33.333
	queue1:分到33.333 --> 实际需要40 ——> 所以少了6.666
	queue2:分到33.333 --> 实际需要30 ——> 所以多了3.333
	queue3:分到33.333 --> 实际需要30 ——> 所以多了3.333

第二次计算:
	拿多出来总数除以需要分配的队列的个数
	(3.333+3.333)/ 1 = 6.666
	queue1:分到33.333 + 6.666 --> 分到40
	queue2:分到30
	queue3:分到30

(2)队列内部Job作业资源分配

不加权的方式:

关注的是Job的个数进行分配。
示例:有一条队列总资源为20个,有4个job,对资源的需求分别为:
    job1:2
    job2:4
    job3:6
    job4:8

第一次计算:
	20/4 = 5
	job1:分到5 --> 实际需要2 ——> 所以多了3
	job2:分到5 --> 实际需要4 ——> 所以多了1
	job3:分到5 --> 实际需要6 ——> 所以少了1
	job4:分到5 --> 实际需要8 ——> 所以少了3

第二次计算:
	拿多出来总数除以需要分配的job的个数
	(3+1)/2 = 2
	job1:分到2
	job2:分到4
	job3:分到5 --> 实际需要6 ——> 所以少了1 -->再分2个-->分到7 --> 实际需要6 ——> 所以多了1
	job4:分到5 --> 实际需要8 ——> 所以少了3 -->再分2个-->分到7 --> 实际需要8 ——> 所以少了1
	
第三次计算:
	拿多出来总数除以需要分配的job的个数
	1 / 1 = 1 
	job1:分到2
	job2:分到4
	job3:分到6
	job4:分到5 --> 实际需要8 ——> 所以少了3 -->再分2个-->分到7 --> 实际需要8 ——> 所以少了1 -->再分1个 --> 分到8 (这个就是实际需要的)

加权的方式:

关注的是Job的权重进行分配
示例:有一条队列总资源为20个,有4个job,对资源的需求分别为:
    job1:2
    job2:4
    job3:6
    job4:8
	对应的权重是:
	job1:2
    job2:3
    job3:2
    job4:3

第一次计算:
	20/(2+3+2+3) = 2
	job1:分到4 --> 实际需要2 ——> 所以多了2
	job2:分到6 --> 实际需要4 ——> 所以多了2
	job3:分到4 --> 实际需要6 ——> 所以少了2
	job4:分到6 --> 实际需要8 ——> 所以少了2

第二次计算:
	拿多出来总数除以需要分配的job的个数
	(2+2)/2 = 2
	job1:分到2
	job2:分到4
	job3:分到4 --> 实际需要6 ——> 所以少了2 -->再分2个-->分到6(等于实际需要的)
	job4:分到6 --> 实际需要8 ——> 所以少了2 -->再分2个-->分到8(等于实际需要的)
	

1.4 架构图

在这里插入图片描述

1.5 作业提交流程

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 为任务设置好运行环境后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务

7、各个任务通过RPC 协议向 ApplicationMaster 汇报自己的状态和进度,以让 ApplicationMaster 随时掌握各个任务的运行状态。

8、应用程序运行完成后,AM 向 RM 注销并关闭自己。

画个图吧!!

第二章 资源调度框架YARN实践

2.1 先修改一下配置

2.1.1 修改 yarn-site.xml

运行之前先给之前的hadoop配置中的yarn-site.xml里面添加如下内容,多个节点都要加。不加在8088页面中看不到Active Nodes的个数。

<configuration>
<property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
</property>
<property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop10</value>
</property>
<property>
	<name>yarn.resourcemanager.address</name>
	<value>hadoop10:8032</value>
</property>
<property>
	<name>yarn.resourcemanager.scheduler.address</name>
	<value>hadoop10:8030</value>
</property>
<property>
	<name>yarn.resourcemanager.resource-tracker.address</name>
	<value>hadoop10:8031</value>
</property>
</configuration>

在这里插入图片描述

2.1.2 修改mapred-site.xml

下面的配置是 让MapReduce程序运行在Yarn之上 ,这个参数默认是local

<configuration>
    <property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
    </property>
</configuration>

然后在运行jar的时候,会出现问题,例如运行

[root@hadoop10 mapreduce]# hadoop jar hadoop-mapreduce-examples-3.2.2.jar pi 50 50

报错如下:

2021-09-22 19:36:51,215 INFO mapreduce.Job:  map 0% reduce 0%
2021-09-22 19:36:51,229 INFO mapreduce.Job: Job job_1632310484251_0001 failed with state FAILED due to: Application application_1632310484251_0001 failed 2 times due to AM Container for appattempt_1632310484251_0001_000002 exited with  exitCode: 1
Failing this attempt.Diagnostics: [2021-09-22 19:36:50.769]Exception from container-launch.
Container id: container_1632310484251_0001_02_000001
Exit code: 1

[2021-09-22 19:36:50.797]Container exited with a non-zero exit code 1. Error file: prelaunch.err.
Last 4096 bytes of prelaunch.err :
Last 4096 bytes of stderr :
Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster

Please check whether your etc/hadoop/mapred-site.xml contains the below configuration:
<property>
  <name>yarn.app.mapreduce.am.env</name>
  <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value>
</property>
<property>
  <name>mapreduce.map.env</name>
  <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value>
</property>
<property>
  <name>mapreduce.reduce.env</name>
  <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value>
</property>

[2021-09-22 19:36:50.797]Container exited with a non-zero exit code 1. Error file: prelaunch.err.
Last 4096 bytes of prelaunch.err :
Last 4096 bytes of stderr :
Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster

Please check whether your etc/hadoop/mapred-site.xml contains the below configuration:
<property>
  <name>yarn.app.mapreduce.am.env</name>
  <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value>
</property>
<property>
  <name>mapreduce.map.env</name>
  <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value>
</property>
<property>
  <name>mapreduce.reduce.env</name>
  <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value>
</property>

For more detailed output, check the application tracking page: http://hadoop10:8088/cluster/app/application_1632310484251_0001 Then click on links to logs of each attempt.
. Failing the application.
2021-09-22 19:36:51,247 INFO mapreduce.Job: Counters: 0
Job job_1632310484251_0001 failed!

解决方法很简单:在mapred-site.xml 增加以下配置

<property>
  <name>yarn.app.mapreduce.am.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
  <name>mapreduce.map.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
  <name>mapreduce.reduce.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>

截图如下:

在这里插入图片描述

这样就解决了上面遇到的问题了。也可以改成绝对路径。

2.2 启动YARN和历史服务器

启动命令为:

start-yarn.sh

链接为:http://hadoop10:8088/cluster

正常启动之后页面如下:
在这里插入图片描述

启动历史服务器

启动命令:

[root@hadoop10 sbin]# pwd
/software/hadoop/sbin
[root@hadoop10 sbin]# mr-jobhistory-daemon.sh start historyserver

或者使用下面的新命令:
[root@hadoop10 hadoop]# mapred --daemon start historyserver
[root@hadoop10 hadoop]# jps
15458 JobHistoryServer
15082 ResourceManager
14589 NameNode
15550 Jps
[root@hadoop10 hadoop]# 
[root@hadoop10 hadoop]# mapred --daemon stop historyserver

页面访问链接为:

http://hadoop10:19888/jobhistory

在这里插入图片描述

2.3 动手实践

2.3.1 查看任务

1、列出来所有的。

[root@hadoop10 hadoop]# yarn application -list
2021-09-22 20:02:15,689 INFO client.RMProxy: Connecting to ResourceManager at hadoop10/192.168.22.136:8032
Total number of applications (application-types: [], states: [SUBMITTED, ACCEPTED, RUNNING] and tags: []):0
                Application-Id	    Application-Name	    Application-Type	      User	     Queue	             State	       Final-State	       Progress	                       Tracking-URL
[root@hadoop10 hadoop]# 

2、根据Application状态查询:yarn application -list -appStates (所有状态:ALL、NEW、NEW_SAVING、SUBMITTED、ACCEPTED、RUNNING、FINISHED、FAILED、KILLED)

[root@hadoop10 hadoop]# yarn application -list -appStates FINISHED
2021-09-22 20:14:36,133 INFO client.RMProxy: Connecting to ResourceManager at hadoop10/192.168.22.136:8032
Total number of applications (application-types: [], states: [FINISHED] and tags: []):1
                Application-Id	    Application-Name	    Application-Type	      User	     Queue	             State	       Final-State	       Progress	                       Tracking-URL
application_1632311749018_0001	     QuasiMonteCarlo	           MAPREDUCE	      root	   default	          FINISHED	         SUCCEEDED	           100%	http://hadoop12:19888/jobhistory/job/job_1632311749018_0001
[root@hadoop10 hadoop]# 

在这里插入图片描述

2.3.2 查看日志

1、查询Application应用日志

[root@hadoop10 hadoop]# yarn logs -applicationId job_1632311749018_0001

2、查看Container容器日志

[root@hadoop10 hadoop]# yarn logs -applicationId application_1632311749018_0001 -containerId container_1632311749018_0001_01_000001

2.3.3 查看attempt的任务

1、列出所有Application尝试的列表
yarn applicationattempt -list <ApplicationId>
[root@hadoop10 hadoop]# yarn applicationattempt -list application_1632311749018_0001
2021-09-22 20:21:34,413 INFO client.RMProxy: Connecting to ResourceManager at hadoop10/192.168.22.136:8032
Total number of application attempts :1
         ApplicationAttempt-Id	               State	                    AM-Container-Id	                       Tracking-URL
appattempt_1632311749018_0001_000001	            FINISHED	container_1632311749018_0001_01_000001	http://hadoop10:8088/proxy/application_1632311749018_0001/

2、打印ApplicationAttemp状态
yarn applicationattempt -status <ApplicationAttemptId>
[root@hadoop10 hadoop]# yarn applicationattempt -status appattempt_1632311749018_0001_000001
2021-09-22 20:22:49,416 INFO client.RMProxy: Connecting to ResourceManager at hadoop10/192.168.22.136:8032
Application Attempt Report : 
	ApplicationAttempt-Id : appattempt_1632311749018_0001_000001
	State : FINISHED
	AMContainer : container_1632311749018_0001_01_000001
	Tracking-URL : http://hadoop10:8088/proxy/application_1632311749018_0001/
	RPC Port : 45512
	AM Host : hadoop12
	Diagnostics : 
[root@hadoop10 hadoop]# 

2.3.4 查看容器

1、列出所有Container
yarn container -list <ApplicationAttemptId>
[root@hadoop10 hadoop]# yarn container -list appattempt_1632311749018_0001_000001
2021-09-22 20:28:43,314 INFO client.RMProxy: Connecting to ResourceManager at hadoop10/192.168.22.136:8032
Total number of containers :0
                  Container-Id	          Start Time	         Finish Time	               State	                Host	   Node Http Address	                            LOG-URL
2、打印Container状态
yarn container -status <ContainerId>
[root@hadoop10 hadoop]# yarn container -status container_1632311749018_0001_01_000001
2021-09-22 20:29:03,732 INFO client.RMProxy: Connecting to ResourceManager at hadoop10/192.168.22.136:8032
Container with id 'container_1632311749018_0001_01_000001' doesn't exist in RM or Timeline Server.

注意:只有任务在跑的过程中才能看到container的状态

2.3.5 队列相关

1、打印默认队列信息
[root@hadoop10 hadoop]# yarn rmadmin -refreshQueues
2021-09-22 20:30:56,914 INFO client.RMProxy: Connecting to ResourceManager at hadoop10/192.168.22.136:8033
[root@hadoop10 hadoop]# yarn queue -status default
2021-09-22 20:31:46,890 INFO client.RMProxy: Connecting to ResourceManager at hadoop10/192.168.22.136:8032
Queue Information : 
Queue Name : default
	State : RUNNING
	Capacity : 100.00%
	Current Capacity : .00%
	Maximum Capacity : 100.00%
	Default Node Label expression : <DEFAULT_PARTITION>
	Accessible Node Labels : *
	Preemption : disabled
	Intra-queue Preemption : disabled

2、加载更新队列信息
[root@hadoop10 hadoop]# yarn rmadmin -refreshQueues
2021-09-22 20:32:15,068 INFO client.RMProxy: Connecting to ResourceManager at hadoop10/192.168.22.136:8033

2.3.6 查看节点状态

[root@hadoop10 hadoop]# yarn node -list -all
2021-09-22 20:33:19,077 INFO client.RMProxy: Connecting to ResourceManager at hadoop10/192.168.22.136:8032
Total Nodes:2
         Node-Id	     Node-State	Node-Http-Address	Number-of-Running-Containers
  hadoop11:41778	        RUNNING	    hadoop11:8042	                           0
  hadoop12:37299	        RUNNING	    hadoop12:8042	                           0
[root@hadoop10 hadoop]# 

在这里插入图片描述



声明:
        文章中代码及相关语句为自己根据相应理解编写,文章中出现的相关图片为自己实践中的截图和相关技术对应的图片,若有相关异议,请联系删除。感谢。转载请注明出处,感谢。


By luoyepiaoxue2014

微博地址: http://weibo.com/luoyepiaoxue2014 点击打开链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/35085.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于升级高德地图导航9.5.0的问题 ‘com.amap.api:navi-3dmap:9.5.0_3dmap9.5.0‘

最近打开项目&#xff0c;发现高德有新版本更新&#xff0c;果断更新。哈哈哈哈。然而结果好像并没有这么简单。要是世界上什么事情这么简单就好了。年轻人。还是太年轻了啊。 然后更新完最新的依赖 /*高德地图远程依赖*/implementation com.amap.api:navi-3dmap:9.5.0_3dmap9…

I/O 设备(输入/输出设备)

文章目录I/O 设备输入设备输出设备1&#xff0c;显示器2&#xff0c;打印机3&#xff0c;投影仪I/O 设备 输入设备 借助计算机的输入设备&#xff0c;用户能够轻松地将数据或者指令传递给计算机。同时&#xff0c;计算机中的 CPU 会接收用户输入的指令或数据&#xff0c;并对…

Tesla M40 下Ubuntu anaconda pycharm pytorch安装

显卡&#xff1a;Tesla M40 24GB (2张&#xff09; 显卡驱动版本(推荐)&#xff1a;470.57.02 cuda版本&#xff1a;11.4 安装前需要&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;禁用nouveau驱动&#xff01;&#xff01;&#xff01;&#xff01;&#x…

矢量网络分析仪的S11和S12参数是什么呢?

矢量网络分析仪的基础功能是S参数测试。所谓S参数&#xff0c;就是散射参数&#xff0c;是描述电磁波在被测设备的入射波量、反射波量以及波量传输特性的参数。简单理解&#xff1a;S11代表端口1的反射&#xff0c;S22代表端口2的反射&#xff0c;S21是端口1至端口2的传输&…

阿里云安装软件:jdk11

命令下载 1. 安装准备 检查系统jdk版本 java -version检查jdk自带安装包 rpm -qa | grep java卸载jdk yum -y remove tzdata-java.noarch如果有就卸载&#xff0c;卸载的包名通过&#xff08;rpm -qa | grep java&#xff09;获取&#xff0c;包名要全部输入 rpm -e --nodeps …

Kotlin基础认知 - 为何Kotlin文件有的带.kt后缀,有的不带?

有一天看到项目中的Kotlin类&#xff0c;有的有.kt后缀&#xff0c;有的没有&#xff0c;针对这个情况我就简单看了下&#xff0c;然后记录一波 创建 Kotlin Class 或 Kotlin File创建Kotlin class创建Kotlin File俩者区别展现形式外部展现内部展现延伸扩展、对向转换Class无后…

【Silvaco example】Temperature Ramping - Effect on Leakage

1、例子讲解 本示例演示了Atlas中任何device的全局温度梯度&#xff08;global temperature ramping&#xff09;的正确方法。 &#xff08;1&#xff09;结构定义 为了简单起见&#xff0c;这里选择了二极管结构。 go atlasmeshx.mesh loc0.00 spac0.05 x.mesh loc0.10 sp…

简单手段发IF=7+文章:磷酸三苯酯对鲤鱼的毒性作用及肠道微生物群落影响

研究背景 磷酸三苯基酯&#xff08;TPHP&#xff09;是一种有机磷阻燃剂&#xff0c;它通过挥发以及溶解分散到环境中&#xff0c;并通过食物链富集生物体&#xff0c;对生态系统产生不可避免的负面影响。已发现TPHP可以引起组织病变&#xff0c;干扰脂质代谢&#xff0c;并降…

全新营销时代,金融企业如何有“种”有“收”?

贯穿2022年的主题&#xff0c;就是“不确定性”。 复杂的大环境下&#xff0c;金融行业的发展饱受“震荡”。疫情、通胀&#xff0c;乃至二级市场的风云变幻&#xff0c;都在考验金融企业经营的确定性。那么&#xff0c;金融企业踏平波动、坚定前行的力量从何而来&#xff1f;…

Spring Boot 简介及快速搭建

Spring Boot 简介及快速搭建 springboot的优点&#xff1a; –快速构建一个独立的 Spring 应用程序 &#xff1b; –嵌入的 Tomcat 、 Jetty 或者 Undertow&#xff0c;无须部署 WAR 文件&#xff1b; –提供starter POMs来简化Maven配置和减少版本冲突所带来的问题&#xff1…

Vue3 setup函数的使用

全新的 setup 函数 在开始编写 Vue 组件之前&#xff0c;需要了解两个全新的前置知识点&#xff1a; 全新的 setup 函数&#xff0c;关系到组件的生命周期和渲染等问题 写 TypeScript 组件离不开的 defineComponent API setup 的含义 Vue 3 的 Composition API 系列里&#x…

计算机网络---应用层概述

&#xff08;一&#xff09;应用层概述 基本定义&#xff1a; 应用层&#xff08;Application layer&#xff09;是OSI模型的第七层。应用层直接和应用程序接口并提供常见的网络应用服务。应用层也向表示层发出请求。应用层是开放系统的最高层,是直接为应用进程提供服务的。其…

数据可视化设计经验分享:10分钟做出炫酷数据大屏

又快到年终了&#xff0c;数据大屏作为一个数据管理的分析工具&#xff0c;在年底数据大屏的制作需求日益增加。在一些公司比如银行、证券、医院、外贸等“数据大户”&#xff0c;在数据大屏的应用上更是有大量需求。 在接下来的两个月&#xff0c;许多人会感到痛苦吧&#xf…

.net---继承和多态

继承和多态继承和多态的基本概念继承继承的类型实现继承接口继承继承派生类base关键字构造函数的调用类成员的继承类成员的隐藏继承&#xff1a;虚方法和隐藏方法抽象类和抽象方法抽象类抽象方法密封类和密封方法密封类接口接口成员接口实现多态重载重写继承和多态的基本概念 …

NIO中ByteBuffer

// Invariants: mark < position < limit < capacityprivate int mark -1;private int position 0;private int limit;private int capacity; 从源码中可以看出&#xff0c;ByteBuffer的几个实例变量。我们稍后会详细解析这几个变量的意义。 在我们刚创建ByteBuff…

绿色积分消费时代来临,共享购跟随国家的号召

近年来&#xff0c;中国共享经济商业模式不断发展成熟。自2016年国家“十三五”规划纲要首次提出“共享经济”概念以来&#xff0c;中国政府不断助推共享经济发展。最新发布的《共享经济指导原则与基本框架》为共享经济作出定义&#xff1a;共享经济即“资源供给者通过平台与资…

IDEA配置Maven

1. IDEA配置Maven环境 先在IDEA中配置Maven环境&#xff1a; 选择 IDEA中 File --> Settings 搜索 maven 设置 IDEA 使用本地安装的 Maven&#xff0c;并修改配置文件路径 2. IDEA 创建 Maven项目 创建模块 创建模块&#xff0c;选择Maven&#xff0c;点击Next 填写模块名称…

你不知道的Spring的依赖的查找和注入的来源

1.写在前面 前面的博客我们已经介绍完了spring的依赖的查找和注入的方式&#xff0c;这篇博客我们主要介绍下spring的依赖的查找和注入的来源。 2.依赖查找的来源 查找来源 Spring 內建 BeanDefintion Spring 內建单例对象 上面的各种依赖都是在spring的生命周期的过程中&am…

干掉可恶的弹窗广告——windows系统

一、背景 许多国产软件为了生计&#xff0c;内嵌了无数广告。有些弹窗广告是可以在软件的设置里关闭的&#xff0c;但有些是流氓类型&#xff0c;无法设置。 1、有些是右下角弹窗&#xff0c;不提供关闭的设置&#xff08;能在图片上显示广告来源已经是比较良心了&#xff09…

金融机器学习:数据集划分与baseline模型

原创文章第115篇&#xff0c;专注“个人成长与财富自由、世界运作的逻辑&#xff0c; AI量化投资”。 在模型训练过程中&#xff0c;过拟合&#xff08;overfitting&#xff09;是非常常见的现象。所谓的overfitting&#xff0c;就是在训练集上表现很好&#xff0c;但是测试集…