spark汇总

目录

  • 描述
  • 运行模式
    • 1. Windows模式
      • 代码示例
    • 2. Local模式
    • 3. Standalone模式
  • RDD
    • 描述
    • 特性
    • RDD创建
      • 代码示例(并行化创建)
      • 代码示例(读取外部数据)
      • 代码示例(读取目录下的所有文件)
    • 算子
    • DAG
    • SparkSQL
    • SparkStreaming

描述

在这里插入图片描述

Apache Spark 是用于大规模数据处理的统一分析引擎。它提供 Java、Scala、Python 和 R 中的高级 API,以及支持通用执行图的优化引擎。它还支持一组丰富的高级工具,包括用于 SQL 和结构化数据处理的Spark SQL 、用于机器学习的MLlib、用于图形处理的 GraphX 以及用于增量计算和流处理的结构化流。

1. Spark Core
Spark的核心,是Spark运行的基础。Spark Core以RDD为数据抽象,提供Python、Java、Scala、R语言的API,可以编程进行海量离线数据批处理计算。
2. Spark SQL
Spark SQL是Spark用来操作结构化数据的组件。通过Spark SQL对数据进行处理。
3. Spark Streaming
Spark Streaming是Spark平台上针对实时数据进行流式计算的组件,提供了丰富的处理数据流的API。
4. Spark MLlib
MLlib是Spark提供的一个机器学习算法库。MLlib不仅提供了模型评估、数据导入等额外的功能,还提供了一些更底层的机器学习原语。
5. Spark GraphX
GraphX是Spark面向图计算提供的框架与算法库。

运行模式

1. Windows模式

多用于本地测试,不需要虚拟机或服务器。

代码示例

WordCount.scala

package com.wunaiieq//1.导入SparkConf,SparkContext
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}object WordCount {def main(args: Array[String]): Unit = {//2.构建SparkConf对象,并设置本地运行和程序的名称val conf = new SparkConf().setMaster("local[*]").setAppName("WordCount")//3.通过SparkConf对象构建SparkContext对象val sc = new SparkContext(conf)//4.读取文件,并生成RDD对象val fileRdd: RDD[String] = sc.textFile("data/words.txt")//5.将单词进行切割,得到一个存储全部单词的集合对象val wordsRdd: RDD[String] = fileRdd.flatMap(_.split(" "))//6.将单词转换为Tuple2对象("hello"->("hello",1))val wordAndOneRdd: RDD[(String, Int)] = wordsRdd.map((_, 1))//7.将元组的value按照key进行分组,并对该组所有的value进行聚合操作val resultRdd: RDD[(String, Int)] = wordAndOneRdd.reduceByKey(_ + _)//8.通过collect方法收集RDD数据val wordCount: Array[(String, Int)] = resultRdd.collect()//9.输出结果wordCount.foreach(println)}
}

log4j.properties
这个没什么说的直接复制用即可

# Set everything to be logged to the console
log4j.rootCategory=ERROR, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{MM/dd HH:mm:ss} %p %c{1}: %m%n# Set the default spark-shell/spark-sql log level to WARN. When running the
# spark-shell/spark-sql, the log level for these classes is used to overwrite
# the root logger's log level, so that the user can have different defaults
# for the shell and regular Spark apps.
log4j.logger.org.apache.spark.repl.Main=WARN
log4j.logger.org.apache.spark.sql.hive.thriftserver.SparkSQLCLIDriver=WARN# Settings to quiet third party logs that are too verbose
log4j.logger.org.sparkproject.jetty=WARN
log4j.logger.org.sparkproject.jetty.util.component.AbstractLifeCycle=ERROR
log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO
log4j.logger.org.apache.parquet=ERROR
log4j.logger.parquet=ERROR# SPARK-9183: Settings to avoid annoying messages when looking up nonexistent UDFs in SparkSQL with Hive support
log4j.logger.org.apache.hadoop.hive.metastore.RetryingHMSHandler=FATAL
log4j.logger.org.apache.hadoop.hive.ql.exec.FunctionRegistry=ERROR# For deploying Spark ThriftServer
# SPARK-34128:Suppress undesirable TTransportException warnings involved in THRIFT-4805
log4j.appender.console.filter.1=org.apache.log4j.varia.StringMatchFilter
log4j.appender.console.filter.1.StringToMatch=Thrift error occurred during processing of message
log4j.appender.console.filter.1.AcceptOnMatch=false

2. Local模式

一台服务器或虚拟机搞定,所谓的Local模式,就是不需要其他任何节点资源就可以在本地执行Spark代码的环境,一般用于教学,调试,演示等。

# 进入spark根目录
cd /opt/module/spark/bin
# 运行视频spark-shell
./spark-shell

webUI

[atguigu@master bin]$ jps
2081 SparkSubmit
2206 Jps
[atguigu@master bin]$ netstat -anp|grep 2081
(Not all processes could be identified, non-owned process infowill not be shown, you would have to be root to see it all.)
tcp6       0      0 192.168.16.100:42050    :::*                    LISTEN      2081/java           
tcp6       0      0 :::4040                 :::*                    LISTEN      2081/java           
tcp6       0      0 192.168.16.100:35770    :::*                    LISTEN      2081/java           
unix  2      [ ]         STREAM     CONNECTED     33071    2081/java            
unix  2      [ ]         STREAM     CONNECTED     36801    2081/java        

浏览器访问

http://192.168.16.100:4040/

spark-submit
以下为使用spark提交jar包示例

./spark-submit --master local[2] --class org.apache.spark.examples.SparkPi /opt/module/spark/examples/jars/spark-examples_2.12-3.1.1.jar 100
参数描述
--class要执行程序的主类,可以更换为自己写的应用程序的主类名称
--master local[2]部署模式,默认为本地模式;数字 2 表示分配的虚拟 CPU 核数量
spark-examples_2.12-3.2.1.jar运行的应用类所在的 jar 包,实际使用时可以设定为自己打的 jar 包
20程序的入口参数,根据应用程序的需要,可以是任何有效的输入值

几种提交方式比较

工具功能特点使用场景
bin/spark-submit提交 Java/Scala/Python/R 代码到 Spark 中运行提交代码用正式场合,正式提交 Spark 程序运行
bin/spark-shell提供一个 Scala 解释器环境,用来以 Scala 代码执行 Spark 程序解释器环境,写一行执行一行测试、学习、写一行执行一行、用来验证代码等
bin/pyspark提供一个 Python 解释器环境,用来以 Python 代码执行 Spark 程序解释器环境,写一行执行一行测试、学习、写一行执行一行、用来验证代码等

3. Standalone模式

Standalone是Spark自带的一个资源调度框架,它支持完全分布式,也支持HA
在这里插入图片描述

  • Master角色:管理整个集群的资源,主要负责资源的调度和分配,并进行集群的监控等职责;并托管运行各个任务的Driver。如Yarn的ResourceManager。
  • Worker角色:每个从节点分配资源信息给Worker管理,管理单个服务器的资源类,分配对应的资源来运行Executor(Task);资源信息包含内存Memory和CPU
    Cores核数。如Yarn的NodeManager。
  • Driver角色,管理单个Spark任务在运行的时候的工作,如Yarn的ApplicationMaster “
  • Executor角色,单个任务运行的时候的一堆工作者,干活的。它是集群中工作节点(Worker)中的一个JVM进程,负责在 Spark 作业中运行具体任务(Task),任务彼此之间相互独立。Spark 应用启动时,Executor节点被同时启动,并且始终伴随着整个 Spark应用的生命周期而存在。如果有Executor节点发生了故障或崩溃,Spark应用也可以继续执行,会将出错节点上的任务调度到其他Executor节点上继续运行。
    Executor有两个核心功能:
    1.负责运行组成Spark应用的任务,并将结果返回给驱动器进程。
    2.它们通过自身的块管理器(Block Manager)为用户程序中要求缓存的
    RDD 提供内存式存储。RDD 是直接缓存在Executor进程内的,因此任务可以在运行时充分利用缓存数据加速运算。

总结

资源管理维度
集群资源管理者:Master
单机资源管理者:Worker

任务计算维度
单任务管理者:Driver
单任务执行者:Executor

注:Executor运行于Worker进程内,由Worker提供资源供给它们运行

扩展:历史服务器HistoryServer(可选),Spark Application运行完成以后,保存事件日志数据至HDFS,启动HistoryServer可以查看应用运行相关信息。

4. Yarn模式
Hadoop生态圈里面的一个资源调度框架,Spark也是可以基于Yarn来计算的。
5. 云服务模式(运行在云平台上)
Kubernetes(K8S)容器模式
Spark中的各个角色运行在Kubernetes的容器内部,并组成Spark集群环境。容器化部署是目前业界很流行的一项技术,基于Docker镜像运行能够让用户更加方便地对应用进行管理和运维。容器管理工具中最为流行的就是(K8S),而Spark也在新版本中支持了k8s部署模式。
6. Mesos
Mesos是Apache下的开源分布式资源管理框架,它被称为是分布式系统的内核,在Twitter得到广泛使用,管理着Twitter超过30,0000台服务器上的应用部署,但是在国内,依然使用着传统的Hadoop大数据框架,所以国内使用Mesos框架的并不多。

模式Spark安装机器数需启动的进程所属者应用场景
Local1Spark测试
Standalone3Master及WorkerSpark单独部署
Yarn1Yarn及HDFSHadoop混合部署

RDD

描述

Spark RDD(Resilient Distributed Dataset,弹性分布式数据集)代表一个不可变、可分区、元素可并行计算的集合,是Spark进行数据处理的基本单元。

  • 不可变性:RDD一旦创建,其数据就不可改变。对RDD的所有操作(如map、filter、reduce等)都会生成一个新的RDD,而不会修改原始RDD。这种不可变性使得RDD在分布式计算环境下非常稳定,避免了并发冲突。
  • 可分区性:RDD可以分成多个分区(Partition),每个分区就是一个数据集片段。一个RDD的不同分区可以保存到集群中的不同节点上,从而可以在集群中的不同节点上进行并行计算。分区是Spark作业并行计算的基本单位,每个分区都会被一个计算任务处理,分区的数量决定了并行计算的粒度。
  • 弹性:RDD具有弹性容错的特点。当运算中出现异常情况导致分区数据丢失或运算失败时,可以根据RDD的血统(Lineage)关系对数据进行重建。此外,RDD的数据可以保存在内存中,内存放不下时也可以保存在磁盘中,实现了存储的弹性。

特性

1. 分区(Partitions) 含义:RDD的数据被划分为多个分区,每个分区是一个数据块,分布在集群的不同节点上。 作用:每个分区会被一个计算任务处理,分区的数量决定了并行计算的粒度。用户可以在创建RDD时指定分区数,如果没有指定,Spark会根据集群的资源自动设置。
示例:从HDFS文件创建RDD时,默认分区数为文件的Block数。
2. 计算函数(Compute Function) 含义:RDD的计算方法会作用到每个分区上。 作用:当对RDD进行操作(如map、filter等)时,Spark会对每个分区应用这个函数。
示例:在map操作中,计算函数会对每个元素执行指定的转换逻辑。
3. 依赖关系(Dependencies) 含义:RDD之间存在依赖关系。 作用:在部分分区数据丢失时,Spark可以利用依赖关系重新计算丢失的数据,而不是重新计算整个RDD,提高了容错能力。
分类:依赖关系分为窄依赖(Narrow Dependency)和宽依赖(Wide
Dependency)。窄依赖指一个父RDD的分区最多被一个子RDD的分区使用;宽依赖指一个父RDD的分区被多个子RDD的分区使用。
4. 分区器(Partitioner,可选,只有kv型RDD才有) 含义:对于键值对(Key-Value)类型的RDD,可以指定一个分区器来决定数据的分区方式。
作用:分区器决定了数据在集群中的分布,影响并行计算的性能。
类型:Spark支持多种分区器,如HashPartitioner(基于哈希值分区)和RangePartitioner(基于范围分区)。
5. 优先位置(Preferred Locations,可选) 含义:RDD分区规划应当尽量靠近数据所在的服务器 作用:Spark在进行任务调度时,会优先将数据分配到其存储位置进行计算,减少数据传输开销,提高计算效率。
示例:对于HDFS文件,优先位置通常是文件块所在的节点。

RDD创建

1. 通过并行化集合创建,将本地集合对象转分布式RDD

val sc = new SparkContext(conf)
val rdd1:RDD[Int]=sc.parallelize(List(1, 2, 3, 4, 5, 6), 3)
rdd1.glom().collect()

makeRdd()创建,本质上也是使用sc.parallelize(…)

def makeRDD[T: ClassTag](seq: Seq[T],numSlices: Int = defaultParallelism): RDD[T] = withScope {parallelize(seq, numSlices)
}

2. 读取外部数据源 (比如:读取文件 )

//通过SparkConf对象构建SparkContext对象
val sc = new SparkContext(conf)
//读取文件
val fileRdd:RDD[String] = sc.textFile("data/words.txt")

程序执行入口:SparkContext对象
Spark RDD 编程的程序入口对象是SparkContext对象(Scala、Python、Java都是如此)
只有构建出SparkContext, 基于它才能执行后续的API调用和计算
本质上, SparkContext对编程来说, 主要功能就是创建第一个RDD出来。

代码示例(并行化创建)

package com.wunaiieq//1.导入SparkConf类、SparkContext
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object CreateByParallelize {def main(args: Array[String]): Unit = {//2.构建SparkConf对象。并设置本地运行和程序的名称,*表示使用全部cpu内核,可以指定数量val sparkconf = new SparkConf().setMaster("local[*]").setAppName("CreateRdd1")//3.构建SparkContext对象val sparkContext = new SparkContext(sparkconf)//4.通过并行化创建RDD对象:将本地集合->分布式的RDD对象,如果不指定分区,则根据cpu内核数进行自动分配val rdd: RDD[Int] = sparkContext.parallelize(List(1, 2, 3, 4, 5, 6, 7, 8),3)//5.输出默认的分区数println("默认分区数:"+rdd.getNumPartitions)//已经指定为3//6.collect方法:将rdd对象中每个分区的数据,都发送到Driver,形成一个Array对象val array1: Array[Int] = rdd.collect()println("rdd.collect()="+array1.mkString(","))//7.显示出rdd对象中元素被分布到不同分区的数据信息val array2: Array[Array[Int]] = rdd.glom().collect()println("rdd.glom().collect()的内容是:")for(eleArr<- array2){println(eleArr.mkString(","))}}
}

代码示例(读取外部数据)

package com.wunaiieq//1.导入SparkConf,SparkContext类
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}object CreateByTextFile {def main(args: Array[String]): Unit = {//2.构建SparkConf对象,并设置本地运行和程序名val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("textFile")//3.通过sparkconf创建SparkContext对象val sparkContext = new SparkContext(sparkConf)//4.通过textFile读取文件//4.1.读取hdfs分布式文件系统上的文件
//    val hdfsRdd: RDD[String] = sparkContext.textFile("hdfs://192.168.16.100:9820/input/data.txt")
//    val hdfsResult: Array[String] = hdfsRdd.collect()
//    println("hdfsRdd分区数"+hdfsRdd.getNumPartitions)
//    println("hdfsRdd内容"+hdfsResult.mkString(","))//4.2读取本地文件val localRdd1: RDD[String] = sparkContext.textFile("data/words.txt")println("localRdd1分区数"+localRdd1.getNumPartitions)println("localRdd1内容"+localRdd1.collect().mkString(","))//5.设置最小分区数val localRdd2: RDD[String] = sparkContext.textFile("data/words.txt",3)println("localRdd2分区数"+localRdd2.getNumPartitions)println("localRdd2内容"+localRdd2.collect().mkString(","))//6.最小分区数设置是一个参考值,Spark会有自己的判断,值太大Spark不会理会val localRdd3: RDD[String] = sparkContext.textFile("data/words.txt", 100)println("localRdd3的分区数"+localRdd3.getNumPartitions)}
}

代码示例(读取目录下的所有文件)

package com.wunaiieq//1.导入类
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}object CreateByWholeTextFiles {def main(args: Array[String]): Unit = {//2.构建SparkConf对象,并设置本地运行和程序名称val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("WholeTextFiles")//3.使用sparkconf对象构建SparkContet对象val sparkContext = new SparkContext(sparkConf)//5.读取指定目录下的小文件val rdd: RDD[(String, String)] = sparkContext.wholeTextFiles("data")val tuples: Array[(String, String)] = rdd.collect()tuples.foreach(ele=>println(ele._1,ele._2))//6.获取小文件中的内容val array: Array[String] = rdd.map(_._2).collect()println("---------------------------")println(array.mkString("|"))//4.关闭sparkContext对象sparkContext.stop()}
}

算子

详见如下专题RDD算子集合

DAG

详见如下专题DAG专题

SparkSQL

详见如下专题SparkSQL专题

SparkStreaming

详见如下专题SparkStreaming专题

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

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

相关文章

SQL多表联查、自定义函数(字符串分割split)、xml格式输出

记录一个报表的统计&#xff0c;大概内容如下&#xff1a; 多表联查涉及的报表有&#xff1a;房间表、买家表、合同表、交易表、费用表、修改记录表 注意&#xff1a;本项目数据库使用的是sqlserver&#xff08;mssql&#xff09;&#xff0c;非mysql。 难点1:业主信息&#…

实用操作系统学习笔记

第1章 操作系统概述 操作系统基本概念 【基础知识】 操作系统&#xff1a;控制和管理整个计算机系统的硬件和软件资源&#xff0c;合理地组织、调度计算机的工作与资源的分配&#xff0c;进而为用户和其他软件提供方便接口与环境的程序集合。操作系统是计算机系统中最基本的…

硬件设计-齐纳管

目录 摘要 详情 齐纳管的工作电流、 摘要 齐纳管&#xff08;Zener Diode&#xff09;是一种特殊的二极管&#xff0c;它能够在特定的反向电压下保持电流稳定。正常情况下&#xff0c;二极管只允许正向电流通过&#xff0c;而阻止反向电流流过。而齐纳管在一定的反向电压下可…

linux网络 | https前置知识 | 数据加密与解密、数据摘要

前言:本节内容讲述https的相关内容。 https博主会着重讲解https如何让一个请求和一个响应能够安全的进行交互。 https博主将用两篇文章进行讲解。本篇是两篇中第一篇。会把http的安全问题引出来&#xff0c; 然后说一下https的基本解决方法。 下面废话不多说&#xff0c; 开始我…

小目标检测难点分析和解决策略

目录 一、背景 二、检测难点 三、主流改进方法 3.1 基于改进数据增强的小目标检测算法 3.1.1 监督数据增强方法 3.1.2 无监督数据增强方法 3.2. 基于改进特征提取的小目标检测算法 3.2.1. 扩张卷积 3.2.2. 特征增强 3.2.3. 多尺度特征提取 3.2.4. 注意力机制 3.3 基…

Java 继承

目录 1. 继承概述 2. 继承好处 3. 继承格式 4. 继承规定 5. debug 调试 6. 方法重写 6.1 概述 6.2 规定 7. super 关键字 7.1 概述 7.2 使用 7.3 在构造器中使用 8. 子类对象实例化的全过程 9. 练习 1. 继承概述 举例&#xff1a;Person 类中有name&#xff0c…

CES Asia 2025科技盛宴,AI智能体成焦点

2025第七届亚洲消费电子技术展&#xff08;CES Asia赛逸展&#xff09;将在北京拉开帷幕&#xff0c;AI智能体有望成为展会的核心亮点。 深圳市人工智能行业协会发文表示全力支持CES Asia 2025&#xff08;赛逸展&#xff09;&#xff0c;称其为人工智能领域的创新发展提供了强…

HTMLHTML5革命:构建现代网页的终极指南 - 0. 课程目录设计

结构清晰&#xff0c;层层递进 课程从基础知识&#xff08;如HTML学前必知&#xff09;开始&#xff0c;逐步深入到高级应用&#xff08;如PWA配置和WebApp优化&#xff09;。每个模块都有明确的目标&#xff0c;适合零基础学员逐步掌握HTML。 覆盖范围广 这套课程涵盖了HTM…

大型语言模型(LLM)中的tokens是什么

大型语言模型(LLM)中的tokens是什么 在大型语言模型(LLM)中,tokens是文本处理的基本单位,它可以是一个单词、一个字符、一个标点符号,或者是一个特殊的标记。以下是关于tokens的详细介绍及举例: 一、tokens的定义和作用 定义:tokens是将文本分割成的一个个有意义的…

嵌入式C语言:二维数组

目录 一、二维数组的定义 二、内存布局 2.1. 内存布局特点 2.2. 内存布局示例 2.2.1. 数组元素地址 2.2.2. 内存布局图&#xff08;简化表示&#xff09; 2.3. 初始化对内存布局的影响 三、访问二维数组元素 3.1. 常规下标访问方式 3.2. 通过指针访问 3.2.1. 指向数…

Java进阶-在Ubuntu上部署SpringBoot应用

随着云计算和容器化技术的普及&#xff0c;Linux 服务器已成为部署 Web 应用程序的主流平台之一。Java 作为一种跨平台的编程语言&#xff0c;具有广泛的应用场景。本文将详细介绍如何在 Ubuntu 服务器上部署 Java 应用&#xff0c;包括环境准备、应用发布、配置反向代理&#…

node-sass@4.14.1报错的最终解决方案分享

输入npm i全安装文件所需的依赖的时候&#xff0c;博主是使用sass去书写的&#xff0c;使用的是node-sass4.14.1和sass-loader7.3.1的版本的&#xff0c;安装的时候老是出现错误&#xff0c; node-sass4.14.1版本不再被支持的原因 node-sass 是一个基于 LibSass 的 Node.js 绑…

Java设计模式 —— 【行为型模式】命令模式(Command Pattern) 详解

文章目录 模式介绍优缺点适用场景结构案例实现注意事项 模式介绍 有时候需要向某些对象发送请求&#xff0c;但是并不知道请求的接收者是谁&#xff0c;也不知道被请求的操作是什么。此时希望用一种松耦合的方式来设计程序&#xff0c;使得请求发送者和请求接收者能够消除彼此…

Vue3初学之组件通信

一起进行学习&#xff1a; 在 Vue 3 中&#xff0c;组件通信是一个非常重要的概念&#xff0c;它决定了如何在父子组件之间、兄弟组件之间以及跨层级组件之间传递数据和事件。以下是 Vue 3 中常见的组件通信方式&#xff1a; 父子组件通信 1.1 父组件向子组件传递数据&#x…

springBoot整合ELK Windowsb版本 (elasticsearch+logstash+kibana)

springBoot整合ELK Windowsb版本 【elasticsearchlogstashkibana】 下载软件启动服务1、elasticsearch2、kibana3、logstash 集成springboot1、添加依赖2、在logback.xml添加相关配置3、修改logstash 配置4、重启logstash 最后测试 下载软件 elasticsearch 官网 https://www.…

选择器css

1.a标签选择 // 选中所具有herf 的元素 [herf] {color: skyblue; } // 选中所具有herfhttps://fanyi.youdao.com/ 的元素 [herf$"youdao.com"] {color:pink; } // 按此顺序书写 link visited hover active // 未访问状态 a:link {color:orange } // 访问状态 a…

数据结构大作业——家谱管理系统(超详细!完整代码!)

目录 设计思路&#xff1a; 一、项目背景 二、功能分析 查询功能流程图&#xff1a; 管理功能流程图&#xff1a; 三、设计 四、实现 代码实现&#xff1a; 头文件 结构体 函数声明及定义 创建家谱树头结点 绘制家谱树&#xff08;打印&#xff09; 建立右兄弟…

TDC-GP30 Data Sheet

4 特殊服务功能 4.1 看门狗 系统复位后,GP30的看门狗功能被启用。大约13秒后,如果看门狗计时器在此之前未被清除,则看门狗会重置芯片。这通常由固件使用clrwtd命令完成,以便在固件因任何原因未清除看门狗时,系统会发生复位。看门狗时间基于一个未稳定的10 kHz内部振荡器时…

【物流管理系统 - IDEAJavaSwingMySQL】基于Java实现的物流管理系统导入IDEA教程

有问题请留言或私信 步骤 下载项目源码&#xff1a;项目源码 解压项目源码到本地 打开IDEA 左上角&#xff1a;文件 → 新建 → 来自现有源代码的项目 找到解压在本地的项目源代码文件&#xff0c;点击确定&#xff0c;根据图示步骤继续导入项目 查看项目目录&#xff…

基于单片机的指纹密码锁

【摘要】 本设计是一款基于单片机的指纹识别电子密码锁系统。该系统以STC89C52单片机作为模块核心同时结合ZFM-60指纹模块实现录取指纹并存储指纹数据的功能&#xff0c;并且通过HS12864-15C液晶显示比对流程及比对结果&#xff0c;该指纹电子密码锁通过直流继电器与发光二极管…