从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
相关推荐
坚持学习前端日记5 分钟前
从零开始构建小说推荐智能体 - Coze 本地部署完整教程
大数据·人工智能·数据挖掘
观书喜夜长7 分钟前
大模型应用开发学习-基于langchain框架做一个个人文档问答助手
python·学习·idea
承渊政道9 分钟前
【优选算法】(实战体验滑动窗口的奇妙之旅)
c语言·c++·笔记·学习·算法·leetcode·visual studio
huohuopro14 分钟前
UML的概念和主图学习
学习·uml
C羊驼24 分钟前
C语言学习笔记(十):操作符
c语言·开发语言·经验分享·笔记·学习
鹭天24 分钟前
RAG学习笔记
笔记·学习
IDIOT___IDIOT42 分钟前
关于 git 进行版本管理的时候 gitignore 写入忽略规则而不生效的问题
大数据·git·elasticsearch
不想看见40443 分钟前
Git 误删急救手册
大数据·git·elasticsearch
arvin_xiaoting1 小时前
OpenClaw学习总结_I_核心架构_6:Compaction详解
学习·系统架构·学习总结·ai agent·compaction·openclaw
网络工程小王1 小时前
【大数据技术详解】——Elasticsearch技术(学习笔记)
大数据·大数据技术·向量查询