大数据之(一)Mapreduce

2023-05-16

MapReduce(一)

  • 1、Mapreduce概述
    • 1.1定义
    • 1.2优缺点
    • 1.3核心思想
    • 1.4MapReduce进程
    • 1.5常用数据序列化类型
    • 1.6MapReduce编程规范
    • 1.7WordCount案例实操
  • 2、Hadoop序列化
    • 2.1序列化概述
    • 2.2自定义bean对象实现序列化接口(writeable)
    • 2.3序列化案例实操

1、Mapreduce概述

1.1定义

MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。
MapReduce核心功能是将用户编写的业务逻辑代码自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。

1.2优缺点

  • 优点

(1)MapReduce易于编程
它简单的实现一些接口,就可以的完成一个分布式程序。
(2)良好的扩展性
可以通过简单的增加机器来扩展。
(3)高容错性
其中一台机器挂了,它可以把上面的计算任务转移到另外另外一个节点进行计算。
(4)适合PB级以上海量数据的离线处理

  • 缺点

(1)不擅长实时计算
(2)不擅长流式计算
MapReduce的输入数据集是静态的
(3)不擅长DAG(有向无环图)计算
每个MapReduce作业的输出结果都会写入到磁盘,会造成大量的磁盘IO,导致性能非常的低下。

1.3核心思想

在这里插入图片描述

重点注意:
(1)map阶段数据是怎么切分的
(2)reduce阶段数据是怎么合并的

1.4MapReduce进程

一个完整的MapReduce程序在分布式运行时有三类实例进程:
(1)MrAppMaster:负责整个程序的过程调度机状态协调
(2)MapTask:负责Map阶段的整个数据处理流程
(3)ReduceTask:负责Reduce阶段的整个数据处理流程。

1.5常用数据序列化类型

Java类型Hadoop Writer类型
BooleanBooleaWriter
ByteByteWriter
intintWriter
FloatFloatWriter
LongLongWriter
DoubleDoubleWriter
StringText
MapMapWriter
ArrayArrayWriter
NullNullWriter

1.6MapReduce编程规范

(1)Mapper阶段
①用户自定义的Mapper要继承自己的父类
②Mapper的输入数据是LongWriter和Text类型的。
③Mapper中的业务逻辑写在map方法中
④Mapper的输出数据是Text和IntWriter类型的。
⑤map方法对每一个<k,v>调用一次
(2)Reduce阶段
①用户自定义的Reducer要继承自己的父类
②Reducer的输入数据类型对应Mapper的输出数据类型,也是KV
③Reducer的业务逻辑写在reduce方法中
④ReduceTask进程对每一组相同k的<k,v>组调用一次reduce方法
(3)Driver阶段
相当于YARN集群的客户端,用于提交我们整个程序到YARN集群,提交的是封装了 MapReduce程序相关参数的job对象

1.7WordCount案例实操

1)需求
在给定的文本文件中统计输出每一个单词出现的总次数
(1)输入数据到hello.txt

atguigu atguigu
ss ss
cls cls
jiao
banzhang
xue
hadoop

(2)期望输出数据

atguigu	2
banzhang	1
cls	2
hadoop	1
jiao	1
ss	2
xue	1

2)需求分析
按照MapReduce编程规范,分别编写Mapper,Reducer,Driver。可参考下图:

在这里插入图片描述

3)环境准备
(1)创建maven工程
(2)在pom.xml文件中添加如下依赖

<dependencies>
   <dependency>
       <groupId>junit</groupId>
      <artifactId>junit</artifactId>
       <version>4.12</version>
   </dependency>
   <dependency>       
<groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-slf4j-impl</artifactId>
       <version>2.12.0</version>
   </dependency>
   <dependency>
       <groupId>org.apache.hadoop</groupId>
       <artifactId>hadoop-client</artifactId>
       <version>3.1.3</version>
   </dependency>
</dependencies>

在项目的src/main.resource目录下,新建一个文件,命名为“log4j2.xml”,在文件中填入。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="error" strict="true" name="XMLConfig">
   <Appenders>
       <!-- 类型名为Console,名称为必须属性 -->
       <Appender type="Console" name="STDOUT">
           <!-- 布局为PatternLayout的方式,
           输出样式为[INFO] [2018-01-22 17:34:01][org.test.Console]I'm here -->
           <Layout type="PatternLayout"
                   pattern="[%p] [%d{yyyy-MM-dd HH:mm:ss}][%c{10}]%m%n" />
       </Appender>
   </Appenders>
   <Loggers>
       <!-- 可加性为false -->
      <Logger name="test" level="info" additivity="false">
           <AppenderRef ref="STDOUT" />
      </Logger>
       <!-- root loggerConfig设置 -->
       <Root level="info">
           <AppenderRef ref="STDOUT" />
       </Root>
  </Loggers>
</Configuration>

(3)编写程序
①编写Mapper类

public class WcMapper  extends Mapper<LongWritable, Text,Text, IntWritable> {
   private Text k = new Text();
   private IntWritable v = new IntWritable(1);
   @Override
   protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
       //以空格分割字符
       String[] words = value.toString().split(" ");
      //输出
       for (String word : words) {
          k.set(word);
           context.write(k,v);
      }
   }
}

②编写Reducer类

public class WcReducer extends Reducer<Text, IntWritable,Text,IntWritable> {
   private int sum;
   private IntWritable v = new IntWritable();
   @Override
   protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
      //累加求和
       sum = 0;
       for (IntWritable value : values) {
           sum += value.get();
       }
       //输出
       v.set(sum);
       context.write(key,v);
   }
}

③编写Driver类,这里我注释掉了Windows环境和集群交互的情况

public class WcDriver{
   public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
       //获取job对象
       Configuration configuration = new Configuration();
//        //设置HDFS NameNode的地址
//        configuration.set("fs.defaultFS", "hdfs://hadoop102:9820");
//        // 指定MapReduce运行在Yarn上
//        configuration.set("mapreduce.framework.name","yarn");
//        // 指定mapreduce可以在远程集群运行
//        configuration.set("mapreduce.app-submission.cross-platform","true");
//        //指定Yarn resourcemanager的位置
//        configuration.set("yarn.resourcemanager.hostname","hadoop103");
       Job job = Job.getInstance(configuration);
       //设置driver的jar包
       job.setJarByClass(WcDriver.class);     >//job.setJar("D:\\code\\mapreduce\\target\\mapreduce-1.0-SNAPSHOT.jar");
       //设置mapper和reducer的jar包
       job.setMapperClass(WcMapper.class);
       job.setReducerClass(WcReducer.class);
       //设置mapper的输出类型
       job.setMapOutputKeyClass(Text.class);
       job.setMapOutputValueClass(IntWritable.class);
       //设置最终输出kv类型
       job.setOutputKeyClass(Text.class);
       job.setOutputValueClass(IntWritable.class);
       //设置输入路径和输出路径
       FileInputFormat.setInputPaths(job,new Path(args[0]));
       FileOutputFormat.setOutputPath(job,new Path(args[1]));
       //提交job
       boolean result = job.waitForCompletion(true);
       System.exit(result? 0 : 1);
   }
}

④编辑任务配置
(a)检查第一个参数Main class是不是我们要运行的类的全类名,如果不是的话一定要修改!
(b)在VM options后面加上 :-DHADOOP_USER_NAME=atguigu
(c)在Program arguments后面加上两个参数分别代表输入输出路径,两个参数之间用空格隔开。如:hdfs://hadoop102:9820/input hdfs://hadoop102:9820/output

在这里插入图片描述

2、Hadoop序列化

2.1序列化概述

序列化就是把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储到磁盘(持久化)和网络传输。
序列化可以存储“活的”对象,可以将“活的”对象发送到远程计算机。
Java的序列化框架在序列化过程中会产生很多额外的信息,不便于在网络中高效传输,所以Hadoop自己开发了一套序列化机制。
Hadoop序列化特点:
(1)紧凑:高效使用存储空间
(2)快速:读写数据的额外开销小
(3)可扩展:随着通信协议的升级而可升级
(4)互操作:支持多语言的交互

2.2自定义bean对象实现序列化接口(writeable)

具体实现bean对象的步骤
(1)必须实现Writable接口
(2)重写tostring方法
(3)重写序列化方法
(4)重写反序列化方法

2.3序列化案例实操

1)需求
统计每一个手机耗费的总上行流量、总下行流量、总流量
(1)输入数据(有需要的留言)
(2)输入数据格式

713560436666120.196.100.991116954200
id手机号码网络ip上行流量下行流量网络状态码

期望输出数据格式

1356043666611169542070
手机号码上行流量下行流量总流量

2)需求分析,参考下图:

在这里插入图片描述

3)编写MapReduce程序
(1)编写流量统计的bean对象

public class FlowBean implements Writable {
   private long upFlow;
   private long downFlow;
   private long sumFlow;
   @Override
   public String toString() {
       return "FlowBean{" +
               "upFlow=" + upFlow +
               ", downFlow=" + downFlow +
               ", sumFlow=" + sumFlow +
               '}';
   }
   public void set(long upFlow,long downFlow){
       this.upFlow = upFlow;
       this.downFlow = downFlow;
       this.sumFlow = upFlow + downFlow;
   }
   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;
   }
   /**
    *序列化
    * @param dataOutput
    * @throws IOException
    */
   public void write(DataOutput dataOutput) throws IOException {
       dataOutput.writeLong(upFlow);
       dataOutput.writeLong(downFlow);
       dataOutput.writeLong(sumFlow);
   }
   /**
    * 反序列化
    * @param dataInput
    * @throws IOException
    */
   public void readFields(DataInput dataInput) throws IOException {
       upFlow= dataInput.readLong();
       downFlow = dataInput.readLong();
       sumFlow = dataInput.readLong();
   }
}

(2)编写Mapper类

public class FlowMapper extends Mapper<LongWritable,Text,Text,FlowBean> {
  private Text ph = new Text();
  private FlowBean flowBean = new FlowBean();
   @Override
   protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
       String[] filds = value.toString().split("\t");
       ph.set(filds[1]);
       flowBean.set(
               Long.parseLong( filds[filds.length -3]),
               Long.parseLong(filds[filds.length - 2])
       );
       context.write(ph,flowBean);
   }
}

(3)编写Reducer类

public class FlowReducer extends Reducer<Text,FlowBean,Text,FlowBean> {
   private FlowBean result = new FlowBean();
   @Override
   protected void reduce(Text key, Iterable<FlowBean> values, Context context) throws IOException, InterruptedException {
       long up = 0;
       long down = 0;
       for (FlowBean value : values) {
           up += value.getUpFlow();
           down += value.getDownFlow();
       }
       result.set(up,down);
       context.write(key,result);
   }
}

(4)编写driver类

public class FlowDriver {
   public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
       //获取job对象
       Configuration configuration = new Configuration();
//        //设置HDFS NameNode的地址
//        configuration.set("fs.defaultFS", "hdfs://hadoop102:9820");
//        // 指定MapReduce运行在Yarn上
//        configuration.set("mapreduce.framework.name","yarn");
//        // 指定mapreduce可以在远程集群运行
//        configuration.set("mapreduce.app-submission.cross-platform","true");
//        //指定Yarn resourcemanager的位置
//        configuration.set("yarn.resourcemanager.hostname","hadoop103");
       Job job = Job.getInstance(configuration);
       //设置driver的jar包
       job.setJarByClass(FlowDriver.class);
       //job.setJar("D:\\code\\mapreduce\\target\\mapreduce-1.0-SNAPSHOT.jar");
       //设置mapper和reducer的jar包
       job.setMapperClass(FlowMapper.class);
       job.setReducerClass(FlowReducer.class);
       //设置map的输出类型
       job.setMapOutputKeyClass(Text.class);
       job.setMapOutputValueClass(FlowBean.class);
       //设置最终kv的输出类型
       job.setOutputKeyClass(Text.class);
       job.setOutputValueClass(FlowBean.class);
       //设置输入输出路径
       FileInputFormat.setInputPaths(job,new Path(args[0]));
       FileOutputFormat.setOutputPath(job,new Path(args[1]));
       //提交
       boolean b = job.waitForCompletion(true);
       System.exit(b? 0 : 1);
   }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

大数据之(一)Mapreduce 的相关文章

  • C#WinForm窗体控件学习(一)

    C 中WinForm窗体常见控件 一 常用控件一般都有以下属性和事件 属性 1 Name xff1a 控件的名称属性 xff0c 识别不同空间的唯一标识 2 Text xff1a 文本输入 3 Font xff1a 控件里字体的属性 xff
  • Java学习 - 黑马 - 随堂笔记 - 10_方法

    Java学习 黑马 随堂笔记 10 方法 1 方法概述 1 1 什么是方法 方法 xff08 method xff09 是将具有独立功能的代码块组织成为一个整体 xff0c 使其具有特殊功能的代码集 注意 xff1a 方法必须先创建才可以使
  • Java学习(b站基础) - 狂神说 - 目录总章

    Java学习 xff08 b站基础 xff09 狂神说 目录总章 本内容仅为个人看视频记录的随手笔记 xff0c 部分内容可能不全面 xff0c 可以作为学习狂神说视频之后进行复习巩固使用 Markdown学习笔记 xff08 简单的部分M
  • Java学习 - 黑马 - 随堂笔记 - 11_Debug

    Java学习 黑马 随堂笔记 11 Debug 1 Debug 1 1 Debug概述 Debug xff1a 是供程序员使用的程序调试工具 xff0c 它可以用于查看程序的执行流程 xff0c 也可以用于追踪程序执行过程来调试程序 1 2
  • Java学习 - 黑马 - 随堂笔记 - 12_基础知识练习

    Java学习 黑马 随堂笔记 12 基础知识练习 1 案例 xff1a 减肥计划 案例 xff1a 减肥计划 xff08 if xff09 需求 xff1a 输入星期数 xff0c 显示今天的减肥活动 周一 xff1a 跑步 周二 xff1
  • Java学习 - 黑马 - 随堂笔记 - 13_面向对象基础

    Java学习 黑马 随堂笔记 13 面向对象基础 1 类和对象 1 1 什么是对象 万物皆对象 xff0c 客观存在的事物皆为对象 1 2 什么是面向对象 1 3 什么是类 类是对现实生活中一类具有共同属性和行为的事物的抽象 类的特点 xf
  • Java学习 - 黑马 - 随堂笔记 - 14_字符串

    Java学习 黑马 随堂笔记 14 字符串 1 API 1 1 API概述 API Application Programming Interface xff1a 应用程序编程接口 编写一个机器人变成去控制机器人踢足球 xff0c 程序需要
  • Java学习 - 黑马 - 随堂笔记 - 15_集合基础

    Java学习 黑马 随堂笔记 15 集合基础 1 集合基础 1 1 集合概述 编程的时候如果要存储多个数据 xff0c 使用长度固定的数组存储格式 xff0c 不一定满足我们的需求 xff0c 更适应不了变化的需求 xff0c 那么 xff
  • Java学习 - 黑马 - 随堂笔记 - 16_学生管理系统

    Java学习 黑马 随堂笔记 16 学生管理系统 1 学生管理系统 1 1 项目演示 1 2 学生管理系统实现思路 定义学生类主界面的代码编写添加学生的代码编写查看学生的代码编写删除学生的代码编写修改学生的代码编写 1 3 定义学生类 学生
  • Java学习 - 黑马(第二部分) - 随堂笔记 - 01_继承

    Java学习2 黑马 xff08 第二部分 xff09 随堂笔记 01 继承 1 继承 1 1 继承概述 继承是面向对象三大特征之一 可以使得子类具有父类的属性和方法 xff0c 还可以在子类中重新定义 xff0c 追加属性和方法 继承的格
  • Java学习 - 黑马(第二部分) - 随堂笔记 - 02_修饰符

    Java学习 黑马 xff08 第二部分 xff09 随堂笔记 02 修饰符 1 包 1 1 包的概述和使用 其实就是文件夹 作用 xff1a 对类进行分类管理 包的定义格式 格式 xff1a package 包名 xff08 多级包用 分
  • Java学习 - 黑马(第二部分) - 随堂笔记 - 03_多态

    Java学习 黑马 xff08 第二部分 xff09 随堂笔记 03 多态 1 多态 1 1 多态概述 同一个对象 xff0c 在不同时刻表现出来的不同形态 举例 xff1a 猫 我们可以说猫是猫 xff1a 猫 cat 61 new 猫
  • Java学习 - 黑马(第二部分) - 随堂笔记 - 04_抽象类

    Java学习 黑马 xff08 第二部分 xff09 随堂笔记 04 抽象类 1 抽象类 1 1 抽象类概述 在Java中 xff0c 一个没有方法体的方法应该定义为抽象方法 xff0c 而类中如果有抽象方法 xff0c 该类必须定义为抽象
  • Java学习 - 黑马(第二部分) - 随堂笔记 - 05_接口

    Java学习 黑马 xff08 第二部分 xff09 随堂笔记 05 接口 1 接口 接口就是一种公共的规范标准 xff0c 只要符合规范标准 xff0c 大家都可以通用 Java中的接口更多的体现在对行为的抽象 1 2 接口的特点 接口用
  • Java学习 - 黑马(第二部分) - 随堂笔记 - 06_形参和返回值

    Java学习 黑马 xff08 第二部分 xff09 随堂笔记 06 形参和返回值 形参和返回值 1 1 类名作为形参和返回值 方法的形参是类名 xff0c 其实需要的是该类的对象方法的返回值是类名 xff0c 其实返回的是该类的对象 pa
  • Java学习 - 黑马(第二部分) - 随堂笔记 - 07_内部类

    Java学习 黑马 xff08 第二部分 xff09 随堂笔记 07 内部类 1 内部类 1 1 内部类概述 内部类 xff1a 就是在一个类中定义一个类 举例 xff1a 在一个类A的内部定义一个类B xff0c 类B就被称为内部类 内部
  • Java学习 - 黑马(第二部分) - 随堂笔记 - 08_常用API

    Java学习 黑马 xff08 第二部分 xff09 随堂笔记 08 常用API 1 Math 1 1 Math类概述 Math包含执行基本数字运算的方法 没有构造方法 xff0c 如何使用类中的成员呢 xff1f 通过查看帮助文档 看类的
  • Java学习 - 黑马 - 随堂笔记 - 第二部分总目录

    Java学习 黑马 随堂笔记 第二部分总目录 本内容仅为个人看视频记录的随手笔记 xff0c 部分内容可能不全面 xff0c xff0c 可以作为学习黑马程序员Java基础视频参考使用或者看完之后进行复习巩固使用 Java学习 黑马 xff
  • Java学习 - 黑马 - 随堂笔记 - 第一部分总目录

    Java学习 黑马 随堂笔记 第一部分总目录 本内容仅为个人看视频记录的随手笔记 xff0c 部分内容可能不全面 xff0c xff0c 可以作为学习黑马程序员Java基础视频参考使用或者看完之后进行复习巩固使用 Java学习 黑马 随堂笔
  • Java学习 - 黑马(第二部分) - 随堂笔记 - 09_异常

    Java学习 黑马 xff08 第二部分 xff09 随堂笔记 09 异常 1 异常 1 1 异常概述 package com itheima 01 import java lang reflect Method 异常 public cla

随机推荐

  • MATLAB2021b详细安装教程

    1 下载软件安装包 2 安装 下载安装包后打开iso文件 xff0c 若是无法打开请用解压软件打开 打开MATLAB R2021b win64 xff0c 双击软件开始安装 一直点击下一步 xff0c 直到步骤 选择我已有我的许可证的文件密
  • 新睿云科普:什么叫云技术?云技术是如何发展到如今的?

    云技术是计算机系统资源 xff08 尤其是数据存储和计算能力 xff09 的按需可用性 xff0c 而无需用户直接进行主动管理 该术语通常用于描述Internet上可供许多用户使用的数据中心 在当今占主导地位的大型云通常具有从中央服务器分布
  • 酷炫cmd命令行工具——windows terminal的详细配置

    官网配置地址 xff1a An overview on Windows Terminal Microsoft Docs 目录 一 Windows terminal安装与基本操作 1 Windows Terminal下载 2 不同命令行工具切
  • RIME中州韵输入法词库扩充(搜狗词库,QQ拼音词库,清华词库,拆字词库U模式等)

    Rime输入法作为一款高度自定义的本地输入法 xff0c 词库的配置尤为重要 1 Rime输入法词库格式 Rime输入法的词库在用户配置文件夹下 xff0c 是以 dict yaml结尾的文件 2 Rime输入法词库如何调用 Rime可以扩
  • 超全超详细Rime中州韵输入法配置指南

    1 为什么选择RIME 市面上具有众多的输入法 xff0c 无论搜狗还是QQ输入法基本都大同小异 xff0c 但RIME是众多输入法中一个特殊的存在 之所以特殊 xff0c 原因在于 xff0c 绝大部份输入法工具 xff0c 长什么样 能
  • MATLAB2022a更新了,看MATLAB2022详细安装教程

    MATLAB是很多学生党 xff0c 科研人需要的工具 xff0c 这款软件每年更新两次 xff0c 上半年为年份 43 a xff0c 下半年为年份 43 b xff0c 2022a如约而至 这次更新包含了 5 款新产品和 11 项重要更
  • 中国计算机设计大赛作品(附代码与设计书,答辩PPT)

    1 主界面 2 目录界面 3 离散信号的产生 4 离散信号的基本变换及运算 变换 运算 5 离散信号的卷积运算 6 离散信号的卷积运算 7 系统稳定性分析 8 傅立叶变换 9 FIR滤波器设计 10 IIR滤波器设计 11 语音去噪处理 录
  • 更改pip镜像源的多种方法

    目前可用的pip国内镜像源有下面这些 xff1a 阿里云 http mirrors aliyun com pypi simple 中国科技大学 https pypi mirrors ustc edu cn simple 豆瓣 http py
  • 详细介绍MATLAB导入文本文件、excel等数据文件

    一 通过导入工具导入 选择导入工具 选择文件 二 通过函数uiimport导入 xff08 推荐 xff09 使用uiimport导入数据比较方便 xff0c 输入后会自动弹出对话框选择文件或者剪贴板内容 进阶命令如下 xff1a uiim
  • 机器学习(一):概述

    机器学习近年来发展迅速 xff0c 那什么是机器学习呢 xff1f 其实机器学习在我们每天的生活 工作中都随处可见机器学习的应用 比如你每天打开手机 xff0c 无论是打开短视频软件 xff0c 还是逛购物软件 xff0c 这些里面都是包含
  • 机器学习(二):聚类算法1——K-means算法

    Kmeans是一种经典的聚类算法 xff0c 所谓聚类 xff0c 是指在没有给出目标的情况下 xff0c 将样本根据某种关系分为某几类 那在kmeans中 xff0c 是根据样本点间的距离 xff0c 将样本n分为k个类 K means实
  • 调制中的归一化因子如何计算?

    归一化因子的作用 xff1a 将功率 xff08 能量 xff09 进行归一化处理 添加功率归一化因子 xff0c 目的在于使得不同调制方式 xff08 或者说对于所有映射方式 xff09 都能够取得相同的平均功率 归一化因子 计算公式 x
  • 画图软件origin-柱状图断点设置

    OriginLab为中国学生提供了 免费半年正版中文 OriginPro xff1b 注册完毕后登录学校邮箱 xff0c 请根据邮件提示完成安装注册即可 xff0c 然后会发送安装教程给你 下载 xff0c 并安装典型使用方法 2 1 柱状
  • plot无法画图---已解决

    项目场景 xff1a plot画图 BUG两则 记录小bug xff1a 问题描述 用vscode开发中 xff0c 需要进行plot输出 xff0c 之前一直没问题 xff0c 近日plot无输出 xff0c 程序直接结束 xff0c 不
  • 条件判断中 两个等号(==)和三个等号(===)的区别

    1 两个等号 61 61 是抽象相等运算符 xff1b 三个等号 61 61 61 是 严格相等运算符 2 两个等号 61 61 运算符是在进行必要的类型转换后 xff0c 再比较 xff1b 如果比较的值 xff0c 一个是字符串 xff
  • Windows11连接共享打印机指定的网络名不再可用

    连接的设备是Windows11连接的Windows10打印机 一 共享网络打印机 xff08 附上共享打印机的教程 xff09 共享打印机官网教程 二 共享后指定的网络名不再可用 网上搜索后 xff0c 大体的步骤就是检查几个服务是否打开
  • 「计网四」网络层(上篇)

    文章目录 一 网络层概述二 网络层提供的两种服务三 IPv43 1 IPv4地址概述3 2 分类编址的IPv4地址3 3 划分子网的IPv4地址3 4 无分类编址的IPv4地址3 5 IPv4地址的应用规划 四 IP数据报的发送和转发过程五
  • Navicat连接MySQL出错:1251 - Client does not support authentication protocol requested by server……

    1251 Client does not support authentication protocol requested by server 游海东的技术专栏 CSDN博客 Navicat连接不上MySQL8 0问题的解决方法 终于对了
  • Huawei2288H V5 服务器重做RAID0

    Huawei服务器v5版本重做RAID0 xff1a 因为环境需求需要对三台Huawei服务器重做RAID xff0c 但是试过了百度的ctrl 43 C ctrl 43 H ctrl 43 A都是进 不去 xff0c 和网上百度的图片对比
  • 大数据之(一)Mapreduce

    MapReduce xff08 一 xff09 1 Mapreduce概述1 1定义1 2优缺点1 3核心思想1 4MapReduce进程1 5常用数据序列化类型1 6MapReduce编程规范1 7WordCount案例实操 2 Hado