从0学习Spark
1.概述
定义:
Apache Spark是一个开源的分布式计算系统,主要用于大规模数据处理和分析,是基于内存计算的大数据处理框架,它提供了一个高度通用的执行引擎,可以支持多种不同类型的大数据处理任务,如批处理、交互式查询、实时流处理、机器学习和图计算等。Spark提供了一种简洁的编程模型,允许用户使用Scala、Java、Python和R等多种编程语言来编写数据处理应用程序。其核心是弹性分布式数据集(Resilient Distributed Dataset,RDD),这是一种分布式的、可分区的、不可变的数据集合,用户可以在RDD上进行各种转换(Transformation)和行动(Action)操作。转换操作会生成新的RDD,而行动操作则会触发计算并返回结果。通过这种方式,用户可以以一种类似于函数式编程的风格来处理大规模数据,使得数据处理代码更加简洁、易读和易于维护。
特点:速度快,易用,通用,运行在任意地方
核心组件:用于批处理的Spark Core,用于SQL查询的Spark SQL,用于流处理的Spark Streaming,用于机器学习的MLlib和用于图计算的GraphX
应用场景
Spark广泛应用于各种大数据场景,如数据仓库、数据挖掘、机器学习、实时监控等。在数据仓库中,Spark可以用于数据的ETL(Extract,Transform,Load)过程,对大量的原始数据进行清洗、转换和加载;在数据挖掘和机器学习领域,Spark提供了丰富的算法和工具,能够支持大规模数据集上的模型训练和预测;在实时监控场景中,Spark Streaming可以实时处理源源不断的流数据,实现对业务数据的实时分析和预警。
2.Spark的运行模式
- Local模式(单机):以一个独立进程配合内部线程完成运行spark环境
- Standalone模式(集群):
- Hadoop YARN模式(集群)
- Kubernets模式(容器集群)
- 云服务模式(运行在云平台上)
3.Spark的架构角色
Driver Program:负责创建SparkContext,负责将用户编写的Spark应用程序分解为多个任务,并将这些任务分配到集群中的各个节点上执行
Cluster Manager:负责管理集群中的计算资源,监控集群中各个节点的状态,接收Driver Program提交的任务
Worker Node:负责执行Driver Program分配过来的具体任务,定期向Cluster Manager汇报自己的状态
Executor:在Worker Node上,每个任务会启动一个或多个Executor进程来执行具体的计算任务。Executor负责管理这些进程的生命周期,包括进程的启动、运行和结束
SparkContext:负责与Cluster Manager、Worker Node等组件进行交互,实现任务的提交、资源的申请和分配等功能,管理Spark应用程序的生命周期
RDD(Resilient Distributed Dataset):是Spark中最基本的数据抽象,支持一系列的数据转换和操作
4.Spark环境搭建-Local模式(Linux)
4.1.前提准备:
一台虚拟机(已配置好jdk与Hadoop)
spark官网下载(注意下载版本与Hadoop兼容):Downloads | Apache Spark
python3.8及以上
4.2.解压spark:
tar -zxvf spark-3.2.0-bin-hadoop3.2.tgz -C /home/hadoop/export/server/
4.3.配置spark环境变量:
#进入.bashrc配置
vim ~/.bashrc
#配置spark环境变量
export SPARK_HOME=/home/hadoop/export/server/spark-3.2.0-bin-hadoop3.2
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
#保存退出后,输入一下命令使环境变量立即生效
source ~/.bashrc
#验证配置是否成功
spark-submit --version
#启动spark
spark-shell
#打开网址
<主机名>:4040
#退出Scala
:q
5.Spark环境搭建-Standalone模式
Standalone架构:
主节点 Master:
Master 角色,管理整个集群资源,并托管运行各个任务的 Driver
从节点 Workers:
Worker 角色,管理每个机器的资源,分配对应的资源来运行 Executtor (Task)
集群规划
节点 | 主节点(master) | 从节点(work) |
node1 | 是 | 是 |
node2 | 否 | 是 |
node3 | 否 | 是 |
5.1.前提准备:
三台虚拟机(确保配置了SSH免密,jdk,Hadoop),spark压缩包(版本确保与Hadoop版本适配)
5.2.解压spark,将spark压缩包解压到三台虚拟机的相同目录
tar -zxvf spark-3.2.0-bin-hadoop3.2.tgz -C /home/hadoop/export/server/
5.3.配置spark
在主节点和工作节点的$SPARK_HOME/conf
目录下,将spark-env.sh.template重命名
为spark-env.sh
,并进行编辑
# 设置Java环境变量
export JAVA_HOME=/home/hadoop/export/server/jdk1.8.0_361/
# 设置主节点的IP地址或主机名
export SPARK_MASTER_HOST=node1
# 设置主节点的端口号
export SPARK_MASTER_PORT=7077
# 设置工作节点的内存
export SPARK_WORKER_MEMORY=2g
在主节点的$SPARK_HOME/conf
目录下,将slaves.template
复制为slaves
,并编辑该文件,添加所有工作节点的 IP 地址或主机名,每行一个
node1
node2
node3
5.4.启动spark
- 启动主节点
在主节点上执行以下命令启动 Spark Master:
$SPARK_HOME/sbin/start-master.sh
- 启动工作节点
在每个工作节点上执行以下命令启动 Spark Worker:
$SPARK_HOME/sbin/start-slave.sh spark://node1:7077
$SPARK_HOME/sbin/start-slave.sh spark://node2:7077
$SPARK_HOME/sbin/start-slave.sh spark://node3:7077
#或者,直接在主节点启动全部工作节点
$SPARK_HOME/sbin/start-slaves.sh
5.5停止spark
$SPARK_HOME/sbin/stop-all.sh