Spark(1):不依賴Hadoop搭建Spark環境

不依賴Hadoop搭建Spark環境

  • 0 概述
  • 1 單機安裝Spark
    • 1.1 下載Spark預編譯包
    • 1.2 解壓和設置
    • 1.3 配置環境變量
    • 1.4 驗證安裝
  • 2 Spark運行模式
    • 2.1 Local模式(本地模式)
      • 2.1.1 Spark Shell
        • 2.1.1.1 Python版的Shell
        • 2.1.1.2 Scala版的Shell
      • 2.1.2 提交獨立的Spark應用
    • 2.2 Local Cluster模式(本地集群模擬模式)
    • 2.3 Standalone模式(獨立集群模式)
      • 2.3.1 修改主機名
      • 2.3.2 配置免密登陸
      • 2.3.3 配置master機器
      • 2.3.4 配置worker節點
      • 2.3.5 啟動集群
  • 3 總結

大家好,我是歐陽方超,公眾號同名。

在這里插入圖片描述

0 概述

Spark環境不依賴Hadoop就可以搭建起來,這對新手小白來說無疑提供了極大的便利。本篇就介紹一下如何在不安裝Hadoop的情況下搭建Spark環境。本文使用的Java、Python版本分別是1.8.0_201、3.11.13。

1 單機安裝Spark

1.1 下載Spark預編譯包

訪問Spark官網下載頁面:https://spark.apache.org/downloads.html
選擇以下選項:
Spark版本:建議選擇最新的穩定版
Package type:選擇 "Pre-built for Apache Hadoop 3.3 and later"2

選擇項推薦值說明
Spar版本最新的穩定版新版本通常性能更好且修復了已知問題
Package類型Pre-built for Apache Hadoop 3.3 and later這種包內包含了常用的Hadoop依賴,無需單獨安裝Hadoop即可運行
下載格式.tgz壓縮包適用于Linux和Mac系統

下圖為我在下載時所做的選擇。
在這里插入圖片描述

1.2 解壓和設置

解壓下載的Spark壓縮包

[root@192 softwares]# tar -zxvf spark-3.5.6-bin-hadoop3

1.3 配置環境變量

將Spark的可執行文件路徑添加到PATH中,這樣就可以在終端中運行Spark相關命令了。編輯/etc/profile文件,在末尾追加如下內容:

export SPARK_HOME=/softwares/spark-3.5.6-bin-hadoop3
export PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH

保存后,運行以下命令使之生效:

source /etc/profile

1.4 驗證安裝

現在可以通過Spark的內置示例驗證安裝是否成功,

run-example SparkPi 10

以上命令是在執行 Spark 自帶的示例程序 SparkPi,該程序的作用是用分布式計算的方式近似計算圓周率 π 的值。其中參數 10 表示將任務劃分成 10 個分區(或切片),Spark 會將計算 π 的任務分成 10 個子任務并行執行。
命令在運行時會輸出包含日志在內的很多內容:

[root@192 softwares]# run-example SparkPi 10
25/08/31 03:14:06 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
25/08/31 03:14:06 INFO SparkContext: Running Spark version 3.5.6
25/08/31 03:14:06 INFO SparkContext: OS info Linux, 3.10.0-1160.el7.x86_64, amd64
25/08/31 03:14:06 INFO SparkContext: Java version 1.8.0_201
25/08/31 03:14:06 INFO ResourceUtils: ==============================================================
25/08/31 03:14:06 INFO ResourceUtils: No custom resources configured for spark.driver.

其中有一個如下的關鍵內容,就是所計算的π的結果,看到這個結果說明Spark已經安裝成功。

Pi is roughly 3.142363142363142

2 Spark運行模式

在不安裝Hadoop的情況下,Spark支持以下幾種運行模式,Local模式(本地模式)、Local Cluster模式(本地集群模擬模式)、Standalone模式(獨立集群模式)、Kubernetes模式、Mesos模式。注意,Spark本身不是一個像MySQL或Nginx那樣一直運行的“服務”,但它運行時會啟動進程并占用端口。

2.1 Local模式(本地模式)

在這種模式下,Spark運行在單個JVM進行中,使用多線程模擬分布式計算。不需要任何集群管理器,適合測試和調試,支持多線程并行。有兩種方式可以以Local模式使用Spark,一種是Spark Shell,另一種是提交獨立的Spark應用。其中Spark Shell又分為Python版的Shell和Scala版的Shell,分別使用pyspark和spark-shell命令進入相應的shell。

2.1.1 Spark Shell

2.1.1.1 Python版的Shell

由于已經為Spark配置過環境變量,所以直接在終端任意位置輸入pyspark即可進入Python版的shell:

[root@192 softwares]# pyspark
Python 3.11.13 (main, Aug 31 2025, 00:02:26) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
25/08/31 03:35:58 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Welcome to____              __/ __/__  ___ _____/ /___\ \/ _ \/ _ `/ __/  '_//__ / .__/\_,_/_/ /_/\_\   version 3.5.6/_/Using Python version 3.11.13 (main, Aug 31 2025 00:02:26)
Spark context Web UI available at http://192.168.152.136:4040
Spark context available as 'sc' (master = local[*], app id = local-1756636559084).
SparkSession available as 'spark'.
>>> 

在Python版的Shell中可以執行一下基本的操作,如下面的創建RDD并查看其內容的操作:

>>> # 從集合創建RDD
>>> data = [1, 2, 3, 4, 5]
>>> rdd = sc.parallelize(data)
>>> # 查看RDD內容
>>> rdd.collect()
[1, 2, 3, 4, 5]                                                                 
>>>

在執行pyspark時,是可以加參數的,比如寫成下面的形式:

pyspark --master local[4] --driver-memory 2g

其中
–master local 表示使用本地模式,利用4個線程運行;
–driver-memory 2g 指定Driver程序使用2GB內存。

2.1.1.2 Scala版的Shell

在終端輸入spark-shell進入Scala版的Shell:

[root@192 spark-3.5.6-bin-hadoop3]# spark-shell 
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
25/08/31 03:45:57 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
25/08/31 03:45:59 WARN Utils: Service 'SparkUI' could not bind on port 4040. Attempting port 4041.
Spark context Web UI available at http://192.168.152.136:4041
Spark context available as 'sc' (master = local[*], app id = local-1756637159380).
Spark session available as 'spark'.
Welcome to____              __/ __/__  ___ _____/ /___\ \/ _ \/ _ `/ __/  '_//___/ .__/\_,_/_/ /_/\_\   version 3.5.6/_/Using Scala version 2.12.18 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_201)
Type in expressions to have them evaluated.
Type :help for more information.scala> 

同樣也可以進行一些基本操作:

scala> val data = Array(1, 2, 3, 4, 5)
data: Array[Int] = Array(1, 2, 3, 4, 5)scala> val distData = sc.parallelize(data)   // sc是SparkContext內置對象
distData: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at <console>:24
scala> // 對數據做map變換,乘以2
scala> val doubled = distData.map(x => x * 2)
doubled: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD[1] at map at <console>:23
scala> 
scala> // 收集結果并打印
scala> doubled.collect().foreach(println)
2                                                                               
4
6
8
10
scala> // 過濾出大于5的元素
scala> val filtered = doubled.filter(_> 5)
filtered: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD[2] at filter at <console>:23
scala> filtered.collect().foreach(println)
6
8
10
scala> val sum = filtered.reduce(_ + _)
sum: Int = 24scala> print(sum)
24

在執行spark-shell命令時,也可以加參數,用法同執行pyspark時所加的參數。
進入兩種版本的Spark Shell后,可以通過訪問Spark Web UI的方式來驗證Spark是否處于運行狀態,可以在瀏覽器輸入ip:4040來訪問頁面:
在這里插入圖片描述

2.1.2 提交獨立的Spark應用

提交獨立的Spark應用也可以觸發Spark的運行,所謂提交獨立的Spark應用,可以這樣理解,就是把自己的完整程序(Python、Scala、Java)交給Spark去執行,這里Spark充當分布式計算的統一執行平臺,負責調度和管理計算資源,執行你的應用邏輯。

from pyspark.sql import SparkSession# 創建spark會話
spark = SparkSession.builder.appName("WordCount").getOrCreate()
# 得到SparkContext對象
sc = spark.sparkContext# 讀取文本文件得到分布式數據集RDD
lines = sc.textFile("/softwares/words.txt")
# 進行詞頻統計,flatMap將每行拆分成單詞,展平成多個單詞組成的RDD。map將每個單詞映射成鍵值對 (word, 1)。reduceByKey對相同單詞的值進行累加,實現計數。
word_counts = lines.flatMap(lambda line: line.split()).map(lambda word: (word, 1)).reduceByKey(lambda a, b: a + b)
# 將結果保存到指定目錄
word_counts.saveAsTextFile("/softwares/outwords")
# 關閉Spark會話
spark.stop()

執行spark-submit wordcount.py 命令向Spark提交任務,由Spark來執行分布式計算,輸出日志非常長,這里只貼出一部分(結尾部分和開頭部分的日志):

[root@192 softwares]# spark-submit wordcount.py 
開頭部分的日志
25/08/31 07:27:46 INFO SparkContext: Running Spark version 3.5.6
25/08/31 07:27:46 INFO SparkContext: OS info Linux, 3.10.0-1160.el7.x86_64, amd64
25/08/31 07:27:46 INFO SparkContext: Java version 1.8.0_201
25/08/31 07:27:46 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
25/08/31 07:27:46 INFO ResourceUtils: ==============================================================
25/08/31 07:27:46 INFO ResourceUtils: No custom resources configured for spark.driver.
25/08/31 07:27:46 INFO ResourceUtils: ==============================================================
25/08/31 07:27:46 INFO SparkContext: Submitted application: WordCount結尾部分的日志
25/08/31 07:27:56 INFO SparkUI: Stopped Spark web UI at http://192.168.152.137:4040
25/08/31 07:27:56 INFO MapOutputTrackerMasterEndpoint: MapOutputTrackerMasterEndpoint stopped!
25/08/31 07:27:56 INFO MemoryStore: MemoryStore cleared
25/08/31 07:27:56 INFO BlockManager: BlockManager stopped
25/08/31 07:27:56 INFO BlockManagerMaster: BlockManagerMaster stopped
25/08/31 07:27:56 INFO OutputCommitCoordinator$OutputCommitCoordinatorEndpoint: OutputCommitCoordinator stopped!
25/08/31 07:27:56 INFO SparkContext: Successfully stopped SparkContext
25/08/31 07:27:56 INFO ShutdownHookManager: Shutdown hook called
25/08/31 07:27:56 INFO ShutdownHookManager: Deleting directory /tmp/spark-00e7ab02-1f2c-4861-9de6-16ed3ced686b
25/08/31 07:27:56 INFO ShutdownHookManager: Deleting directory /tmp/spark-a816c18c-202f-4b91-aa79-d32821644f77/pyspark-23d851b4-546f-4c1b-8816-bb30775d9966
25/08/31 07:27:56 INFO ShutdownHookManager: Deleting directory /tmp/spark-a816c18c-202f-4b91-aa79-d32821644f77

執行完畢后,會在指定的輸出目錄中生成下面兩個文件:

[root@192 softwares]# cd outwords/
[root@192 outwords]# ll
總用量 4
-rw-r--r--. 1 root root 50 831 07:27 part-00000
-rw-r--r--. 1 root root  0 831 07:27 _SUCCESS

part-00000這個文件里存放的是數據處理結果,不妨看下結果:

[root@192 outwords]# cat part-00000 
('test', 1)
('hello', 1)
('ketty', 1)
('word', 1)

2.2 Local Cluster模式(本地集群模擬模式)

這種模式是在單臺機器上模擬一個Spark集群環境,這種模式尤其適合沒有Hadoop環境時的開發和測試工作。啟動命令pyspark需要加參數,語法如下(以pyspark為例):

pyspark --conf "spark.master=local-cluster[numNodes, coresPerNode, memoryPerNode]"

spark.master是Spark應用的主節點(master)的配置參數,決定了Spark應用運行的模式。local-cluster[numNodes, coresPerNode, memoryPerNode]表示本地模擬一個Spark集群,nmNodes是模擬集群中節點(word)的數量,coresPerNode是每個節點的CPU核心數,memoryPerNode是每個節點分配的內存數。
執行下面的命令進入Local Cluster模式,使用兩個節點,每個節點分配一個CPU核心和1G內存:

[root@192 softwares]# pyspark --conf "spark.master=local-cluster[2,1,1024]"

執行下面的代碼:

text = ["hello world", "hello spark", "spark is fast"]
rdd = sc.parallelize(text)word_counts = rdd.flatMap(lambda line: line.split(" ")) \.map(lambda word: (word, 1)) \.reduceByKey(lambda a, b: a + b)# Check the execution plan
print(word_counts.toDebugString().decode('utf-8'))
word_counts.collect()

執行結果:

>>> text = ["hello world", "hello spark", "spark is fast"]
>>> rdd = sc.parallelize(text)
>>> 
>>> word_counts = rdd.flatMap(lambda line: line.split(" ")) \
...                 .map(lambda word: (word, 1)) \
...                 .reduceByKey(lambda a, b: a + b)
>>> 
>>> # Check the execution plan
>>> print(word_counts.toDebugString().decode('utf-8'))
(2) PythonRDD[11] at RDD at PythonRDD.scala:53 []|  MapPartitionsRDD[10] at mapPartitions at PythonRDD.scala:160 []|  ShuffledRDD[9] at partitionBy at NativeMethodAccessorImpl.java:0 []+-(2) PairwiseRDD[8] at reduceByKey at <stdin>:3 []|  PythonRDD[7] at reduceByKey at <stdin>:3 []|  ParallelCollectionRDD[6] at readRDDFromFile at PythonRDD.scala:289 []
>>> word_counts.collect()
[('hello', 2), ('fast', 1), ('world', 1), ('spark', 2), ('is', 1)]              
>>>

從命令行的執行結果,似乎也看不出來Local Cluster模式與Local模式有什么區別,但是從Web UI上還是能看出些區別的,比如下圖中Alive Workers顯示為2。
在這里插入圖片描述
還有一些其他區別,歸納成下表形式:

特性Local 模式Local Cluster 模式
進程數1個JVM進程多個JVM進程(模擬分布式)
資源隔離無隔離模擬資源隔離
適用場景簡單測試模擬分布式環境測試
Web UI端口4040端口4041、4042…等端口
啟動命令local[N]local-cluster[N,M,mem]

2.3 Standalone模式(獨立集群模式)

這種模式是由多臺機器組成的Spark集群,通過Spark自帶的集群管理器實現任務的調度與執行,每臺服務器部署Spark守護進程,包括Master和多個Worker,Master負責集群資源管理和任務調度,Worker運行Executor執行任務,啟動前需配置集群環境,支持多用戶并發使用。

2.3.1 修改主機名

這里規劃三臺機器,三臺機器的名稱分別命為centos7-master、centos7-node1、centos7-node2,一臺機器作為Master節點,負責集群管理和調度,其余兩臺作為Worker節點,負責執行計算任務。
設置主機名之前最好先查看一下主機名,可以使用下面的命令:

hostname

如果確定要修改主機名的話,可以使用下面的命令(當然還有其他方式):

hostnamectl set-hostname 新主機名

該命令會更新/etc/hostname文件,并立即生效。
然后在每臺機器的/etc/hosts文件中都寫入三臺機器IP與主機名的映射關系,便于機器之間通過主機名進行訪問:

#master
192.168.152.152 centos7-master
#node1
192.168.152.151 centos7-node1
#node2
192.168.152.150 centos7-node2

2.3.2 配置免密登陸

Spark的Master節點需要遠程管理和啟動各個Worker節點的進程,免密登錄使Master節點無障礙地遠程執行命令,無需每次都輸入密碼,保證集群自動化管理。
之前三臺機器設置的主機名為centos7-master、centos7-node1、centos7-node2,先在centos7機器上生成SSH密鑰對,一路回車使用默認路徑(~/.ssh/id_rsa),不設置密碼:

ssh-keygen -t rsa

然后,使用ssh-copy-id命令將公鑰復制到另外兩臺機器上:

ssh-copy-id centos7-node1
ssh-copy-id centos7-node2

若沒有ssh-copy-id工具,也可手動復制~/.ssh/id_rsa.pub內容添加到目標機器~/.ssh/authorized_keys文件。
然后在另外兩臺機器上也執行同樣的操作,目的就是保證每個機器上都有另外兩臺機器產生的公鑰。
接著可以使用ssh命令測試機器間登錄是否已經免密了。
配置好免密登錄后,Master節點就能無密碼遠程管理Worker節點,啟動和停止Spark進程時無需人工干預。

2.3.3 配置master機器

在master節點要創建兩個配置文件,workers和spark-en.sh。
進入Spark解壓目錄的config文件夾,基于workers.template文件復制workers文件(使用cp命令),接著編輯workers文件,寫入Worker節點的主機名或IP地址:

centos7-node1
centos7-node2

同樣在config文件夾中,復制出一份spark-env.sh文件,master節點的spark-env.sh文件主要配置以下內容:

export JAVA_HOME=/softwares/jdk1.8.0_201export SPARK_MASTER_HOST=centos7-masterexport SPARK_MASER_PORT=7077export SPARK_MASTER_WEBUI_PORT=8080

JAVA_HOME:Java路徑
SPARK_MASTER_HOST:Master節點綁定的主機名(或IP),這是必須配置的
SPARK_MASTER_PORT:Master節點監聽的端口號,默認7077端口,Worker和Driver通過這個端口連接到Master,如果該端口沒被占用,可以不設置
SPARK_MASTER_WEBUI_PORT:訪問Spark Standalone集群的界面(Master Web UI)端口(默認為8080)

2.3.4 配置worker節點

worker節點中不需要配置workers文件,只需配置spark-env.sh文件,需要配置的內容跟master節點上配置的稍微有所不同,具體來說只需配置JAVA_HOME和一些資源參數即可:

export JAVA_HOME=/softwares/jdk1.8.0_201
export SPARK_WORKER_CORES=2
export SPARK_WORKER_MEMORY=4g

SPARK_WORKER_CORES=2表示該Worker節點上分配給Spark任務執行的CPU核心數為2個,SPARK_WORKER_MEMORY=4g表示該Worker節點分配給Spark任務執行的最大內存為4GB。

2.3.5 啟動集群

在Master節點運行:

./sbin/start-master.sh
./sbin/start-slaves.sh

或直接運行一鍵啟動:

./sbin/start-all.sh

jps命令查看進程
可以通過在每個節點上查看進程的方式(執行jps命令)驗證集群是否啟動成功:

[root@centos7-master ~]# jps
13779 Jps
13695 Master
[root@centos7-node1 ~]# jps
12485 Worker
12573 Jps
[root@centos7-node2 ~]# jps
12247 Worker
12365 Jps

訪問Web UI
Spark集群啟動后,可以通過主機IP:默認端口名方式方式集群的界面
在這里插入圖片描述

3 總結

如果暫時沒有Hadoop環境,又想使用Spark,Spark提供了Local模式、Local Cluster模式、Standalone三種模式,這三種模式允許開發者在不使用Hadoop的情況也能搭建Spark環境。
我是歐陽方超,把事情做好了自然就有興趣了,如果你喜歡我的文章,歡迎點贊、轉發、評論加關注。我們下次見。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/99081.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/99081.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/99081.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【ThreeJs】【自帶依賴】Three.js 自帶依賴指南

&#x1f6e0;? Three.js 輔助庫生態手冊 定位&#xff1a;覆蓋 90% 開發場景的工具選型實操指南&#xff0c;區分「入門必備」和「進階擴展」。 適用人群&#xff1a;Three.js 新手&#xff08;≥ r132 版本&#xff09;、需要規范開發流程的團隊。 1. 控制器&#xff08;Co…

Mac電腦上如何打印出字體圖標

背景 我今天打開了一個之前開發的APP&#xff0c;看到項目中用到了字體圖標&#xff0c;發現有個“面條”圖標用錯了&#xff0c;想著修改一下吧。然后用輸入法打出”面條“&#xff0c;在輸入法的彈窗中就一直往下找&#xff0c;發現并沒有出現圖標。 想著打出”面條圖標“也沒…

當AI遇上數據庫:Text2Sql.Net如何讓“說人話查數據“成為現實

一句話概括&#xff1a;還在為寫復雜SQL而頭疼&#xff1f;Text2Sql.Net讓你用自然語言就能查數據庫&#xff0c;堪稱程序員的"數據庫翻譯官"&#xff01; &#x1f3af; 引言&#xff1a;從"SQL地獄"到"自然語言天堂" 想象一下這樣的場景&…

整體設計 之 緒 思維導圖引擎 之 引 認知系統 之8 之 序 認知元架構 之4 統籌:范疇/分類/目錄/條目 之2 (豆包助手 之6)

問題Q68、我們現在僅僅分析了 認知演進 的 “進”的問題&#xff0c;通過層次結構 和 統籌 的同構約束 給出了 不同對象及其對應的操作和約束。 --這句話 你能完全理解嗎&#xff08;這意味著 完整的程序細節設計&#xff09;。 還沒有分析的還有 “演” 以及組合詞 “演進” -…

開始 ComfyUI 的 AI 繪圖之旅-Qwen-Image-Edit(十二)

文章標題一、Qwen-Image-Edit1.ComfyOrg Qwen-Image-Edit 直播回放2.Qwen-Image-Edit ComfyUI 原生工作流示例2.1 工作流文件2.2 模型下載3.3 按步驟完成工作流一、Qwen-Image-Edit Qwen-Image-Edit 是 Qwen-Image 的圖像編輯版本&#xff0c;基于20B模型進一步訓練&#xff0c…

機械制造專屬ERP:降本增效與數字轉型的關鍵

轉型升級壓力下&#xff0c;ERP系統是機械企業破局的得力助手。本文深入解析ERP的核心功能、選型要點與實施價值&#xff0c;助您精準選型&#xff0c;賦能智能制造&#xff0c;全面提升競爭力。在數字化浪潮席卷之下&#xff0c;機械制造企業正面臨提質、增效、降本的關鍵轉型…

npm / yarn / pnpm 包管理器對比與最佳實踐(含國內鏡像源配置與緩存優化)

這篇不是“誰更快”的玄學討論,而是把團隊能落地的做法一次說清:如何選型、如何統一版本、如何把鏡像與緩存配好、如何在 CI 和 Monorepo 下穩住“可重復構建”。 一、結論先說在前 單倉庫 / 以穩定為先:直接用 npm(配合 npm ci) 足夠,維護成本低,生態一等一,Node 16.1…

Python項目全面打包指南:從EXE到綠色軟件包

?? Python項目全面打包指南:從EXE到綠色軟件包 文章目錄 ?? Python項目全面打包指南:從EXE到綠色軟件包 1 打包基礎概念與工具選型 1.1 核心打包概念 1.2 工具對比與選型 2 項目環境準備與依賴管理 2.1 創建和管理虛擬環境 2.2 依賴管理最佳實踐 2.3 依賴導出與規范文件處…

JAVA:Spring Boot 集成 FFmpeg 實現多媒體處理

1、簡述 在現代 Web 應用中,音視頻處理需求越來越常見,例如:視頻轉碼、截圖、音頻提取、格式轉換等。FFmpeg 是一個功能極其強大的開源音視頻處理工具,可以幫助我們高效完成這些任務。本文將介紹如何在 Spring Boot 項目中集成 FFmpeg,并實現一些常見的應用場景。 2、為什…

推薦一款智能三防手機:IP68+天璣6300+PoC對講+夜視

在戶外探險、工業巡檢及應急通信等專業領域&#xff0c;傳統智能手機往往難以應對復雜苛刻的環境挑戰。智能三防手機憑借其堅固的機身、專業的防護能力及定制化功能&#xff0c;成為眾多行業用戶的可靠工具。本文將深入解析一款集IP68防護、天璣6300處理器、PoC公網對講及夜視等…

ego(4)---檢測B樣條軌跡的障礙物進入點與退出點

障礙物進出點檢測的作用在經過 B 樣條的控制點采樣后&#xff0c;接下來是繞障的環節&#xff0c;繞障使用的是 Astar &#xff0c;但在使用 Astar 之前&#xff0c;需要進行障礙物進出點的檢測與標記。通俗點講&#xff0c;這部分的作用就是為 Astar 繞障礙做前置準備。檢測進…

在springboot中使用mock做controller層單元測試,請求示例包括GET(帶參數)、POST(帶請求頭)、下載文件、上傳文件等

以下是SpringBoot中使用MockMvc進行Controller層單元測試的完整示例,涵蓋GET帶參數、POST帶請求頭、文件下載和文件上傳等場景: GET請求測試(帶路徑參數) @Test void testGetWithPathParam() throws Exception {mockMvc.perform(MockMvcRequestBuilders.

領碼SPARK融合平臺 · TS × Java 雙向契約:構建穩定可演進的全棧系統——落地篇|配置即契約,守衛即護欄

系列總引 本系列致力于構建可復制、可演進的低代碼平臺類型治理閉環&#xff0c;從原理到落地、AI 驅動到性能治理。落地篇聚焦工程實踐&#xff0c;通過“契約單源 → 自動生成 → 前后端守衛協同 → CI/CD 管控”的完整流水線&#xff0c;將原理篇的類型方法論落到生產環境中…

Gradio全解11——Streaming:流式傳輸的視頻應用(8)——Gemini Live API:實時音視頻連接

Gradio全解11——Streaming&#xff1a;流式傳輸的視頻應用&#xff08;8&#xff09;——Gemini Live API&#xff1a;實時音視頻連接11.8 Gemini Live API&#xff1a;實時音視頻連接11.8.1 Live API——入門1. Live API技術與功能介紹2. 選擇音頻生成架構和實施方案3. 異步發…

事務學習總結

目錄 事務四大特性 事務四種隔離級別 事務七種傳播行為 事務四大特性 原子性Atomicity 要么同時成功&#xff0c;要么同時失敗。事務一旦發生失敗就會回滾到原來最初的樣子&#xff0c;仿佛沒有發生過一樣 一致性Consistency 事務處理前后&#xff0c;數據完整性要保持一…

JavaWeb--day4--WebHttp協議Tomcat

&#xff08;以下內容全部來自上述課程及課件&#xff09; 這里maven我學過了&#xff0c;可見&#xff1a;Maven項目管理–基礎篇&#xff0c;所以跳過 SpringBootWeb 1. 需求 需求&#xff1a;基于SpringBoot的方式開發一個web應用&#xff0c;瀏覽器發起請求/hello后&…

網絡相關知識整理

負載均衡負載均衡&#xff08;Load Balancing&#xff09;是一種分布式系統技術&#xff0c;核心作用是將網絡流量、計算任務或數據請求均勻分配到多個服務器&#xff08;或資源節點&#xff09;&#xff0c;避免單個節點因負載過高而性能下降或崩潰&#xff0c;從而提升系統的…

C++(繼承和多態)

目錄 訪問權限&#xff1a; 繼承&#xff1a; 示例&#xff1a; 構造和析構順序&#xff1a; 多態&#xff1a; 示例&#xff1a; 非虛函數重寫&#xff1a; 虛函數&#xff1a; 示例&#xff1a; 純虛函數&#xff1a; 繼承是C中面向對象編程的核心特性之一&#xf…

07_Softmax回歸、損失函數、分類

1. Softmax回歸 ① Softmax回歸雖然它的名字是回歸&#xff0c;其實它是一個分類問題。2. 回歸VS分類3. Kaggle分類問題4. 回歸到分類5. 交叉熵損失6. 總結7. 損失函數 ① 三個常用的損失函數 L2 loss、L1 loss、Huber’s Robust loss。8. L2 Loss ① 藍色曲線為當y0時&#xf…

UFO2:微軟推出的新一代桌面 Agent 操作系統,深度整合 Windows 與智能自動化

本文轉載自&#xff1a;https://www.hello123.com/ufo ** 一、微軟 UFO&#xff1a;Windows 桌面智能體操作系統的革新與實戰解析 &#x1f4bb; 微軟 UFO&#xff08;Unified Functional Optimization Operating System&#xff09;是微軟在 2025 年對其開源智能體系統 Agen…