Apache Spark 是一個強大的分布式計算框架,但在本地模式下,它也可以作為一個單機程序運行,非常適合開發和測試階段。以下是一個簡單的示例,展示如何在本地模式下搭建和運行 Spark 程序。
一、環境準備
-
安裝 Java
Spark 需要 Java 環境,確保你的系統中安裝了 Java 8 或更高版本。可以通過以下命令檢查 Java 版本:java -version
如果未安裝 Java,可以從 Oracle 官網下載并安裝。
-
下載并解壓 Spark
從 Apache Spark 官方網站下載最新版本的 Spark。選擇預編譯的二進制包(如spark-3.4.0-bin-hadoop3.2.tgz
)。
下載完成后,解壓到一個目錄,例如:tar -xzf spark-3.4.0-bin-hadoop3.2.tgz -C /opt/ cd /opt/spark-3.4.0-bin-hadoop3.2
-
配置環境變量(可選)
為了方便使用,可以將 Spark 的bin
目錄添加到系統的環境變量中。編輯~/.bashrc
或~/.zshrc
文件,添加以下內容:export SPARK_HOME=/opt/spark-3.4.0-bin-hadoop3.2 export PATH=$SPARK_HOME/bin:$PATH
然后運行以下命令使配置生效:
source ~/.bashrc
二、運行 Spark Shell
Spark Shell 是一個交互式的 Scala 命令行工具,可以用來快速測試 Spark 代碼。在本地模式下運行 Spark Shell 的命令如下:
spark-shell --master local[*]
--master local[*]
表示在本地模式下運行,[*]
表示使用所有可用的 CPU 核心。
運行后,你會看到類似以下的輸出,表示 Spark Shell 已經啟動:
Welcome to____ __/ __/__ ___ _____/ /___\ \/ _ \/ _ `/ __/ '_//__ / .__/\_,_/_/ /_/\_\ version 3.4.0/_/Using Scala version 2.12.10, OpenJDK 64-Bit Server VM, 1.8.0_282
Type in expressions to have them evaluated.
Type :help for more information.scala>
三、運行一個簡單的 Spark 示例
在 Spark Shell 中,你可以直接編寫和運行 Spark 程序。以下是一個簡單的示例,用于計算一個文本文件中單詞的出現次數。
-
準備數據文件
創建一個簡單的文本文件example.txt
,內容如下:Hello Spark Hello World Spark is great
-
編寫 Spark 程序
在 Spark Shell 中,運行以下代碼:// 讀取文本文件 val textFile = spark.read.textFile("example.txt")// 計算單詞出現次數 val wordCounts = textFile.flatMap(line => line.split(" ")) // 按空格分割單詞.map(word => (word, 1)) // 將每個單詞映射為 (單詞, 1).reduceByKey(_ + _) // 按鍵(單詞)歸并值(計數)// 輸出結果 wordCounts.collect().foreach(println)
-
查看結果
運行上述代碼后,你會看到類似以下的輸出:(Hello,2) (World,1) (Spark,2) (is,1) (great,1)
四、運行一個完整的 Spark 應用程序
除了在 Spark Shell 中運行代碼,你還可以編寫一個完整的 Spark 應用程序并運行它。以下是一個用 Scala 編寫的簡單示例。
-
創建項目目錄
創建一個項目目錄,例如my-spark-app
,并在其中創建一個src
文件夾:mkdir my-spark-app cd my-spark-app mkdir src
-
編寫 Spark 應用程序代碼
在src
文件夾中創建一個文件WordCount.scala
,內容如下:import org.apache.spark.sql.SparkSessionobject WordCount {def main(args: Array[String]): Unit = {// 創建 SparkSessionval spark = SparkSession.builder.appName("WordCount").master("local[*]").getOrCreate()// 讀取文本文件val textFile = spark.read.textFile("example.txt")// 計算單詞出現次數val wordCounts = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_ + _)// 輸出結果wordCounts.collect().foreach(println)// 停止 SparkSessionspark.stop()} }
-
編譯和打包
使用sbt
(Scala 構建工具)來編譯和打包項目。首先,創建一個build.sbt
文件,內容如下:name := "MySparkApp"version := "0.1"scalaVersion := "2.12.10"libraryDependencies += "org.apache.spark" %% "spark-sql" % "3.4.0"
然后運行以下命令編譯和打包:
sbt package
-
運行應用程序
使用spark-submit
命令運行打包后的應用程序:spark-submit --class WordCount --master local[*] target/scala-2.12/mysparkapp_2.12-0.1.jar
運行后,你會看到類似之前在 Spark Shell 中的輸出結果。
總結
通過上述步驟,你可以在本地模式下搭建和運行 Spark 程序。本地模式非常適合開發和測試階段,因為它不需要復雜的集群配置。你可以使用 Spark Shell 快速測試代碼,也可以編寫完整的 Spark 應用程序并使用 spark-submit
運行。