Pyspark基础入门2

Pyspark

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


文章目录

  • Pyspark
  • 前言
  • 一、Spark On Yarn
  • 二、两种部署方式
    • 1.方式说明
    • 2.演示操作:
  • 三、Spark交互流程
    • 1.client on Yarn 集群
    • 2.cluster on Yarn 集群
  • 四、Spark-Submit相关的参数说明
  • 总结


前言

Spark是一款用于大规模数据处理分布式的分析引擎
Pyspark基础入门2_第1张图片


一、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

Pyspark基础入门2_第2张图片
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

Pyspark基础入门2_第3张图片

三、Spark交互流程

1.client on Yarn 集群

Pyspark基础入门2_第4张图片

  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 集群

Pyspark基础入门2_第5张图片

区别点:
在集群模式下, 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在提交的过程中, 设置非常多参数, 调整任务相关信息

  • 基本参数设置

Pyspark基础入门2_第6张图片

  • Driver的资源配置参数

Pyspark基础入门2_第7张图片

  • executor的资源配置参数
    Pyspark基础入门2_第8张图片

总结

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

你可能感兴趣的:(Pyspark系列,大数据,spark,分布式)