目录
0 参考列表
CSDN:SparkCore入门编程https://blog.csdn.net/weixin_45682261/article/details/123765880
1 概念
Spark是一种快速、通用、可扩展、基于内存计算的大数据分析引擎.
2 安装(3.3.0)
2.1 参考列表
CSDN:spark3.3.0安装&部署过程https://blog.csdn.net/m0_61022929/article/details/126403124
2.2 下载解压
(1) 下载:wget https://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-3.3.0/spark-3.3.0-bin-hadoop3.tgz
(2) 解压:tar -zxvf spark-3.3.0-bin-hadoop3.tgz -C /usr/hdp/3.1.5.0-152/
(3) 修改路径名:mv spark-3.3.0-bin-hadoop3 spark
2.3 修改配置
(1) 在HDFS上创建目录spark2-history:hadoop fs -mkdir /spark2-history
(2) conf目录下的 spark-env.sh.template、workers.template、spark-defaults.conf.template,去掉.template后缀
(3) 修改 spark-env.sh
export JAVA_HOME=/soft/jdk1.8.0_341
# hadoop conf配置路径
export HADOOP_CONF_DIR=/etc/hadoop/conf
# yarn conf配置路径
YARN_CONF_DIR=/etc/hadoop/conf
#spark的历史服务器
export SPARK_HISTORY_OPTS="
-Dspark.history.ui.port=18080
-Dspark.history.fs.logDirectory=hdfs://node02:8020/spark2-history
-Dspark.history.retainedApplications=30"
(4) 修改workers
# 添加从节点
node01
node03
(5) spark-defaults.conf
spark.master spark://node02:7077
spark.eventLog.enabled true
# defaultFS 的端口
spark.eventLog.dir hdfs://node02.com:8020/spark2-history
# #spark的历史服务器,在spark所在节点,端口18080
spark.yarn.historyServer.address=node02:18080
spark.history.ui.port=18080
(6) 修改sbin/start-master.sh
SPARK_MASTER_WEBUI_PORT=8081
2.4 分发节点
(1) 分发节点:scp -r /usr/hdp/3.1.5.0-152/spark root@node01:/usr/hdp/3.1.5.0-152/
(2) 配置环境变量
修改 /etc/profile
# spark
export SPARK_HOME=/usr/hdp/3.1.5.0-152/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME
source /etc/profile
2.5 启动
(1) 启动服务
sbin/start-all.sh
sbin/start-history-server.sh
(2) 自检脚本
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://node02:7077 \
/usr/hdp/3.1.5.0-152/spark/examples/jars/spark-examples_2.12-3.3.0.jar \10
2.7 Spark 集成Yarn(解决中)
2.7.1 参考列表
2.7.2 配置
(1) 修改 /etc/hadoop/conf/yarn-site.xml
<property>
<name>yarn.resourcemanager.address</name>
<value>{YARN_MASTER_IP}:8032</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>{Yarn_Master_IP}</value>
</property>
(2) 将{SPARK_HOME}/yarn 下的spark-3.3.0-yarn-shuffle.jar 复制到 /usr/hdp/3.1.5.0-152/hadoop-yarn/lib/ 下
2.7.3 异常
(1) 集成前会报错:Retrying connect to server: 0.0.0.0/0.0.0.0:8032
(2) Yarn 的 NodeManager 启动失败: Class org.apache.spark.network.yarn.YarnShuffleService not found
(3) Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/shaded/javax/ws/rs/core/NoContentException
解决方案:将 {SPARK_HOME}/jars/hadoop-client-runtime-3.3.2.jar 替换为hadoop-client-runtime-3.3.1.jar.
3 系统架构及原理
3.1 部署模式
(1) local模式:程序运行在本地.
(2) 集群模式:分布式部署集群,资源和任务监控交给 内置资源调度系统、Yarn、mesos来管理.
3.2 系统架构
(1) Driver
每一个spark程序在运行时,都会启动一个Driver进程,负责管理作业:
①用来提交和初始化作业,如路径的检查,权限检查,产生DAGScheduler和TaskScheduler;
②与executor之间的通信.
(2) executor:执行task,并向driver汇报运行情况.
(3) Cluster Manager:负责整个资源调度.
(4) Worker Node:负责本节点的资源分配.
3.3 执行流程
3.3.1 提交模式
spark程序在使用yarn进行调度时有两种模式Yarn-client和Yarn-cluster.
(1) Yarn-client模式
1. 在client端启动Driver进程,初始化作业,解析程序,初始化DAGScheduler,TaskScheduler.
-- 初始化作业: 判断路径是否存在,权限校验等
-- DAGScheduler将程序的执行流程解析成DAG图,并划分阶段,根据阶段内的分区初始化Task
-- TaskScheduler接收Task,等待分配Task给executor
2. Driver会向ResourceManager,申请资源,想要启动该应用程序的AppMaster
3. ResourceManager会分配一个节点,来运行AppMaster,由NodeManager负责真正分配资源并运行AppMaster
4. AppMaster会向ResourceManager申请整个程序所需要的其他资源,准备运行executor进程
5. ResourceManager分配资源后,由各个节点的NodeManager来启动executer,executor会向Driver进行反向注册,要求分配任务
6. TaskScheduler将Task分配到不同的executor,并监控实时状态,executor开始执行任务,
7. TaskScheduler收到executor执行完的信息后,表示整个应用程序完成,会向ResouceManager申请注销
(2) yarn-cluster模式
1. client会首先向ResourceManager申请资源,要求启动AppMaster进程
2. ResouceManager会分配一个节点,由NodeManager来运行AppMaster,并在AppMaster所在节点运行Driver进程
Driver进程的作用:,初始化作业,解析程序,初始化两个DAGScheduler,TaskScheduler.
-- 初始化作业: 判断路径是否存在,权限校验等
-- DAGScheduler将程序的执行流程解析成DAG图,并划分阶段,根据阶段内的分区初始化Task
-- TaskScheduler接收Task,等待分配Task给executor
3. AppMaster会向ResourceManager申请整个程序所需要的其他资源,准备运行executor进程
4. ResourceManager分配资源后,由各个节点的NodeManager来启动executer,executor会向Driver进行反向注册,要求分配任务
5. TaskScheduler将Task分配到不同的executor,并监控实时状态,executor开始执行任务,
6. TaskScheduler收到executor执行完的信息后,表示整个应用程序完成,会向ResouceManager申请注销
3.3.2 执行流程中的概念
①DAGScheduler:将程序中的代码解析成DAG,根据算子将DAG划分多个Stage,然后在每个Stage里根据分区来产生Task,最后将Task调度给TaskScheduler.
②TaskScheduler:接收DAGScheduler传输的Task,保存到任务池中,然后将任务池里的Task分配给Executor进行执行.
③有向无环图:有方向,没有回流的图.
④Stage:一个Spark作业包含若干个Stage,Stage是由DAGScheduler解析有向无环图,根据宽依赖算子来划分的.
⑤task:一个Stage里会有多个分区的数据,每个分区的数据都由一个Task来执行,实现并行计算.
4 使用
4.1 spark
进程:Master,Worker.
Spark Matser 页面:master:8081
Spark History Server 页面:master:18081
4.2 spark shell
访问: spark-shell
退出: :quit
4.3 spark-submit
(1) 参考列表
纯净天空:Spark任务提交(Spark Submit)https://vimsky.com/article/3491.html
(2) 使用
-- Standalone 模式
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://node02:7077 \
/usr/hdp/3.1.5.0-152/spark/examples/jars/spark-examples_2.12-3.3.0.jar
## Yarn-client 模式
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
/usr/hdp/3.1.5.0-152/spark/examples/jars/spark-examples_2.12-3.3.0.jar
## Yarn-cluster模式
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
/usr/hdp/3.1.5.0-152/spark/examples/jars/spark-examples_2.12-3.3.0.jar
5 参数
(1) 保存为文件时是否同时生成success文件,默认为true
mapreduce.fileoutputcommitter.marksuccessfuljobs