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