掘金 后端 ( ) • 2024-05-02 09:53

一、spark简介

spark是一款分布式内存计算的统一分析引擎,用于处理大规模数据。和mapReduce不同的是,job中间输出结果可以保存在内存中,不再需要读写hdfs。

spark可以对任意类型的数据进行自定义计算。spark可以计算:结构化、半结构化、非结构化等类型的数据,也支持使用Python、Java、Sql语言开发应用程序计算数据。

spark源于一篇论文,提出了一种弹性分布式数据集(RDD)的概念。
RDD是一种分布式内存抽象,能够在大规模集群中做内存运算,并由一定的容错方式。也是整个Spark的核心数据结构。

二、spark框架模块

Spark Core:
包含spark的基本功能,尤其是定义RDD的api。其它spark的库都是构建在RDD和Spark Core之上的。

SparkSQL:

Spark Streaming:

Spark MLlib:

Spark GraphX:

三、spark架构角色

资源层面:
1、Master(集群资源管理)
2、Worker(单机资源管理)
计算节点,任务运行层面:
3、Driver(单个任务的管理)
4、Executor(单个任务的计算)

在local模式下,Driver既管理又干活
在hadoop yarn模式下,各个角色可对应yarn集群的各个角色

四、spark运行模式

1开发测试 2、3、4、5生产环境

1、本地模式(以一个独立的进程,内部的多个线程模拟整个spark运行时环境)
2、standalone模式(spark的各个角色以独立进程存在,组成spark集群)
3、hadoop yarn模式(spark的各个角色运行在yarn的容器内部,组成spark集群)
4、kubernets模式(spark的各个角色运行在kubernets的容器内部,组成spark集群)
5、云服务模式(阿里云 E-MapReduce)

五、spark部署

local模式

基本原理

本质:启动一个JVM进程(一个进程里面有多个线程),执行Task

local[N] 或 local[*] 指定模拟spark集群环境的线程数量
N:代表使用N个线程,不指定默认是1个
*:代表按照cpu最多的cores设置线程数 c445b8973d3cbb9f8d87dea25861770.png

Master、Worker、Driver都是local进程本身
Executor不存在,没有独立的Executor角色,由local进程内的线程提供计算能力

一个local进程只能运行一个Spark程序

部署

下载python和spark

python下载地址: https://www.python.org/downloads/
wget https://www.python.org/ftp/python/3.8.19/Python-3.8.19.tar.xz

spark下载地址: http://spark.apache.org/downloads.html
wget https://dlcdn.apache.org/spark/spark-3.3.2/spark-3.3.2-bin-hadoop3.tgz --no-check-certificate

交互式环境测试

pyspark

bin/pyspark(交互式的解释器执行环境,启动后就得到了一个local spark环境,可以运行python代码去进行spark计算)

print(sc.parallelize([1,2,3,4,5]).collect())
sc.parallelize([1,2,3,4,5]).map(lambda x : x*10).collect()

3a83fb7a0ea0586d866d78903b48c41.png 4040端口(spark的任务在运行后,会在driver所在机器绑定到4040端口,提供当前任务的监控页面)
4040是一个临时端口,当程序运行完成后,就会被注销

a7ee02603f66ac341a5b6d5b0436815.png

spark-shell

ab78093af26e37b443f42e3a9ef5c1c.png

spark-submit
rootLogger.level = ERROR
bin/spark-submit --master local[*] examples/src/main/python/pi.py 10
bin/spark-submit --class org.apache.spark.examples.SparkPi examples/jars/spark-examples_2.12-3.3.2.jar

dfd31befc56459e4abcea2aa1e55190.png

Spark On Yarn模式

基本原理

Master角色由Yarn的ResourseManager担任
Worker角色由Yarn的NodeManager担任
Driver运行在Yarn容器内(集群模式)或提交任务的客户端进程中(client模式)
Executor运行在Yarn提供的容器内

spark任务提交到yarn集群运行,资源管理由ResourseManager承担,任务计算由yarn所提供的continer容器承担

部署

下载python和spark

python下载地址: https://www.python.org/downloads/
wget https://www.python.org/ftp/python/3.8.19/Python-3.8.19.tar.xz

spark下载地址: http://spark.apache.org/downloads.html
wget https://dlcdn.apache.org/spark/spark-3.3.2/spark-3.3.2-bin-hadoop3.tgz --no-check-certificate

在spark-env.sh中加入如下配置:

# Hadoop 的配置文件目录  
HADOOP_CONF_DIR=/opt/apache/hadoop/etc/hadoop
# YARN 的配置文件目录  
YARN_CONF_DIR=/opt/apache/hadoop/etc/hadoop

编辑Dockerfile文件:

RUN yum -y install make gcc openssl-devel bzip2-devel libffi-devel

# 安装Python
ENV PYTHON_VERSION 3.8.19
ADD Python-${PYTHON_VERSION}.tgz /opt/apache/
RUN cd /opt/apache && \
	cd Python-${PYTHON_VERSION} && \
	./configure && make && make install && \
	rm -f /usr/bin/python && \
	ln -s /opt/apache/Python-${PYTHON_VERSION}/python /usr/bin/python
        
# 配置spark
ENV SPARK_VERSION 3.3.2
ADD spark-${SPARK_VERSION}-bin-hadoop3.tgz /opt/apache/
ENV SPARK_HOME=/opt/apache/spark
ENV PATH=$SPARK_HOME/bin:$PATH
RUN ln -s /opt/apache/spark-${SPARK_VERSION}-bin-hadoop3 ${SPARK_HOME}

COPY config/spark-config/* ${SPARK_HOME}/conf/

测试:

进入之前启动的容器,并运行spark

docker exec -it hadoop-yarn-rm bash
./spark/bin/pyspark --master yarn

5479a6332cc1b5522a36d7ac2cee144.png

9d742c62caee99cbd069bbaf6317f8a.png

两种运行模式

cluster模式:
Driver运行在Yarn容器内部,和Application Master在同一个容器内(生产环境) ./spark/bin/pyspark --master yarn --deploy-mode cluster
client模式:
Driver运行在客户端进程中(spark-submit、pyspark、spark-shell) ./spark/bin/pyspark --master yarn --deploy-mode client

spark程序运行层次划分

Application ->Job ->Stage ->Task