maperuce运算框架

2023-05-16

1,概念
    
mapreduce 运算框架主要实现hadoop 的数据处理,数据处理中 流经过5个节点。
    数据流:input -> spilt -> map -> shuffle -> reduce(最后reduce输出)
    1.1,input:是将被运算的数据切成默认64M的快(block),方便后续运算。
    1.2,split:切片,将 input 中的快按照行切成片(键值对),方便后续 map 运算。
    1.3,map(开发):
             对 split 的片(行)进行数据处理,处理成键值对。
             workcount map 数据处理:将每行拆分成每一个单词作为输出键,个数设置为1 作为输出值
    1.4,shuffle:
             将所有的 map 运算结果都重新按照键分组,输出键值对。
             wordcount 中 shuffle 将 map 的相同键的数据合并成一条,值是一个固定值为1的数组。
    1.5,reduce(开发):
             将shuffle 的结果集做数据处理。
             wordcount 的数据处理:将键对应的值(值为1的数字)做累加,既得出我们的每个单词出现个数。
    1.6,输出(output)


    
 

2,maprecue 开发
      准备工作:
          1)新建 Map/Reduce Project 项目 new -> project -> Map/Reduce Project :wordcountdemo
          2)增加配置文件 core-site.xml,log4j.xml
                新建 resource 文件夹放入配置文件:项目 -> new -> Source Folder
          3)新建一个class WordCountJob(开发 map,开发 reduce,)               

package org.kgc1803.demo;

import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

/**
 * 词频
 * @author hduser
 *
 */
public class WordCountJob  {
	/**
	 * 开发 map
	 * @author hduser
	 * 第一个参数:map 输入键的类型
	 * 第二个参数:map 输入值的类型
	 * 第三个参数:map 输出键的类型
	 * 第四个参数:map 输出值的类型
	 */
	public static class WordCountMapper extends Mapper<Object, Text, Text, IntWritable>{
		/**
		 * 每一个切片会执行一次map方法
		 * wordcount map 把 malue 拆分成单个单词
		 * keyIn:是每一行的键
		 * valueIn:是每一行的值
		 * context:是上下文容器,用于将 map 的结果输出到下一步
		 * @throws InterruptedException 
		 * @throws IOException 
		 */
		public void map(Object keyIn,Text valueIn,Context context) throws IOException, InterruptedException{
			//固定值1,作为输出值
			IntWritable valueOut = new IntWritable(1);
			Text keyOut = null;
			//按空格,逗号,~~ 拆分
			StringTokenizer token = new StringTokenizer(valueIn.toString());
			//按照迭代器用法使用
			while(token.hasMoreTokens()){
				String key = token.nextToken();
				keyOut = new Text(key);
				context.write(keyOut, valueOut);
			}
		}
	}
	
	//开发reduce
	public static class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable>{
		public void reduce(Text keyIn,Iterable<IntWritable> valuesIn,Context context) throws IOException, InterruptedException{
			Text keyOut = keyIn;
			//输出值
			IntWritable valueOut = new IntWritable();
			int sum = 0;
			//循环混洗后的数字数组,如[1.1.1.1.1]
			for(IntWritable val:valuesIn){
				sum += val.get(); //做累加
			}
			//将累加的结果转化为IntWritable
			valueOut.set(sum);
			//输出到下一步
			context.write(keyOut, valueOut);
		}
	}
	public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException{
		//创建job 执行 job
		//加载 hdfs 配置文件(配置 hdfs 访问入口)
		Configuration conf = new Configuration();
		//创建一个 job 并设置 job(运算作业)的主启动类
		Job job = Job.getInstance(conf);
		job.setJarByClass(WordCountJob.class);
		//设置 job 的 map 自定义静态类
		job.setMapperClass(WordCountMapper.class);
		//设置 job 的 reduce 自定义静态类
		job.setReducerClass(WordCountReducer.class);
		
		//配置最终输出(reduce)的输出键和值的类型
		job.setOutputKeyClass(Text.class);
		job.setOutputValueClass(IntWritable.class);
		
		//mapreduce 作业需要的资源位置(总输入位置)
		Path inputPath1 = new Path("hdfs://node1:9000/input/zsc/*.txt");
		//Path inputPath2 = new Path("hdfs://node1:9000/input/zsc/2.txt");
		FileInputFormat.addInputPath(job, inputPath1);
		//FileInputFormat.addInputPath(job, inputPath2);
		//mapreduce 作业结果的保存位置(总输出位置)
		Path outputPath = new Path("hdfs://node1:9000/output/wc7");
		FileOutputFormat.setOutputPath(job, outputPath);
		
		//启动
		System.exit(job.waitForCompletion(true)?0:1);
	}
}


2.1,map 开发
    map要求:    
        1)静态类
        2)继承 hadoop 的 Mapper 父类
        3)重写 map() 方法
2.2,reduce 开发
    reduce  要求:
        1)静态类
        2)继承 hadoop 的 Reducer 父类
        3)重写 reduce() 方法

2.3,创建并启动 job
      1)加载 hdfs 配置文件(配置 hdfs 访问入口)
      2)创建一个 job 并设置 job(运算作业)的主启动类
      3)设置 job 的 map 自定义静态类
      4)设置 job 的 reduce 自定义静态类
      5)配置最终输出(reduce)的输出键和值的类型
      6)mapreduce 作业需要的资源位置(总输入位置)
      7)mapreduce 作业结果的保存位置(总输出位置)
      8)启动
 

3,hdfs 的数据类型
    1)字符串 Text,等同于 java 中的字符串,在hdfs 中Text类型是字节文件
         Text -> String:
         Text  t 转换成 String: t.toString();
         String -> Text:
         Text  t = new Text(字符串);
     2)整型数字 IntWriteable,等同于 java 的 Integer
         IntWriteable转 int:
              IntWriteable a;
              int b = a.get();
         int 转 IntWriteable:
              IntWriteable a = new IntWriteable(数字);
              或
              IntWriteable a =new IntWriteable();
              a.set(数字);
     3)长整型 LongWritable ,等同于java 的 Long

4,mapreduce 优化
    1,小项目
          音乐排行榜播放记录数据格式:
  

记录id记录id播放时间歌手
1001music120180101sing1
1002music220180301sing2
1003music320180211sing1
1004music220180709sing2
1005music220180621sing2
1006music120180511sing1


          统计信息:
    1)如:

歌名播放次数
music12
music23
music31

     2)按照播放次数降序来显示步骤1的统计信息

歌名播放次数
music2    3
music1        2
music3        1

   2,排序
      2.1,概念
          mapreduce 的排序指的主要用于 mapreduce 中 key 的排序,默认按照 key升序排序,排序主要用于最终输出之前。
      2.2,实现排序
          2.2.1,定义一个排序类
              1)定义一个静态排序类,继承需要的排序父类(我们样例使用的是数字排序父类)
              2)重写排序父类中的核心方法    

//排序,继承整型的排序
public static class MusicCountDesc extends IntWritable.Comparator{
	//重写两个排序
	public int compare(Object a,Object b){
		//对比,默认是升序,- 取反
		return -super.compare(a, b);
	}
		
	public int compare(byte[] b1,int s1,int l1,byte[] b2,int s2,int l2){
		return -super.compare(b1, s1, l1, b2, s2, l2);
	}
}


          2.2.2,配置排序类到job

//排序不用默认排序而是用我们自定义的排序类
scjob.setSortComparatorClass(MusicCountDesc.class);


   3,SequenceFileOutputFormat 和 SequenceFileInputFormat
      3.1,SequenceFileOutputFormat
          主要用于 mapreduce 最终输出阶段 设置 输出的格式类型为SequenceFile 类型(字节对象型),类似于      ObjectOutputStream(对象输出流)
      3.2,SequenceFileInputFormat
           主要用于 mapreduce 录入的数据是 SequenceFile 类型,该类型数据必须设置 job 的 inputFormat 为SequenceFileInputFormat。
    4,Combiner(合并)
       4.1,概念:
           map处理后的数据直接混洗,网络成本太大,如有1亿条数据,就需要将处理过的这1亿数据都传输给混洗节点。如果将map 处理后的数据做一下合并后,总数据量就会少很多,节省了网络开支。
       4.2,语法:

//一般配置的都是reduce处理类
job.setCombinerClass(WordCountReducer.class);  


     5,Partitioner(分区)
        5.1,概念
            mapreduce job 混洗的数据交给 reduce task(任务),默认只有一个分区,所以只有一个 reduce task,一个 reduce task 产生一个输出文件。reduce 之前分区
        5.2,语法
           1)定义一个静态分区类

//分区
public static class MyPartitioner extends Partitioner<IntWritable, Text>{	
	public int getPartition(IntWritable key, Text arg1, int arg2) {
		//key 值>=2
		if(key.get() >= 2){
			return 0;
		}else {
			return 1;
		}
	}		
}

           2)将自定义的静态分区类配置给job
           3)设置 job 的 reduce task数量(即有几个分区)

//配置分区
scjob.setPartitionerClass(MyPartitioner.class);
//设置 reduce 数量
scjob.setNumReduceTasks(2);


     6,job 和 task
          一个job(作业)-> 多个map task(任务)-> shuffle -> reduce 
          每一个 reduce 一个输出文件

     7,优化总代码如下:

package org.kgc1803.demo;

import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Partitioner;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.SequenceFileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat;
public class WordCount {
	/**
	 * 开发 map
	 * @author hduser
	 * 第一个参数:map 输入键的类型
	 * 第二个参数:map 输入值的类型
	 * 第三个参数:map 输出键的类型
	 * 第四个参数:map 输出值的类型
	 */
	public static class CountMapper extends Mapper<Object, Text, Text, IntWritable>{
		/**
		 * 每一个切片会执行一次map方法
		 * wordcount map 把 malue 拆分成单个单词
		 * keyIn:是每一行的键
		 * valueIn:是每一行的值
		 * context:是上下文容器,用于将 map 的结果输出到下一步
		 * @throws InterruptedException 
		 * @throws IOException 
		 */
		int count = 0;
		public void map(Object keyIn,Text valueIn,Context context) throws IOException, InterruptedException{
			//固定值1,作为输出值
			IntWritable valueOut = new IntWritable(1);
			Text keyOut = null;
			//按空格,逗号,~~ 拆分
			StringTokenizer token = new StringTokenizer(valueIn.toString());
			//按照迭代器用法使用
//			while(token.hasMoreTokens()){
//				String key = token.nextToken();
//				keyOut = new Text(key);
//				context.write(keyOut, valueOut);
//			}		
			String[] str =  valueIn.toString().split("\\s+");
			if(str.length>=3 && count>0){
				context.write(new Text(str[1]), valueOut);
			}
			count++;
		}
	}
	
	//开发reduce
	public static class CountReducer extends Reducer<Text, IntWritable, Text, IntWritable>{
		public void reduce(Text keyIn,Iterable<IntWritable> valuesIn,Context context) throws IOException, InterruptedException{
			Text keyOut = keyIn;
			//输出值
			IntWritable valueOut = new IntWritable();
			int sum = 0;
			//循环混洗后的数字数组,如[1.1.1.1.1]
			for(IntWritable val:valuesIn){
				sum += val.get(); //做累加
			}
			//将累加的结果转化为IntWritable
			valueOut.set(sum);
			//输出到下一步
			context.write(keyOut, valueOut);
		}
	}
	
	//反转键值
	public static class SoutMusicMapper extends Mapper<Text, IntWritable , IntWritable, Text>{
		public void map(Text keyIn,IntWritable valueIn,Context context) throws IOException, InterruptedException{
			context.write(valueIn, keyIn);
		}
	}
	
	//排序,继承整型的排序
	public static class MusicCountDesc extends IntWritable.Comparator{
		//重写两个排序
		public int compare(Object a,Object b){
			//对比,默认是升序,- 取反
			return -super.compare(a, b);
		}
		
		public int compare(byte[] b1,int s1,int l1,byte[] b2,int s2,int l2){
			return -super.compare(b1, s1, l1, b2, s2, l2);
		}
	}
	
	//分区
	public static class MyPartitioner extends Partitioner<IntWritable, Text>{	
		public int getPartition(IntWritable key, Text arg1, int arg2) {
			//key 值>=2
			if(key.get() >= 2){
				return 0;
			}else {
				return 1;
			}
		}		
	}
	
	public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException{
		//创建job 执行 job
		//加载 hdfs 配置文件(配置 hdfs 访问入口)
		Configuration conf = new Configuration();
		//创建一个 job 并设置 job(运算作业)的主启动类
		Job job = Job.getInstance(conf);
		job.setJarByClass(WordCount.class);
		//设置 job 的 map 自定义静态类
		job.setMapperClass(CountMapper.class);
		//设置 job 的 reduce 自定义静态类
		job.setReducerClass(CountReducer.class);
		
		//配置最终输出(reduce)的输出键和值的类型
		job.setOutputKeyClass(Text.class);
		job.setOutputValueClass(IntWritable.class);
		
		//配置combin
		job.setCombinerClass(CountReducer.class);
		//配置分区
		//job.setPartitionerClass(MyPartitioner.class);
		
		//mapreduce 作业需要的资源位置(总输入位置)
		Path inputPath1 = new Path("hdfs://node1:9000/input/zsc/3.txt");
		//Path inputPath2 = new Path("hdfs://node1:9000/input/zsc/2.txt");
		FileInputFormat.addInputPath(job, inputPath1);
		//FileInputFormat.addInputPath(job, inputPath2);
		//mapreduce 作业结果的保存位置(总输出位置)
		Path outputPath = new Path("hdfs://node1:9000/output/wc5");
		if(FileSystem.get(conf).exists(outputPath)){
			FileSystem.get(conf).delete(outputPath,true);
		}
		FileOutputFormat.setOutputPath(job, outputPath);
		
		//设置输出内容是sequence 类似与 对象输出流
		job.setOutputFormatClass(SequenceFileOutputFormat.class);
		
		//启动
		//System.exit(job.waitForCompletion(true)?0:1);
		if(job.waitForCompletion(true)){
			//创建一个 job 并设置 job(运算作业)的主启动类
			Job scjob = Job.getInstance(conf);
			scjob.setJarByClass(WordCount.class);
			//设置 job 的 map 自定义静态类
			scjob.setMapperClass(SoutMusicMapper.class);
			scjob.setInputFormatClass(SequenceFileInputFormat.class);
			
			//配置最终输出(reduce)的输出键和值的类型
			scjob.setOutputKeyClass(IntWritable.class);
			scjob.setOutputValueClass(Text.class);
			
			//mapreduce 作业需要的资源位置(总输入位置)
			FileInputFormat.addInputPath(scjob, outputPath);
			//mapreduce 作业结果的保存位置(总输出位置)
			Path outputPath1 = new Path("hdfs://node1:9000/output/wc4");
			if(FileSystem.get(conf).exists(outputPath1)){
				FileSystem.get(conf).delete(outputPath1,true);
			}
			FileOutputFormat.setOutputPath(scjob, outputPath1);
			
			//排序不用默认排序而是用我们自定义的排序类
			scjob.setSortComparatorClass(MusicCountDesc.class);
			
			//配置分区
			scjob.setPartitionerClass(MyPartitioner.class);
			//设置 reduce 数量
			scjob.setNumReduceTasks(2);
			
			System.exit(scjob.waitForCompletion(true)?0:1);
		}
	}
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

maperuce运算框架 的相关文章

  • STL的多线程安全问题

    1 stl的线程安全 说一些关于stl容器的线程安全相关的话题 一般说来 xff0c stl对于多线程的支持仅限于下列两点 xff1a 貌似Effective STL中有描述 1 多个读取者是安全的 即多个线程可以同时读取一个容器中的内容
  • 树莓派安装docker,Go语言。附VNC软件安装重启后,进入白屏登录界面的解决方案

    树莓派安装docker xff0c Go语言 附VNC软件安装重启后 xff0c 进入白屏登录界面的解决方案 背景 xff1a 课题要使用hyperledger xff0c 在ARM上应用 涉及到docker xff0c go语言 之后会包
  • 黑马程序员C++课程笔记二(模板、STL)

    笔记 C 43 43 模板 STL学习笔记 代码地址 xff1a 程序文件名与课程P一致 文章目录 笔记 C 43 43 模板 STL学习笔记1 模板1 1 模板的概念1 2 函数模板1 2 1 函数模板语法1 2 2 函数模板注意事项1
  • Nano板使用USB与PX4通信

    环境配置 USB micro与PX4通信 文章目录 环境配置 USB micro与PX4通信1 硬件接线2 软件环境 最近项目需要PX4与记载电脑通信 xff0c 查了下资料目前方案有 1 使用TELEM2串口的 xff0c 阿木的就是使用
  • 在Win下Visual Studio配置Eigen

    在Win下Visual Studio配置Eigen 最近在使用Visual Studio时想使用一下著名的矩阵运算库 xff1a Eigen xff0c 摸索了一下如何在Visual Studio中配置 1 下载Eigen源码 直接到Eig
  • AirSim中运行VIO算法(VINS-Mono)

    VINS Mono在AirSim上跑通 文章目录 VINS Mono在AirSim上跑通一 IMU参数配置二 相机参数设置三 AirSim发布数据问题 关于相机 IMU内外参的完整解释 xff0c 可以参考我的另一篇文章 一 IMU参数配置
  • AirSim中获取视觉、惯性数据方法研究

    AirSim中获取视觉 惯性数据方法研究 文章目录 AirSim中获取视觉 惯性数据方法研究1 获取ROS bag格式数据2 获取文件形式 EuRoc数据集格式 3 其他方案 最近在做AirSim中部署V SLAM xff0c 抽空将之前尝
  • 如何引用开源库(BibTex转为endnote)方法

    前言 xff1a 我们在写论文时 xff0c 论文的工作有时可能会用到别人的开源算法库 xff0c 那么我们如何在参考文献中引用呢 以Ceres库为例 xff0c 该库是谷歌开发的一款求解非线性优化问题的库 xff0c 相信做SLAM相关的
  • 关于MAC 安装 laravel4 的一些经验 二

    unix 和windows 完全不同 xff0c 只好恶补了一些UNIX的知识 xff0c 找到了 profie 这个是隐藏文件 xff0c 在find里面找不到的 接下来只能自己配置PHP环境或者下载其他软件 我下载了XAMPP xff0
  • AirSim相机、IMU内外参分析(VIO、vSLAM)

    作者 朱贞欣 xff0c 公ZH xff1a SLAM学习er 文章目录 0 引入1 世界坐标系2 IMU2 1 IMU数据生成2 2 关于IMU噪声 3 相机3 1 相机外参3 2 内参 0 引入 假设你想通过AirSim获取仿真数据运行
  • C++ cout输出小数位数

    方法一 xff1a 使用setiosflags span class token macro property span class token directive hash span span class token directive
  • kubeadm init 运行时kebelet启动失败问题

    最近在部署kebeedge xff0c 需要先在云服上部署k8s xff0c 期间通过kubeadm init config的方式进行master的部署 xff0c 记录一下遇到的kubelet相关的错误 在通过kubeadm init c
  • 2288hv5超融合服务器 数码管报888

    问题现象 2288hv5超融合服务器 xff0c 前面板数码管报888 xff0c 电源灯黄灯闪烁 xff0c 开不了机 xff0c ibmc网络是通的 xff0c 但是web网页打不开 问题原因 iBMC的版本过低 xff0c iBMC在
  • 跟我一起写操作系统(二)——史上最简单的内核

    跟我一起写操作系统 二 史上最简单的内核 转载注明出处 xff1a http www cnblogs com lucasysfeng p 4847662 html 上一讲地址 xff1a http www cnblogs com lucas
  • k8s中文文档

    http www cnblogs com huangzhenyou p 8066145 html k8s概念比较多 xff0c 有什么概念的疑惑的推荐看k8s中文文档 me的环境 操作系统 xff1a centos7 docker xff1
  • 阿里云 CentOS7 安装图形化界面 。安装图形化界面看这一篇就够了。

    阿里云centos7 下执行eclipse 响应学校老师的要求安装eclipse用于与hadoop的操作 在这之前想过两种方法来解决服务器无图形化界面 xff0c 来操作eclipse 1 在主机上下载eclipse把需要编译的代码编译成j
  • 把ESXi中的虚拟机通过OVA/OVF导出的方式迁移到Proxmox 5

    一 前言 之前发现ESXi是免费的时候 xff0c 非常兴奋地把几台服务器都装上了 xff0c 用着确实还行 xff0c 但是用久了之后就发现 xff0c 很多高端功能需要进一步付费才能使用 xff0c 比如HA等 另外就是它还有很多局限性
  • PX4 ThoneFlow光流使用

    PX4官方光流介绍 xff1a PMW3901 Based Flow Sensors PX4 User Guide 与飞控连接 接线 xff1a G接GND xff1b V接3 3V xff1b T是TX接飞控的RX口 xff1b Y接地开
  • Ubuntu PX4无人机仿真环境配置

    目录 一 VM虚拟机安装ubuntu18 04 1 VMware安装 2 新建虚拟机 二 Ubuntu系统配置 1 更改软件安装源 2 安装中文输入法 三 PX4环境搭建 1 安装git 2 下载px4源码 3 安装ROS 4 安装MAVR

随机推荐

  • larave5安装过程分享-MAX OSX版本

    MAC上的平台是XAMPP xff0c 自带的版本低 我用的是XAMPP MAC版本 一 本地php环境配置 which php php xff0d v xff5c php xampp php PASH 61 34 xff0f applic
  • PX4二次开发 创建进程

    目录 一 创建进程 二 仿真测试 PX4官方手册 xff1a Module Template for Full Applications PX4 User Guide 编写参照PX4源码 src templates xff1a PX4 Au
  • 【Matlab】Matlab基础绘图整理

    Matlab基础绘图整理 一张图绘制多个子图在图片文本中添加希腊字母和特殊字符其他常用函数限制坐标轴范围添加坐标轴说明添加图例修改线条类型 标记修改线条粗细 一张图绘制多个子图 主要命令 xff1a figure 第几张图 subplot
  • PX4 磁罗盘干扰分析

    磁罗盘干扰分析 推力与磁场关系正常情况干扰情况与推力相关解决方法 与推力不相关 罗盘补偿操作流程获取用于分析的日志分析日志调整罗盘补偿参数 推力与磁场关系 无人机上的电机电流会干扰无人机上搭载的磁罗盘 xff0c PX4官方提供了一些方式
  • 【C++】进制

    目录 一 进制转换1 十进制转二进制2 十进制转八进制 xff08 同上 xff09 3 二进制转八进制4 二进制转十六进制5 八进制转二进制6 十六进制转二进制 二 位运算1 原码 反码 补码2 位运算符3 变换操作 一 进制转换 1 十
  • Ubuntu20.04安装ROS2+ROS2-PX4框架搭建

    目录 Ubuntu20 04安装ROS2Set localeSetup SourcesInstall ROS2 packageEnvironment setup测试 ROS2 PX4框架搭建Install PX4Install ROS2Se
  • Jetson Nano利用ROS2通过MicroDDS与PX4通讯

    目录 Jetson Nano安装Ubuntu20 04Ubuntu20 04 配置ROS2环境Pixhawk配置Jetson Nano上MicroDDS Agent配置及和pixhawk通讯 PX4在V1 14及后续版本中 xff0c 将原
  • 用速腾RS16跑LeGO-LOAM

    版权声明 xff1a 本文为博主原创文章 xff0c 遵循 CC 4 0 BY SA 版权协议 xff0c 转载请附上原文出处链接和本声明 本文链接 xff1a https blog csdn net Zed Of Zoe article
  • Visual Studio 2017环境配置MPI v9.0 并行编程环境

    目录 第一步 xff1a 下载安装mpi 官网 xff1a http www mpich org windows版官网 xff1a https msdn microsoft com en us library bb524831 v 61 v
  • 学习java基础的心得感悟

    学完java基础 xff0c 对java面向对象的思想有更加深刻的认识了 xff0c 从学习java语言概述到最后网络编程IDE的使用 xff0c 时间用了1个月零9天 xff0c 上课时间28天 xff0c 回首感觉快又感觉漫长 xff0
  • 如何使用SQL批量替换数据库特定字段中部分特定数据

    1 替换数据库特定字段中部分特定数据的SQL语句 SQL语句 xff1a update 表名 set 字段名 61 replace 字段名 原字符串 需要替换成的字符串 以将表exam major中的字段pos2019中的数据 50 替换成
  • 阿里云ubuntu16.04 server 配置方案 1 配置桌面环境

    首先为服务器配置一个桌面系统 升级一下哦 xff01 span class hljs built in sudo span apt get update span class hljs built in sudo span apt get
  • Xshell远程连接华为云服务器

    Xshell远程连接华为云服务器 一 关于华为云1 什么是云服务器2 为什么使用华为云3 我的华为云体验 二 控制台操作 1 设置密码 2 开放端口 3 切换系统 三 Xshell操作 1 下载Xshell和Xftp2 连接云服务器 一 关
  • 校园网网络连接反复断开又连接是什么原因?

    网络连接反复断开又连接是什么原因 xff1f 原因可能跟ARP攻击或擅自使用P2P终结者等攻击软件有关 因为校园内多个楼宇已部署防ARP攻击网络设备 xff0c 只要判断用户计算机感染ARP或使用P2P终结者 网络执法官 聚生网管等软件攻击
  • xuperchain源码分析-启动过程

    xuperchain的启动分为两个比较大的过程 xff0c 一个是节点的初始化 xff0c 另一个是挖坑的初始化
  • 通过Excel学习PID算法(一步步理解它的KP,KI,KD)

    PID原理 PID控制算是应用非常广泛的经典控制算法 但是怎么理解PID这三个参数呢 xff1f 在参考了别人的文章之后 xff0c 我还是有点一知半解 xff0c 这时候发现不自己动手算一算是很难理解PID了 xff0c 但是我又不想做这
  • 通过Excel学习PID算法(连续系统的PID)

    总结上一节 在之前 xff0c 我们用倒水的例子通俗易懂的解释了什么是PID算法 在这里先回顾一下之前的学习的内容 P表示对误差的比例系数 与目标值差多少 xff0c 就在下一次修正中加上这个误差与P的乘积 xff0c 同时会导致系统有一个
  • 原来学习是如此地苦涩

    原文链接 xff1a http blog csdn net tangl 99 article details 2047657 最近一直在忙第一篇Paper xff0c 虽然想法大致的框架成熟了 xff0c 但是还有一些细节需要完善 这几天在
  • 互联网+时代的7个引爆点(读书笔记)

    百货商场里的销售人员一直抱怨 xff0c 大家只是到自己这里来看看 xff0c 之后转身就在网上下单 从旧视角瞎看这固然是一种文体 xff0c 显示着揭示了一种新的机会 以线下体验为入口的机会 小团队精益式的迭代 xff0c 几个周期后就可
  • maperuce运算框架

    1 xff0c 概念 mapreduce 运算框架主要实现hadoop 的数据处理 xff0c 数据处理中 流经过5个节点 数据流 xff1a input gt spilt gt map gt shuffle gt reduce xff08