MapReduce代码

WordCount

数据准备:

a.txt

lxy lxy
lxy zhang
wsoossj liagn
guui
liang
liagn

代码(在idea中创建一个Maven工程):

mapper:

package com.lxy.mr.wordcount.thi;import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;import java.io.IOException;/*** Author: Liang_Xinyu* Date: 24/05/13* Time: 18:53*/
public class WCMapper extends Mapper<LongWritable, Text,Text,LongWritable> {@Overrideprotected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, LongWritable>.Context context) throws IOException, InterruptedException {String line = value.toString();for (String word : line.split(" ")) {Text outKey = new Text();outKey.set(word);LongWritable outValue = new LongWritable();outValue.set(1);context.write(outKey,outValue);}}
}

reducer

package com.lxy.mr.wordcount.thi;import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.mapreduce.Reducer;import javax.xml.soap.Text;
import java.io.IOException;/*** Author: Liang_Xinyu* Date: 24/05/13* Time: 18:59*/
public class WCReducer extends Reducer<Text, LongWritable,Text,LongWritable> {@Overrideprotected void reduce(Text key, Iterable<LongWritable> values, Reducer<Text, LongWritable, Text, LongWritable>.Context context) throws IOException, InterruptedException {long sum = 0;for (LongWritable word : values) {long l = word.get();sum += l;}LongWritable outValue = new LongWritable();outValue.set(sum);context.write(key,outValue);}
}

driver

在本地运行的代码

就是右键运行

package com.lxy.mr.wordcount;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;/*** Author: Liang_Xinyu* Date: 24/05/13* Time: 6:25* 在本地运行*/
public class WCDriver {public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {Job job = Job.getInstance(new Configuration());//2.给Job设置参数 -- 包含mapper和reducer类//2.1关联本Driver程序的jar---本地运行的不需要设置 在集群上运行必须设置job.setJarByClass(WCDriver.class);//2.2设置Mapper和Reducer类job.setMapperClass(WCMapper.class);job.setReducerClass(WCReducer.class);//2.3设置Mapper输出的key,value的类型job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(LongWritable.class);//2.4设置最终输出的key,value的类型-在这是Reducer输出的key value的类型job.setOutputKeyClass(Text.class);job.setOutputValueClass(LongWritable.class);//2.5设置输入和输出路径//设置输入路径--数据所在的路径FileInputFormat.setInputPaths(job,new Path("D:\\io\\input"));//设置输出路径-运算的结果所放的路径-该路径一定不能存在否则报错FileOutputFormat.setOutputPath(job,new Path("D:\\io\\output"));//3.提交Job/*boolean waitForCompletion(boolean verbose)verbose : 是否打印执行的进度返回值 : 如果Job执行成功返回true否则返回false*/boolean b = job.waitForCompletion(true);System.out.println("b========" + b);}
}
在集群运行的代码
在集群上运行Job
1.修改代码 - 输入路径和输出路径从main方法读取
2.打jar包
3.将jar包放到一个有权限的目录中(我放到了家目录)
4.在HDFS上准备数据
5.运行jar包 : hadoop jar xxx.jar 全类名 参数1 参数2
6.查看hadoop103:8088 是否有Job提交
7.查看hadoop102:9870 查看结果
package com.lxy.mr.wordcount;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;/*** Author: Liang_Xinyu* Date: 24/05/14* Time: 7:45* 在HDFS上提交运行*/
public class WCDemo3 {public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {//创建Job实例Job job = Job.getInstance(new Configuration());//2.给Job设置参数 -- 包含mapper和reducer类//2.1关联本Driver程序的jar---本地运行的不需要设置 在集群上运行必须设置job.setJarByClass(WCDemo3.class);//2.2设置Mapper和Reducer类job.setMapperClass(WCMapper.class);job.setReducerClass(WCReducer.class);//2.3设置Mapper输出的key,value的类型job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(LongWritable.class);//2.4设置最终输出的key,value的类型-在这是Reducer输出的key value的类型job.setOutputKeyClass(Text.class);job.setOutputValueClass(LongWritable.class);//2.5设置输入和输出路径//设置输入路径--数据所在的路径FileInputFormat.setInputPaths(job,new Path(args[0]));FileOutputFormat.setOutputPath(job,new Path(args[1]));System.out.println("b = " + job.waitForCompletion(true));}
}

在集群运行要在VMVare WorkStation或XShell敲命令!!!

  • 先打jar包在这里插入图片描述
  • 再把jar包拖集群里
    在这里插入图片描述
  • 然后敲命令

hadoop jar xxx.jar 全类名 参数1 参数2
这是我的:hadoop jar MRDemo-1.0-SNAPSHOT.jar com.lxy.mr.wordcount.WCDemo3 /input /output
全类名这样获取:
在这里插入图片描述
我们在代码里设置的参数1和参数2分别是
集群上的输入路径和输出路径
这是输入路径
在这里插入图片描述
输出路径一定不要存在,否则会报错,空着就好
在这里插入图片描述
我在执行中遇到了ClassNotFoundException

就把代码中的类名换成全类名解决了,一般是不需要的
在这里插入图片描述

用Windows向集群提交

从本地向集群提交 – 知道即可
1.配置参数
//设置在集群运行的相关参数-设置HDFS,NAMENODE的地址
conf.set(“fs.defaultFS”, “hdfs://hadoop102:8020”);
//指定MR运行在Yarn上
conf.set(“mapreduce.framework.name”,“yarn”);
//指定MR可以在远程集群运行
conf.set(“mapreduce.app-submission.cross-platform”,“true”);
//指定yarn resourcemanager的位置
conf.set(“yarn.resourcemanager.hostname”,“hadoop103”);
2.输入路径和输出路径从main方法读取
3.打jar包
4. //注释掉下面代码
//job.setJarByClass(WCDriver3.class);
//添加如下代码 - 设置jar包路径
job.setJar(“jar包路径”);

5.在右上角点击EditConfigurations -> 左边选类名(没有先运行一次该类)右面选modify Options -> add vm options->  在 vm options的输入框中添加: -DHADOOP_USER_NAME=lxy在 program Arguments添加 :hdfs://hadoop102:8020/input hdfs://hadoop102:8020/output33
package com.lxy.mr.wordcount;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;/*** Author: Liang_Xinyu* Date: 24/05/14* Time: 1:01* 从本地向集群提交*/
public class WCDriver2 {public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {//        Job job = Job.getInstance(new Configuration());Configuration conf = new Configuration();//设置在集群运行的相关参数-设置HDFS,NAMENODE的地址conf.set("fs.defaultFS", "hdfs://hadoop102:8020");//指定MR运行在Yarn上conf.set("mapreduce.framework.name","yarn");//指定MR可以在远程集群运行conf.set("mapreduce.app-submission.cross-platform","true");//指定yarn resourcemanager的位置conf.set("yarn.resourcemanager.hostname","hadoop103");Job job = Job.getInstance(conf);//2.给Job设置参数 -- 包含mapper和reducer类//2.1关联本Driver程序的jar---本地运行的不需要设置 在集群上运行必须设置
//        job.setJarByClass(WCDriver2.class);job.setJar("D:\\words\\idea\\MRDemo\\target\\MRDemo-1.0-SNAPSHOT.jar");//2.2设置Mapper和Reducer类job.setMapperClass(WCMapper.class);job.setReducerClass(WCReducer.class);//2.3设置Mapper输出的key,value的类型job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(LongWritable.class);//2.4设置最终输出的key,value的类型-在这是Reducer输出的key value的类型job.setOutputKeyClass(Text.class);job.setOutputValueClass(LongWritable.class);//2.5设置输入和输出路径//设置输入路径--数据所在的路径 yarn:args[0]FileInputFormat.setInputPaths(job,new Path(args[0]));//设置输出路径-运算的结果所放的路径-该路径一定不能存在否则报错FileOutputFormat.setOutputPath(job,new Path(args[1]));//3.提交Job/*boolean waitForCompletion(boolean verbose)verbose : 是否打印执行的进度返回值 : 如果Job执行成功返回true否则返回false*/System.out.println("b ==== " + job.waitForCompletion(true));}
}

向集群提交的配置在这里修改:
在这里插入图片描述
在这里插入图片描述
我们之前的代码都是setJarByClass,现在是setJar,要写绝对路径,绝对路径从这里获取:
在这里插入图片描述

流量统计

数据准备

phone_data.txt

1	13736230513	192.196.100.1	www.atguigu.com	2481	24681	200
2	13846544121	192.196.100.2			264	0	200
3 	13956435636	192.196.100.3			132	1512	200
4 	13966251146	192.168.100.1			240	0	404
5 	18271575951	192.168.100.2	www.atguigu.com	1527	2106	200
6 	84188413	192.168.100.3	www.atguigu.com	4116	1432	200
7 	13590439668	192.168.100.4			1116	954	200
8 	15910133277	192.168.100.5	www.hao123.com	3156	2936	200
9 	13729199489	192.168.100.6			240	0	200
10 	13630577991	192.168.100.7	www.shouhu.com	6960	690	200
11 	15043685818	192.168.100.8	www.baidu.com	3659	3538	200
12 	15959002129	192.168.100.9	www.atguigu.com	1938	180	500
13 	13560439638	192.168.100.10			918	4938	200
14 	13470253144	192.168.100.11			180	180	200
15 	13682846555	192.168.100.12	www.qq.com	1938	2910	200
16 	13992314666	192.168.100.13	www.gaga.com	3008	3720	200
17 	13509468723	192.168.100.14	www.qinghua.com	7335	110349	404
18 	18390173782	192.168.100.15	www.sogou.com	9531	2412	200
19 	13975057813	192.168.100.16	www.baidu.com	11058	48243	200
20 	13768778790	192.168.100.17			120	120	200
21 	13568436656	192.168.100.18	www.alibaba.com	2481	24681	200
22 	13568436656	192.168.100.19			1116	954	200

FlowBean

让当前类的对象可以在Hadoop中序列化和反序列化

FlowBean这个类是一个JavaBean

Writable序列化步骤
1.自定义一个类(作为MR中的key或value)并实现Writable
2.实现write和readFields方法
3.在write方法中写序列化时要做的事情
在readFields方法中写反序列化时要做的事情
4.注意:反序列化时的顺序要和序列化时的顺序保持一致

package com.lxy.mr.exer.writable.mr01;import org.apache.hadoop.io.Writable;import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;/*** Author: Liang_Xinyu* Date: 24/05/14* Time: 7:26*/
public class FLowBean implements Writable {private long upFlow;private long downFlow;private long sumFlow;public long getUpFlow() {return upFlow;}public void setUpFlow(long upFlow) {this.upFlow = upFlow;}public long getDownFlow() {return downFlow;}public void setDownFlow(long downFlow) {this.downFlow = downFlow;}public long getSumFlow() {return sumFlow;}public void setSumFlow(long sumFlow) {this.sumFlow = sumFlow;}public FLowBean() {}public FLowBean(long upFlow, long downFlow, long sumFlow) {this.upFlow = upFlow;this.downFlow = downFlow;this.sumFlow = sumFlow;}public FLowBean(long upFlow, long downFlow) {this.upFlow = upFlow;this.downFlow = downFlow;this.sumFlow = this.getUpFlow() + this.getDownFlow();}@Overridepublic void write(DataOutput dataOutput) throws IOException {dataOutput.writeLong(downFlow);dataOutput.writeLong(upFlow);dataOutput.writeLong(sumFlow);}@Overridepublic void readFields(DataInput dataInput) throws IOException {downFlow = dataInput.readLong();upFlow = dataInput.readLong();sumFlow = dataInput.readLong();}@Overridepublic String toString() {return "FLowBean{" +"upFlow=" + upFlow +", downFlow=" + downFlow +", sumFlow=" + sumFlow +'}';}
}

Mapper

package com.lxy.mr.exer.writable.mr01;import com.lxy.mr.writable.mr01.FlowBean;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;import java.io.IOException;/*** Author: Liang_Xinyu* Date: 24/05/14* Time: 20:50*/public class FlowMapper extends Mapper<LongWritable, Text,Text, FlowBean> {@Overrideprotected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, FlowBean>.Context context) throws IOException, InterruptedException {//1.切割数据String[] info = value.toString().split("\t");//2.封装key和value (  key(13736230513)  value(2481,24681,2481+24681) )Text outKey = new Text();outKey.set(info[1]);FlowBean outValue = new FlowBean();outValue.setUpFlow(Long.parseLong(info[info.length - 3]));outValue.setDownFlow(Long.parseLong(info[info.length - 2]));outValue.setSumFlow(outValue.getUpFlow() + outValue.getDownFlow());//3.将key,value写出去context.write(outKey,outValue);}
}

Reducer

该类是在reduce阶段被ReduceTask调用 用来实现ReduceTask要实现的业务逻辑代码Reducer<KEYIN, VALUEIN, KEYOUT, VALUEOUT>第一组:KEYIN :读取的key的类型(map写出的key的类型)-在这是手机号的类型VALUEIN :读取的value的类型(map写出的value的类型)-在这是FlowBean的类型第二组:KEYOUT : 写出的key的类型-在这是手机号的类型VALUEOUT :写出的value的类型 - 在这是FlowBean的类型
package com.lxy.mr.exer.writable.mr01;import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;/*** Author: Liang_Xinyu* Date: 24/05/14* Time: 20:50*/
public class FlowReducer extends Reducer<Text, FLowBean,Text,FLowBean> {/*** 在reduce方法中用来实现需要在ReduceTask中实现的功能* reduce方法在被循环调用每调用一次传入一组数据* @param key 读取的key - 单词* @param values 放了所有的value - 单词的数量* @param context 上下文在这用来将key,value写出去* @throws IOException* @throws InterruptedException*/@Overrideprotected void reduce(Text key, Iterable<FLowBean> values, Reducer<Text, FLowBean, Text, FLowBean>.Context context) throws IOException, InterruptedException {long sumDownFlow = 0;long sumUpFlow = 0;for (FLowBean value : values) {sumUpFlow += value.getUpFlow();sumDownFlow += value.getDownFlow();}FLowBean outValue = new FLowBean(sumUpFlow, sumDownFlow);context.write(key,outValue);}
}

Driver

右键运行即可

package com.lxy.mr.exer.writable.mr01;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;/*** Author: Liang_Xinyu* Date: 24/05/14* Time: 7:27*/
public class FlowDriver{public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {//1.创建Job实例Job job = Job.getInstance(new Configuration());//2.给Job设置参数 -- 包含mapper和reducer类//2.1关联本Driver程序的jar---本地运行的不需要设置 在集群上运行必须设置job.setJarByClass(FlowDriver.class);//2.2设置Mapper和Reducer类job.setMapperClass(FlowMapper.class);job.setReducerClass(Reducer.class);//2.3设置Mapper输出的key,value的类型job.setMapOutputKeyClass(Text.class);job.setOutputValueClass(FLowBean.class);//2.4设置最终输出的key,value的类型-在这是Reducer输出的key value的类型job.setOutputKeyClass(Text.class);job.setOutputValueClass(FLowBean.class);//2.5设置输入和输出路径//设置输入路径--数据所在的路径FileInputFormat.setInputPaths(job,new Path("D:\\io\\input2"));//设置输出路径-运算的结果所放的路径-该路径一定不能存在否则报错FileOutputFormat.setOutputPath(job,new Path("D:\\io\\output2"));//3.提交Jobjob.waitForCompletion(true);}
}

结果

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【经验总结】超算互联网服务器 transformers 加载本地模型

1. 背景 使用 超算互联网 的云服务&#xff0c;不能连接外网&#xff0c;只能把模型下载到本地&#xff0c;再上传上去到云服务。 2. 模型下载 在 模型中 https://huggingface.co/models 找到所需的模型后 点击下载 config.json pytorch_model.bin vocab.txt 3. 上传模型文…

矩阵相关运算1

矩阵运算是线性代数中的一个核心部分&#xff0c;它包含了许多不同类型的操作&#xff0c;可以应用于各种科学和工程问题中。 矩阵加法和减法 矩阵加法和减法需要两个矩阵具有相同的维度。操作是逐元素进行的&#xff1a; CAB or CA−B其中 A,B 和 C 是矩阵&#xff0c;且 C…

idea控制台日志控制

1.清除控制台log日志 测试的时候&#xff0c;控制台打印的日志比较多&#xff0c;速度有点慢而且不利于查看运行结果&#xff0c;所以接下来我们把这个日志处理下: 取消初始化spring日志打印&#xff0c;resources目录下添加logback.xml&#xff0c;名称固定&#xff0c;内容如…

智能自助终端主板RK3288/RK3568在酒店前台自助机方案的应用,支持鸿蒙,支持免费定制

酒店前台自助机解决方案是一款基于自助服务终端&#xff0c;能够让客人通过简单的操作完成入住登记/退房的解决方案&#xff0c;大幅提高酒店的工作效率&#xff0c;提升客人体验&#xff0c;降低人力成本。 该方案解决了以下传统前台登记入住方式的痛点&#xff1a; 1、人流量…

过滤器Filter和拦截器Interceptor实现登录校验

一.过滤器 Filter过滤器可以把对资源的请求拦截下来&#xff0c;从而实现一些登录验证的功能 1.Filter的快速入门 1.定义Filter:定义一个类&#xff0c;实现Filter接口&#xff0c;并重写其所有方法。2.配置 public class dofilter implements Filter {Override //初始化只…

Git使用(3):版本管理

一、查看历史 编写一个java类进行测试 选择Git -> Show Git Log查看日志。 第一次修改推送到远程仓库了&#xff0c;所以有origin&#xff08;远程仓库地址&#xff09;&#xff0c;第二次修改只提交到本地仓库所以没有。 二、版本回退 1、本地回退 在要回退的版本上右键&a…

线程纵横:C++并发编程的深度解析与实践

hello &#xff01;大家好呀&#xff01; 欢迎大家来到我的Linux高性能服务器编程系列之《线程纵横&#xff1a;C并发编程的深度解析与实践》&#xff0c;在这篇文章中&#xff0c;你将会学习到C新特性&#xff0c;并发编程&#xff0c;以及其如何带来的高性能的魅力&#xff0…

linux系统修改网卡名称

说明&#xff1a; 因操作过程需要停用网卡&#xff0c;导致ssh远程连接不上&#xff0c;需要控制台登录操作。 测试环境&#xff1a; CentOS7.9、8.2虚拟机 Suse15 SP4虚拟机 操作步骤&#xff1a; 方法一&#xff1a; 1、 查看网卡当前名称及状态 ip a2、 将网卡状态从启用…

uni-app(三):离线打包与插件引用(Android)

离线打包与插件引用 1.下载Android离线SDK2.使用Android Studio打开离线打包项目并更新Gradle3.解决报错4.构建5.配置AppKeya.查看证书b.申请AppKeyc.配置AppKey 6.生成本地打包App资源7.拷贝App资源到Android项目中8.修改 appid9.修改Android项目配置文件10.下载证书并配置11.…

如何将一个流固耦合的爆炸案例修改成一个没有固体的爆炸案例(类似于blastfoam的twochargeDetonation案例,可以重点模仿这个来)

t技巧总结&#xff1a;~/myapp/OpenFOAM-7/blastfoam_2_0/tutorials/twoChargeDetonation案例对比&#xff0c;发现确实这个案例也没有固体文件夹和precice-config文件夹&#xff0c;只需要用到openfoam7与blastfoam2.0.0。&#xff08;这个案例可以当做一个很好的爆炸案例的入…

51. UE5 RPG 自定义FGameplayEffectContext

我们期望能够通过FGameplayEffectContext将此次技能造成的伤害是否触发格挡和暴击的参数传递到AttributeSet中&#xff0c;所以需要实现自定义一个FGameplayEffectContext类&#xff0c;来增加对应的配置。 创建自定义类文件 首先在Public目录上右键&#xff0c;选择添加一个…

【Flutter】极光推送配置流程(VIVO/OPPO/荣耀厂商通道) 章三

相关文章 推送配置共三篇(如下链接) 【Flutter】极光推送配置流程(极光通道/华为厂商/IOS) 章一 【Flutter】极光推送配置流程(小米厂商通道) 章二 【Flutter】极光推送配置流程(VIVO/OPPO/荣耀厂商通道) 章三 前言 很高兴大家来看小编写的文章&#xff5e;&#xff5e; 继【…

NSSCTF中的web学习(md5())

目录 MD5的学习 [BJDCTF 2020]easy_md5 [LitCTF 2023]Follow me and hack me [LitCTF 2023]Ping [SWPUCTF 2021 新生赛]easyupload3.0 [NSSCTF 2022 Spring Recruit]babyphp MD5的学习 md5()函数&#xff1a; md5($a)&#xff1a;返回a字符串的散列值 md5($a,TRUE)&…

使用XxlCrawler抓取全球航空公司ICAO三字码

目录 前言 一、数据源介绍 1、目标网站 2、页面渲染结构 二、XxlCrawler信息获取 1、创建XxlCrawler对象 2、定义PageVo对象 3、直接PageVO解析 4、自定义解析 总结 前言 长距离旅行或者出差&#xff0c;飞机一定是出行的必备方式。对于旅行达人或者出差人员而言&…

MySQL、JDBC复盘及规划

数据库仍有习题尚未做完&#xff0c;策略从一天做完改为每天5到10题&#xff0c;以此达到掌握和复习的效果&#xff0c;JDBC的六部仍需每天练习&#xff0c;从明天开始正式进行JavaWeb的学习&#xff0c;预计持续到七月中旬&#xff0c;还会完成一个书城项目&#xff0c;六月底…

API低代码平台介绍3-异构数据源的数据查询功能

异构数据源的数据查询功能 在上一篇文章中我们通过API平台定义了一个最基本的数据查询接口&#xff0c;本篇文章我们将上升难度&#xff0c;在原有接口的基础上&#xff0c;实现在MySQL数据库和Oracle数据库同时进行数据查询。   什么场景会需要同时对异构数据源进行查询&…

【C++】string类的使用③(修改器Modifiers || 非成员函数重载Non-member function overloads)

&#x1f525;个人主页&#xff1a; Forcible Bug Maker &#x1f525;专栏&#xff1a; STL || C 目录 前言&#x1f525;修改器&#xff08;Modifiers&#xff09;**operator**appendpush_back和pop_backassigninserterasereplaceswap &#x1f525;非成员函数重载&#xff…

二叉树专题(有关二叉树的相关学习)

二叉树 1.数概念及结构 1.1树的结构 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因 为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有一个特殊的结…

springcloud简单了解及上手

springcloud微服务框架简单上手 文章目录 springcloud微服务框架简单上手一、SpringCloud简单介绍1.1 单体架构1.2 分布式架构1.3 微服务 二、SpringCloud与SpringBoot的版本对应关系2022.x 分支2021.x 分支2.2.x 分支 三、Nacos注册中心3.1 认识和安装Nacos3.2 配置Nacos3.3 n…

【simulink】Scrambling 加扰

https://ww2.mathworks.cn/help/comm/ug/additive-scrambling-of-input-data-in-simulink.html 草图 simulink 代码图