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
运行。