[博学谷学习记录] 超强总结,用心分享|Pyspark基础入门2

Pyspark

注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Spark Flink Kafka Hbase Hive Flume等等~写的都是纯干货,各种顶会的论文解读,一起进步。
今天继续和大家分享一下Pyspark基础入门2
#博学谷IT学习技术支持



前言

Spark是一款用于大规模数据处理分布式的分析引擎
在这里插入图片描述


一、Spark On Yarn

本质: 将Spark程序运行在Yarn集群中, 由Yarn集群完成资源调度工作

cd /export/server/spark/bin/
./spark-submit \
--master yarn \
--conf "spark.pyspark.driver.python=/root/anaconda3/bin/python3" \
--conf "spark.pyspark.python=/root/anaconda3/bin/python3" \
/export/server/spark/examples/src/main/python/pi.py  100

将编写的WordCount的代码提交到Yarn平台运行

./spark-submit \
--master yarn \
--conf "spark.pyspark.driver.python=/root/anaconda3/bin/python3" \
--conf "spark.pyspark.python=/root/anaconda3/bin/python3" \
/export/data/workspace/ky06_pyspark/_01_SparkBase/src/_05_pyspark_wd.py

二、两种部署方式

1.方式说明

当我们通过Spark-submit方式来提交Spark应用到Yarn集群或者Spark集群的时候, 提供了两种部署模式: client 和 cluster

client模式 和 cluster模式本质区别:  spark应用程序中Driver程序运行的位置
	

client模式: Driver程序是运行在客户端的本地(应用在哪里进行提交, Driver就运行在哪里) 默认值
	优势: 测试比较方便, 直接通过Driver看到最终返回的结果
	弊端: 由于不在一起(Driver 和 executor 不在一个环境中), 受网络影响因素比较大, 导致执行效率比较低
	
	一般client模式更加适合于测试使用

cluster模式:  Driver程序是运行在集群中某个从节点上
	优势: 提升Driver程序和executor程序之间的传输效率 从而提升整体的运行效率
	弊端: 由于Driver运行在集群里面. 导致我们无法直接看到运行的结果, 如果想要看到结果, 就必须查看Driver的运行日志
	
	一般在生产上线部署的时候, 采用cluster模式

2.演示操作:

client模式

./spark-submit \
--master yarn \
--deploy-mode client \
--conf "spark.pyspark.driver.python=/root/anaconda3/bin/python3" \
--conf "spark.pyspark.python=/root/anaconda3/bin/python3" \
/export/data/workspace/ky06_pyspark/_01_SparkBase/src/_02_pyspark_wd.py

在这里插入图片描述
cluster模式:

./spark-submit \
--master yarn \
--deploy-mode cluster \
--conf "spark.pyspark.driver.python=/root/anaconda3/bin/python3" \
--conf "spark.pyspark.python=/root/anaconda3/bin/python3" \
/export/data/workspace/ky06_pyspark/_01_SparkBase/src/_02_pyspark_wd.py

在这里插入图片描述

三、Spark交互流程

1.client on Yarn 集群

在这里插入图片描述

  1. 首先会在提交的节点上启动一个Driver程序

  2. Driver启动后,执行main函数, 首先创建SparkContext对象(底层是基于py4j, 识别python中如何构建sc对象, 将其映射转换为Java代码来构建sc对象),当Driver启动成功后, 会向Master进行注册, 告知已经启动成功了

  3. 连接Yarn集群的主节点, 将需要申请资源以及启动executor工作包装为一个job 任务, 提交给Yarn的主节点, 主节点收到任务后, 首先会随机的选择一个nodemanager启动AppMaster

  4. 当AppMaster启动后, 会和Yarn的主节点建立心跳机制, 告知已经启动成功了, 启动成功后, 就进行资源申请工作, 将需要申请的资源通过心跳包的形式发送给resourceManager, resourceManager收到资源申请后,开始进行资源分配工作,底层是基于资源调度器来实现(默认: 容量调度器), 当RM将资源分配OK后, 等待AppMaster进行拉取操作, AppMaster会定时的通过心跳的方式, 询问RM是否已经准备好资源, 一旦发现准备好了, 立即获取对应的资源信息
    executor1: node1 2cpu 3gb
    executor2: node3 2cpu 3gb

  5. AppMaster根据获取到的资源信息,连接对应的节点, 通知对应nodemanager启动Executor, 并占用对应资源, nodemanager对应executor进程启动完成后, 反向注册给Driver(通知已经启动成功了)

  6. Driver开始处理代码:
    6.1 首先会加载所有的与RDD相关的API(算子),基于算子之间的依赖关系,形成DAG(有向无环图)执行流程图,划分stage阶段, 并且确定每个阶段应该运行多少个线程以及每个线程应该由哪个executor来执行 (任务分配)
    6.2 Driver程序通知对应的executor程序, 来执行具体的任务
    6.3 Executor接收到任务信息后, 启动线程,开始执行处理即可: Executor咋执行的时候, 由于RDD代码中有大量的python的函数,而executor是一个JVM程序, 无法解析Python函数,此时通过调用Python解析器,执行函数, 将函数的结果返回给Executor
    6.4 Executor在运行的过中, 如果发现最终的结果需要返回给Driver, 直接返回Driver即可, 如果不需要返回, 直接输出, 结束即可
    6.5 Driver程序监听这个executor执行的状态信息, 当各个Executor都执行完成后, Driver认为任务运行完成了,同时AppMaster也会接收到各个节点执行完成的状态, 通知RM, 任务执行完成, RM回收资源, 关闭AppMaster, 并通知Driver程序

  7. 当任务执行完成后, Driver后续的相关代码, 该打印的打印, 该关闭的执行关闭操作 一旦执行stop(), 退出Driver程序

2.cluster on Yarn 集群

在这里插入图片描述

区别点:
在集群模式下, Driver程序 和 AppMaster 二者合二为一, Driver就是AppMaster. AppMaster就是我们的Driver

PySpark 和 Spark交互流程: cluster on Yarn集群

  1. 首先会将任务提交到Yarn集群的主节点(resourceManager RM)

  2. RM接收到任务信息后, 根据Driver(AppMaster)的资源配置信息的要求, 选择一个NodeManager节点(有资源, 如果都有随机)来启动Driver(AppMaster)程序,并且占用相应的资源

  3. Driver(AppMaster)启动后, 执行main函数, 首先创建SparkContext对象(底层是基于py4j, 识别python中如何构建sc对象, 将其映射转换为Java代码来构建sc对象),当Driver启动成功后, 会向RM进行注册, 告知已经启动成功了

  4. 当Driver(AppMaster)启动后, 会和Yarn的主节点建立心跳机制 启动成功后, 就进行Executor资源申请工作, 将需要申请的资源通过心跳包的形式发送给resourceManager, resourceManager收到资源申请后,开始进行资源分配工作,底层是基于资源调度器来实现(默认: 容量调度器), 当RM将资源分配OK后, 等待Driver(AppMaster)进行拉取操作, Driver(AppMaster)会定时的通过心跳的方式, 询问RM是否已经准备好资源, 一旦发现准备好了, 立即获取对应的资源信息
    executor1: node1 2cpu 3gb
    executor2: node3 2cpu 3gb

  5. Driver(AppMaster)根据获取到的资源信息,连接对应的节点, 通知对应nodemanager启动Executor, 并占用对应资源, nodemanager对应executor进程启动完成后, 反向注册给Driver(AppMaster)(通知已经启动成功了)

  6. Driver(AppMaster)开始处理代码:
    6.1 首先会加载所有的与RDD相关的API(算子),基于算子之间的依赖关系,形成DAG(有向无环图)执行流程图,划分stage阶段, 并且确定每个阶段应该运行多少个线程以及每个线程应该由哪个executor来执行 (任务分配)
    6.2 Driver(AppMaster)程序通知对应的executor程序, 来执行具体的任务
    6.3 Executor接收到任务信息后, 启动线程,开始执行处理即可: Executor咋执行的时候, 由于RDD代码中有大量的python的函数,而executor是一个JVM程序, 无法解析Python函数,此时通过调用Python解析器,执行函数, 将函数的结果返回给Executor
    6.4 Executor在运行的过中, 如果发现最终的结果需要返回给Driver(AppMaster), 直接返回Driver(AppMaster)即可, 如果不需要返回, 直接输出, 结束即可
    6.5 Driver(AppMaster)程序监听这个executor执行的状态信息, 当各个Executor都执行完成后, Driver(AppMaster)认为任务运行完成了

  7. 当任务执行完成后, Driver(AppMaster)执行后续的相关代码, 该打印的打印, 该关闭的执行关闭操作 一旦执行stop(), 通知RM, 程序执行完成, RM回收资源, 退出Driver(AppMaster)程序

四、Spark-Submit相关的参数说明

spark-submit在提交的过程中, 设置非常多参数, 调整任务相关信息

  • 基本参数设置

在这里插入图片描述

  • Driver的资源配置参数

在这里插入图片描述

  • executor的资源配置参数
    在这里插入图片描述

总结

今天给大家分享的是Pyspark基础入门2。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值