从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
相关推荐
JeffreyGu.19 分钟前
Linux Shell脚本-分隔符问题
linux·服务器·学习
随机惯性粒子群28 分钟前
wheel_legged_genesis 开源项目复现与问题记录
学习·开源·github·强化学习·genesis
云上艺旅34 分钟前
K8S学习之基础十二:容器的三种探测
学习·容器·kubernetes
栀寒老醑1 小时前
模板注入漏洞(SSTI)学习笔记
笔记·学习·安全·web安全·网络安全·系统安全·安全架构
Future_yzx1 小时前
分布式存储学习——HBase概述
大数据·数据库·hbase
charlie1145141912 小时前
从0开始的操作系统手搓教程21:进程子系统的一个核心功能——简单的进程切换
汇编·学习·操作系统·线程·进程·手搓教程
凉、介2 小时前
ARM 架构下 cache 一致性问题整理
linux·汇编·arm开发·学习·缓存·架构
虾球xz3 小时前
游戏引擎学习第137天
人工智能·学习·游戏引擎
Elastic 中国社区官方博客3 小时前
通过计费集成和警报监控 Elasticsearch Service 成本
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
Elastic 中国社区官方博客3 小时前
用于管理 Elasticsearch Serverless 项目的 AI Agent
大数据·人工智能·elasticsearch·搜索引擎·云原生·serverless·全文检索