Spark 本地模式的安装比较简单,直接启动上一节安装配置好的CentOS7-201 虚拟机(直接使用免费的 Virtualbox安装 CentOS7.9),以hadoop 账户登录Linux ,下载并解压Spark 安装文件就可以运行。这种模式可以让我们快速了解Spark 。在安装Spark 之前需要需先准备好JDK 环境,并正确配置JAVA_HOME 和PATH 环境变量。
下面介绍一下Spark 本地模式的安装。
(1 )下载Spark 安装文件,解压并配置环境变量:
[hadoop@server201 app]$ wget https://archive.apache.org/dist/spark/spark-3.3.1/spark-3.3.1-bin-hadoop3.tgz [hadoop@server201 app]$ tar -zxvf spark-3.3.1-bin-hadoop3.tgz -C /app/ [hadoop@server201 app]$ sudo vim /etc/profile export SPARK_HOME=/app/spark-3.3.1 export PATH=$PATH:$SPARK_HOME/bin [hadoop@server201 app]$ source /etc/profile
(2 )配置完成以后,先通过spark-shell 查看帮助和版本信息,还可以使用--help 查看所有选项的帮助信息:
[hadoop@server201 app]$ spark-shell --help Usage: ./bin/spark-shell [options] Scala REPL options: -Ipreload , enforcing line-by-line interpretation Options: --master MASTER_URL spark://host:port, mesos://host:port, yarn, k8s://https://host:port, or local (Default: local[*]). ....
(3 )查看Spark 的版本,直接使用--version 参数即可:
[hadoop@server201 app]$ spark-shell --version Spark Version 3.3.1 Using Scala version 2.13.8, Java HotSpot(TM) 64-Bit Server VM, 1.8.0_361 Branch HEAD Compiled by user ubuntu on 2021-02-22T01:33:19Z Revision 1d550c4e90275ab418b9161925049239227f3dc9 Url https://github.com/apache/spark Type --help for more information.
(4 )使用spark-shell 启动Spark 客户端
使用spark-shell 启动Spark 客户端,通过--master 指定为local 模式,通过local[2] 指定使用两核:
$ spark-shell --master local[2] Welcome to ____ __ / __/__ ___ _____/ /__ _\ \/ _ \/ _ `/ __/ '_/ /___/ .__/\_,_/_/ /_/\_\ version 3.3.1 /_/ Using Scala version 2.13.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_361) Type in expressions to have them evaluated. Type :help for more information. scala>
其中显示Spark 的版本为3.3.1 ,Scala 的版本为2.13.8 。
(5 )下面我们运行官方提供的WordCount 示例,示例中存在一些方法读者可能尚不明白,不过没有关系,在后面的章节中我们将会详细讲解。
首先通过sc 获取SparkContext 对象加载一个文件到内存中:
scala> val file = sc.textFile("file:///app/hadoop-3.2.3/NOTICE.txt");
val file: org.apache.spark.rdd.RDD[String] = file:///app/hadoop-3.2.3/NOTICE.txt MapPartitionsRDD[1] at textFile at :1
然后使用一系列的算子对文件对象进行处理—先按空格键和回车键进行分割,然后使用map 将数据组合成(key,value) 形式,最后使用reduceByKey 算子将key 进行合并:
scala> val words = file.flatMap(_.split("\\s+")).map((_,1)). reduceByKey(_+_);
val words: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[4] at reduceByKey at :1
最后调用collect 方法输出结果:
scala> words.collect val res0: Array[(String, Int)] = Array((this,2), (is,1), (how,1), (into,2), (something,1), (hive.,2), (file,1), (And,1), (process,1), (you,2), (about,1), (wordcount,1), (import,1), (a,1), (text,1), (be,1), (to,2), (in,1), (tell,1), (for,1), (must,1))
上例的运算过程,也可以打开宿主机浏览器访问http://192.168.56.201:4040 查看DAG 运行效果,如图2-42 所示。
图2-42
从图2-6 中可以看出reduceByKey 引发了第二个Stage ,从Stage0 到Stage1 将会引发shuffle ,这也是区分转换算子和行动算子的主要依据。
通过上面的示例可以看出,在本地模式下运行Spark 不需要事先启动任何的进程;启动spark-shell 后,可以通过SparkContext 读取本地文件系统目录下的文件。
操作完成以后,输入:quit 即可退出:
scala> :quit [hadoop@server201 app]$