一、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设置线程数
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()
4040端口(spark的任务在运行后,会在driver所在机器绑定到4040端口,提供当前任务的监控页面)
4040是一个临时端口,当程序运行完成后,就会被注销
spark-shell
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
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
两种运行模式
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