从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
相关推荐
2401_871290584 分钟前
Spark的缓存
大数据·spark
threelab8 分钟前
08.webgl_buffergeometry_attributes_none ,three官方示例+编辑器+AI快速学习
学习
嵌入式仿真实验教学平台28 分钟前
「国产嵌入式仿真平台:高精度虚实融合如何终结Proteus时代?」——从教学实验到低空经济,揭秘新一代AI赋能的产业级教学工具
人工智能·学习·proteus·无人机·低空经济·嵌入式仿真·实验教学
moxiaoran57531 小时前
uni-app学习笔记五-vue3响应式基础
笔记·学习·uni-app
IvanCodes2 小时前
六、Hive 分桶
大数据·hive
依年南台2 小时前
Spark处理过程-转换算子和行动算子
大数据·ajax·spark
Freedom℡2 小时前
Spark,集群搭建之Yarn模式
spark
中电金信2 小时前
重构金融数智化产业版图:中电金信“链主”之道
大数据·人工智能
说码解字2 小时前
ExoPlayer 如何实现音画同步
开发语言·学习·音视频
七七-d2 小时前
配置Hadoop集群-上传文件
大数据·hadoop·eclipse