搭建本地模式的Spark环境

作为当下最流行的开源大数据处理框架,Apache Spark(下文简称Spark)被广泛应用于分布式、大规模的数据处理(ETL)、分析、机器学习和图处理等方面。

从架构上讲,Spark采用的是主从(Master-Salve)架构。对于一个Spark应用,它会创建一个主进程(Master process)和若干个从属进程(Slave processes)。用Spark的专业术语来讲,主进程也被称为驱动器(Driver),而从属进程则被称作执行器(Executors)。驱动器负责分析、分配、调度和监控整个执行,同时负责维护应用在整个生命周期内所有的信息。而执行器则只要负责执行驱动器分配给他们的代码和向驱动器报告执行的状态。

Spark执行模式

客户端模式 v.s 集群模式

通常来讲,驱动器一定要运行在集群上,但是我们可以通过指定运行模式让驱动器运行在客户端机器还是集群本身。这个运行模式相应地被称为“客户端模式”(Client Mode)和“集群模式”(Cluster Mode)。客户端模式通常用在开发过程中,而集群模式则用于生产环境。关于“客户端模式”和“集群模式”的区别由读者自行探索,此处不做展开。

本地模式

无论是客户端模式还是集群模式,其实都需要搭建一个多节点的集群。对于Spark的初学者而言,他们仅需要一个简单易用的环境用于学习和探索Spark的能力,这些模式都不够灵活机方便。为此Spark还提供一个用于测试或实验性质的本地模式(Local Mode)。

顾名思义,本地模式可以使得整个Spark应用(包括驱动器执行器)都运行在同一个JVM进程中,不依赖任何资源管理进程(如YARN、Mesos),一台普通的台式机或笔记本电脑就满足需求。

安装Spark

安装JDK

如前面提到,本地模式是运行在一个JVM进程的,所以需要在运行的机器上装有JDK。现行的Spark版本都要求Java 8及以上版本,可参考Oracle官网下载安装。安装完毕后可在Shell执行java -version命令来验证。结果类似

java -version
1
2
3
4
$ java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)

下载和安装Spark

首先,前往Spark官网下载最新的Spark版本。截止到本文写作日期,Spark最新版本为Spark 3.0.0-preview2,如下图-1所示,但读者总是可以用相同的方法下载安装最新的3.0发布版本。

图-1 Spark下载页面

点击图-1所示的第三步的链接即可下载,或者在Shell里使用wget命令直接下载,如下所示:

下载Spark
1
2
3
4
5
6
7
8
9
10
11
$ wget -c https://archive.apache.org/dist/spark/spark-3.0.0-preview2/spark-3.0.0-preview2.tgz .
...
Length: 21811982 (21M), 21582606 (21M) remaining [application/x-gzip]
Saving to: ‘spark-3.0.0-preview2.tgz’

spark-3.0.0-preview2.tgz 100%[==========================================>] 20.80M 119KB/s in 4m 10s

2020-02-29 13:23:32 (84.4 KB/s) - ‘spark-3.0.0-preview2.tgz’ saved [21811982/21811982]
...
Total wall clock time: 4m 11s
Downloaded: 1 files, 21M in 4m 10s (84.4 KB/s)

下载完成后,将spark-3.0.0-preview2.tgz解压放到相应目录下,如当前目录的spark目录。

解压Spark
1
2
$ mkdir spark
$ tar -zxvf spark-3.0.0-preview2.tgz -C spark

查看该目录内容,是否包含下列文件:

查看Spark目录
1
2
3
4
5
6
7
8
9
10
$ ls spark/spark-3.0.0-preview2
CONTRIBUTING.md common graphx repl
LICENSE conf hadoop-cloud resource-managers
NOTICE core launcher sbin
R data licenses scalastyle-config.xml
README.md dev mllib sql
appveyor.yml docs mllib-local streaming
assembly examples pom.xml tools
bin external project
build graph python

最后指定SPARK_HOME到环境变量中,如Linux或Mac,可以在~/.bashrc~/.bash_profile中添加:

添加Spark环境变量
1
2
export SPARK_HOME=/Users/dennis/spark/spark-3.0.0-preview2-bin-hadoop2.7
export PATH=$SPARK_HOME/bin:$PATH

至此,本地模式的Spark环境就已安装完毕!

验证本地模式的Spark

Spark提供了一个非常方便的交互式工具spark-shell,用户可以非常方便在上面执行scala代码。想要启动Spark的shell,只需在命令上上输入spark-shell

spark shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ spark-shell                                                                                                                                                                  127 ↵
20/02/29 14:22:26 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Spark context Web UI available at http://localhost:4040
Spark context available as 'sc' (master = local[*], app id = local-1582957351388).
Spark session available as 'spark'.
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 3.0.0-preview2
/_/

Using Scala version 2.12.10 (OpenJDK 64-Bit Server VM, Java 1.8.0_212)
Type in expressions to have them evaluated.
Type :help for more information.

scala>

进去后可以看到就是一个scala的cli,可以在上面运行一下scala语句和spark的API看看:

play with scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
scala> spark.version
res1: String = 3.0.0-preview2

scala> val strings = spark.read.text("README.md")
strings: org.apache.spark.sql.DataFrame = [value: string]

scala> strings.show(10, false)
+--------------------------------------------------------------------------------+
|value |
+--------------------------------------------------------------------------------+
|# Apache Spark |
| |
|Spark is a unified analytics engine for large-scale data processing. It provides|
|high-level APIs in Scala, Java, Python, and R, and an optimized engine that |
|supports general computation graphs for data analysis. It also supports a |
|rich set of higher-level tools including Spark SQL for SQL and DataFrames, |
|MLlib for machine learning, GraphX for graph processing, |
|and Structured Streaming for stream processing. |
| |
|<https://spark.apache.org/> |
+--------------------------------------------------------------------------------+
only showing top 10 rows


scala> strings.count()
res3: Long = 109

scala>

至此本地模式的Spark环境就已经搭建完毕,我们可以方便地在本地环境学习和使用Spark相关的概念和内容。

以上。

作者

Xu, Lvcai

发布于

2021-02-27

更新于

2021-02-27

许可协议

评论
加载中,最新评论有1分钟缓存...