Spark本地模式安装

Spark软件安装

Spark本地模式即单机模式,以一个独立的进程,通过其内部的多个线程来模拟整个Spark运行时环境,本地模式只需要在1台服务器上安装Spark即可。本地模式的安装非常简单,只需要将下载的Spark软件安装包解压到目标位置即安装完成。

tar -xzf spark-3.3.1-bin-hadoop3.tgz -C apps

在这里插入图片描述
下图展示了解压后的软件安装目录结构,其中:

  • bin目录下存放了提交Spark应用程序需要用到的可执行命令,比如pyspark、spark-submit等命令;
  • conf目录存放的是Spark的配置文件,这里可以配置Spark的部署模式,比如独立集群信息或者Yarn信息;
  • jars目录存放的是Spark的依赖软件包,Spark各个组件的核心代码都放置在这里,如果需要与第三方框架集成,比如MySQL、Kafka等,需要用到的依赖包也需要添加到jars目录下;
  • sbin目录下存放的是Spark集群管理相关的可执行命令,比如启动、停止集群的相关命令。

在这里插入图片描述

使用交互式pyspark运行代码

解压完成后,就可以验证安装结果了,由于目前还没有配置相关的环境变量,pyspark不能直接在任意路径执行,需要将工作目录切换到Spark的安装目录,并在此执行相关命令。

cd apps/spark-3.3.1-bin-hadoop3/
bin/pyspark

在这里插入图片描述
从交互式命令行界面,可以了解到一些当前环境的信息:

  • Spark的版本是:version 3.3.1
  • Python的版本是:version 3.8.10
  • Spark Driver Web UI的地址是:http://node1.internal.cloudapp.net:4040
  • 环境实例化了一个SparkContext对象,名为:sc
  • 当前环境的master是:local[*]
  • 环境实例化了一个SparkSession对象,名为:spark

如果访问Spark Driver Web UI地址,可以看到如下的界面。
在这里插入图片描述
其中:

  • Jobs页面可以查看根据提交运行的Spark应用程序创建的Job的信息,当前没有任何Job在运行;
  • Stages页面可以查看每个任务的Stage的划分;
  • Environment可以查看当前Spark的环境信息;
  • Executors可以查看当前Spark环境中的Executors的列表信息。

在这里插入图片描述
当前本地模式环境下,只有一个driver,不含其他Executor。
通过pyspark的交互式命令行提交Spark代码来运行。这里以经典的WordCount程序来验证Spark环境。准备一个包含很多单词的文本文件words.txt放到服务器上,目前还没有部署分布式文件系统HDFS,如果有额外的HDFS也可以上传到HDFS上。

Hello Python
Hello Spark You
Hello Python Spark
You know PySpark

编写WordCount的程序代码,实现文件的读取并按单词统计单词在文件中出现的次数。

count = sc.textFile("/home/hadoop/words.txt") \
.flatMap(lambda x: x.split(' ')) \
.map(lambda x: (x, 1)) \
.reduceByKey(lambda a,b: a + b) \
.collect()
print(count)

在这里插入图片描述
上述代码运行统计出words.txt文件中的单词的个数:3个Hello,2个Python,2个Spark,1个know,1个PySpark,2个You。
程序执行完,可以看到Spark Driver Web UI中一些数据的变化。提交的Spark应用程序的Job列表中,当前执行完成的Job有1个。
在这里插入图片描述
点击Job列表中的链接,可以看到对应Job的详细信息。比如Job的执行流程DAG图,Stage的划分、Stage列表等信息,当前Job被划分成了两个Stage。
在这里插入图片描述
点击Stage列表中的链接,可以看到Stage的详细信息。
在这里插入图片描述
在这里插入图片描述

使用spark-submit提交代码

交互式pyspark命令行并不适合用于生产环境提交代码执行,在生产环境上运行Spark应用程序,需要将代码开发写入Python文件,将文件保存到系统中的一个路径下,比如:/home/hadoop/WordCount.py。

from pyspark import SparkConf, SparkContext

if __name__ == '__main__':
    conf = SparkConf().setAppName("WordCount")
    # 通过SparkConf对象构建SparkContext对象
    sc = SparkContext(conf=conf)
    # 通过SparkContext对象读取文件
    fileRdd = sc.textFile("/home/hadoop/words.txt")
    # 将文件中的每一行按照空格拆分成单词
    wordsRdd = fileRdd.flatMap(lambda line: line.split(" "))
    # 将每一个单词转换为元组,
    wordRdd = wordsRdd.map(lambda x: (x, 1))
    # 根据元组的key分组,将value相加
    resultRdd = wordRdd.reduceByKey(lambda a, b: a + b)
    # 将结果收集到Driver并打印输出
    print(resultRdd.collect())

使用spark-submit命令进行提交运行。spark-submit的使用方式为:

spark-submit [options] <app jar | python file | R file> [app arguments]

将其中的参数替换为具体的值,在不设置任何选项或者参数的情况下,只需要指定python file就可以了。
执行命令后,Spark将会启动相关的进程,并进行数据文件的处理。通过日志的输出可以了解到Spark应用程序的执行情况:应用名称WordCount、Spark Driver Web UI端口4040、collect算子触发一个job的创建执行、首先会构建DAG图及划分Stage、Stage按顺序执行、Stage 0中实现了将文件拆分成两个分区、collect输出了最终的执行结果、应用程序执行完成后会停止Spark Driver Web UI和SparkContext。

INFO SparkContext: Running Spark version 3.3.1
...
INFO SparkContext: Submitted application: WordCount
...
INFO Utils: Successfully started service 'SparkUI' on port 4040.
INFO Executor: Starting executor ID driver on host node1.internal.cloudapp.net
...
INFO SparkContext: Starting job: collect at /home/hadoop/WordCount.py:16
INFO DAGScheduler: Registering RDD 3 (reduceByKey at /home/hadoop/WordCount.py:14) as input to shuffle 0
INFO DAGScheduler: Got job 0 (collect at /home/hadoop/WordCount.py:16) with 2 output partitions
INFO DAGScheduler: Final stage: ResultStage 1 (collect at /home/hadoop/WordCount.py:16)
...
INFO Executor: Running task 0.0 in stage 0.0 (TID 0)
INFO Executor: Running task 1.0 in stage 0.0 (TID 1)
INFO HadoopRDD: Input split: file:/home/hadoop/words.txt:32+33
INFO HadoopRDD: Input split: file:/home/hadoop/words.txt:0+32
...
INFO Executor: Finished task 1.0 in stage 0.0 (TID 1). 1678 bytes result sent to driver
INFO Executor: Finished task 0.0 in stage 0.0 (TID 0). 1678 bytes result sent to driver
...
INFO DAGScheduler: looking for newly runnable stages
...
INFO Executor: Running task 0.0 in stage 1.0 (TID 2)
INFO Executor: Running task 1.0 in stage 1.0 (TID 3)
...
INFO Executor: Finished task 0.0 in stage 1.0 (TID 2). 1732 bytes result sent to driver
INFO Executor: Finished task 1.0 in stage 1.0 (TID 3). 1628 bytes result sent to driver
...
INFO DAGScheduler: Job 0 finished: collect at /home/hadoop/WordCount.py:16, took 2.965328 s
[('Hello', 3), ('Python', 2), ('Spark', 2), ('know', 1), ('PySpark', 1), ('You', 2)]
INFO SparkContext: Invoking stop() from shutdown hook
INFO SparkUI: Stopped Spark web UI at http://node1.internal.cloudapp.net:4040
...
INFO SparkContext: Successfully stopped SparkContext
...

由于Spark Driver Web UI已经停止,所以无法通过浏览器打开查看应用程序的执行情况。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wux_labs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值