Spark

目录

0 参考列表

1 概念

2 安装(3.3.0)

2.1 参考列表

2.2 下载解压

2.3 修改配置

2.4 分发节点

2.5 启动

2.7 Spark 集成Yarn(解决中)

2.7.1 参考列表

2.7.2 配置

2.7.3 异常

3 系统架构及原理

3.1 部署模式

3.2 系统架构

3.3 执行流程

3.3.1 提交模式

3.3.2 执行流程中的概念

4 使用

4.1 spark

4.2 spark shell

4.3 spark-submit

5 参数


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 参考列表

CSDN:关于Class org.apache.spark.network.yarn.YarnShuffleService not found的解决办法https://blog.csdn.net/Hiwes/article/details/78538951

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值