Python大数据之PySpark(四)SparkBaseCore

文章目录

  • SparkBase&Core
    • 环境搭建-Spark on YARN
    • 扩展阅读-Spark关键概念
    • [了解]PySpark角色分析
    • [了解]PySpark架构
    • 后记

SparkBase&Core

  • 学习目标
  • 掌握SparkOnYarn搭建
  • 掌握RDD的基础创建及相关算子操作
  • 了解PySpark的架构及角色

环境搭建-Spark on YARN

  • Yarn 资源调度框架,提供如何基于RM,NM,Continer资源调度
  • Yarn可以替换Standalone结构中Master和Worker来使用RM和NM来申请资源

SparkOnYarn本质

  • Spark计算任务通过Yarn申请资源,SparkOnYarn
  • 将pyspark文件,经过Py4J(Python for java)转换,提交到Yarn的JVM中去运行

修改配置

  • 思考,如何搭建SparkOnYarn环境?

  • 1-需要让Spark知道Yarn(yarn-site.xml)在哪里?

  • 在哪个文件下面更改?spark-env.sh中增加YARN_CONF_DIR的配置目录

  • image-20210910103700613

  • 2-修改Yan-site.xml配置,管理内存检查,历史日志服务器等其他操作

  • 修改配置文件

  • image-20210910103802972

  • 3-需要配置历史日志服务器

  • 需要实现功能:提交到Yarn的Job可以查看19888的历史日志服务器可以跳转到18080的日志服务器上

  • 因为19888端口无法查看具体spark的executor后driver的信息,所以搭建历史日志服务器跳转

  • 3-需要准备SparkOnYarn的需要Jar包,配置在配置文件中

  • 在spark-default.conf中设置spark和yarn映射的jar包文件夹(hdfs)

  • image-20210910103918057

  • 注意,在最终执行sparkonyarn的job的时候一定重启Hadoop集群,因为更改相关yarn配置

  • 4-执行SparkOnYarn

  • 这里并不能提供交互式界面,只有spark-submit(提交任务)

  • #基于SparkOnyarn提交任务
    bin/spark-submit \
    --master yarn \
    /export/server/spark/examples/src/main/python/pi.py  \
    10
    
  • image-20210910103957989

小结

SparKOnYarn:使用Yarn提供了资源的调度和管理工作,真正执行计算的时候Spark本身

Master和Worker的结构是Spark Standalone结构 使用Master申请资源,真正申请到是Worker节点的Executor的Tasks线程

原来Master现在Yarn替换成ResourceManager,现在Yarn是Driver给ResourceManager申请资源

原来Worker现在Yarn替换为Nodemanager,最终提供资源的地方时hiNodeManager的Continer容器中的tasks

安装配置:

1-让spark知道yarn的位置

2-更改yarn的配置,这里需要开启历史日志服务器和管理内存检查

3-整合Spark的历史日志服务器和Hadoop的历史日志服务器,效果:通过8088的yarn的http://node1:8088/cluster跳转到18080的spark的historyserver上

4-SparkOnYarn需要将Spark的jars目录下的jar包传递到hdfs上,并且配置spark-default.conf让yarn知晓配置

5-测试,仅仅更换–master yarn

部署模式

#如果启动driver程序是在本地,称之为client客户端模式,现象:能够在client端看到结果

#如果在集群模式中的一台worker节点上启动driver,称之为cluser集群模式,现象:在client端看不到结果

  • client

>*

  • 首先 client客户端提交spark-submit任务,其中spark-submit指定–master资源,指定–deploy-mode模式

  • 由启动在client端的Driver申请资源,

  • 交由Master申请可用Worker节点的Executor中的Task线程

  • 一旦申请到Task线程,将资源列表返回到Driver端

  • Driver获取到资源后执行计算,执行完计算后结果返回到Driver端

  • 由于Drivr启动在client端的,能够直接看到结果

  • 实验:

#基于Standalone的脚本—部署模式client
#driver申请作业的资源,会向–master集群资源管理器申请
#执行计算的过程在worker中,一个worker有很多executor(进程),一个executor下面有很多task(线程)
bin/spark-submit
–master spark://node1:7077
–deploy-mode client
–driver-memory 512m
–executor-memory 512m
/export/server/spark/examples/src/main/python/pi.py
10

  • cluster

image-20210910114736875

  • 首先 client客户端提交spark-submit任务,其中spark-submit指定–master资源,指定–deploy-mode模式

  • 由于指定cluster模式,driver启动在worker节点上

  • 由driver申请资源,由Master返回worker可用资源列表

  • 由Driver获取到资源执行后续计算

  • 执行完计算的结果返回到Driver端,

  • 由于Driver没有启动在客户端client端,在client看不到结果

  • 如何查看数据结果?

  • 需要在日志服务器上查看,演示

  • 实验:

SPARK_HOME=/export/server/spark
${SPARK_HOME}/bin/spark-submit
–master spark://node1.itcast.cn:7077,node2.itcast.cn:7077
–deploy-mode cluster
–driver-memory 512m
–executor-memory 512m
–num-executors 1
–total-executor-cores 2
–conf “spark.pyspark.driver.python=/root/anaconda3/bin/python3”
–conf “spark.pyspark.python=/root/anaconda3/bin/python3”
${SPARK_HOME}/examples/src/main/python/pi.py
10


image-20210910115446185


  • 注意事项:
  • image-20210910144911859
  • image-20210910145215725
  • 通过firstpyspark.py写的wordcount的代码,最终也是转化为spark-submit任务提交
  • 如果是spark-shell中的代码最终也会转化为spark-submit的执行脚本
  • 在Spark-Submit中可以提交driver的内存和cpu,executor的内存和cpu,–deploy-mode部署模式

Spark On Yarn两种模式

  • Spark on Yarn两种模式

  • –deploy-mode client和cluster

  • Yarn的回顾:Driver------AppMaster------RM-----NodeManager—Continer----Task

  • client模式

#deploy-mode的结构
SPARK_HOME=/export/server/spark
${SPARK_HOME}/bin/spark-submit
–master yarn
–deploy-mode client
–driver-memory 512m
–driver-cores 2
–executor-memory 512m
–executor-cores 1
–num-executors 2
–queue default
${SPARK_HOME}/examples/src/main/python/pi.py
10


#瘦身
SPARK_HOME=/export/server/spark
${SPARK_HOME}/bin/spark-submit
–master yarn
–deploy-mode client
${SPARK_HOME}/examples/src/main/python/pi.py
10



在这里插入图片描述

  • 原理:

  • image-20210910151817226

  • 1-启动Driver

  • 2-由Driver向RM申请启动APpMaster

  • 3-由RM指定NM启动AppMaster

  • 4-AppMaster应用管理器申请启动Executor(资源的封装,CPU,内存)

  • 5-由AppMaster指定启动NodeManager启动Executor

  • 6-启动Executor进程,获取任务计算所需的资源

  • 7-将获取的资源反向注册到Driver

  • 由于Driver启动在Client客户端(本地),在Client端就可以看到结果3.1415

  • 8-Driver负责Job和Stage的划分[了解]

  • 1-执行到Action操作的时候会触发Job,不如take

  • 2-接下来通过DAGscheduler划分Job为Stages,为每个stage创建task

  • 3-接下来通过TaskScheduler将每个Stage的task分配到每个executor去执行

  • 4-结果返回到Driver端,得到结果

  • cluster:

  • 作业:

${SPARK_HOME}/bin/spark-submit
–master yarn
–deploy-mode cluster
–driver-memory 512m
–executor-memory 512m
–executor-cores 1
–num-executors 2
–queue default
–conf “spark.pyspark.driver.python=/root/anaconda3/bin/python3”
–conf “spark.pyspark.python=/root/anaconda3/bin/python3”
${SPARK_HOME}/examples/src/main/python/pi.py
10
#瘦身
${SPARK_HOME}/bin/spark-submit
–master yarn
–deploy-mode cluster
${SPARK_HOME}/examples/src/main/python/pi.py
10

image-20210910152905082>>* image-20210910152928608

  • image-20210910152952601

  • image-20210910153227501

原理:

image-20210910153937601

image-20210910154530960在这里插入图片描述

扩展阅读:两种模式详细流程

扩展阅读-Spark关键概念

扩展阅读:Spark集群角色

  • image-20210910161552868
  • Executor通过启动多个线程(task)来执行对RDD的partition进行并行计算
  • 也就是执行我们对RDD定义的例如map、flatMap、reduce等算子操作。
  • Driver:启动SparkCOntext的地方称之为Driver,Driver需要向CLusterManager申请资源,同时获取到资源后会划分Stage提交Job
  • Master:l 主要负责资源的调度和分配,并进行集群的监控等职责;
  • worker:一个是用自己的内存存储RDD的某个或某些partition;另一个是启动其他进程和线程(Executor),对RDD上的partition进行并行的处理和计算
  • Executor:一个Worker****(NodeManager)****上可以运行多个Executor,Executor通过启动多个线程(task)来执行对RDD的partition进行并行计算
  • 每个Task线程都会拉取RDD的每个分区执行计算,可以执行并行计算

扩展阅读:Spark-shell和Spark-submit

  • bin/spark-shell --master spark://node1:7077 --driver-memory 512m --executor-memory 1g

  • # SparkOnYarn组织参数

–driver-memory MEM 默认1g,Memory for driver (e.g. 1000M, 2G) (Default: 1024M). Driver端的内存

–driver-cores NUM 默认1个,Number of cores used by the driver, only in cluster mode(Default: 1).

–num-executors NUM 默认为2个,启动多少个executors

–executor-cores NUM 默认1个,Number of cores used by each executor,每个executou需要多少cpucores

–executor-memory 默认1G,Memory per executor (e.g. 1000M, 2G) (Default: 1G) ,每个executour的内存

–queue QUEUE_NAME The YARN queue to submit to (Default: “default”).


bin/spark-submit --master yarn \

–deploy-mode cluster \

–driver-memory 1g \

–driver-cores 2 \

–executor-cores 4 \

–executor-memory 512m \

–num-executors 10 \

path/XXXXX.py \

10

扩展阅读:命令参数

–driver-memory MEM 默认1g,Memory for driver (e.g. 1000M, 2G) (Default: 1024M). Driver端的内存

–driver-cores NUM 默认1个,Number of cores used by the driver, only in cluster mode(Default: 1).

–num-executors NUM 默认为2个,启动多少个executors

–executor-cores NUM 默认1个,Number of cores used by each executor,每个executou需要多少cpucores

–executor-memory 默认1G,Memory per executor (e.g. 1000M, 2G) (Default: 1G) ,每个executour的内存

–queue QUEUE_NAME The YARN queue to submit to (Default: “default”).

MAIN函数代码执行

  • image-20210910165027137
  • Driver端负责申请资源包括关闭资源,负责任务的Stage的切分
  • Executor执行任务的计算
  • 一个Spark的Application有很多Job
  • 一个Job下面有很多Stage
  • 一个Stage有很多taskset
  • 一个Taskset有很多task任务构成的额
  • 一个rdd分task分区任务都需要executor的task线程执行计算

再续 Spark 应用

[了解]PySpark角色分析

  • Spark的任务执行的流程
  • 面试的时候按照Spark完整的流程执行即可
  • image-20210910175410393
  • Py4J–Python For Java–可以在Python中调用Java的方法
  • 因为Python作为顶层的语言,作为API完成Spark计算任务,底层实质上还是Scala语言调用的
  • 底层有Python的SparkContext转化为Scala版本的SparkContext
  • ****为了能在Executor端运行用户定义的Python函数或Lambda表达****式,则需要为每个Task单独启一个Python进程,通过socket通信方式将Python函数或Lambda表达式发给Python进程执行。

[了解]PySpark架构

  • image-20210910180018622

后记

📢博客主页:https://manor.blog.csdn.net

📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 Maynor 原创,首发于 CSDN博客🙉
📢感觉这辈子,最深情绵长的注视,都给了手机⭐
📢专栏持续更新,欢迎订阅:https://blog.csdn.net/xianyu120/category_12453356.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/147785.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

面试题:熟悉设计模式吗?谈谈简单工厂模式和策略模式的区别

刚刚接触设计模式的时候,我相信单例模式和工厂模式应该是用的最多的,毕竟很多的底层代码几乎都用了这些模式。自从接触了一次阿里的公众号发的一次文章关于 DDD的使用 以后,就逐渐接触了策略模式。现在在项目中运用最多的也是这几种设计模式了…

【深蓝学院】手写VIO第4章--基于滑动窗口算法的 VIO 系统:可观性和 一致性--笔记

0. 内容 T1. 参考SLAM14讲P247直接可写,注意 ξ 1 , ξ 2 \xi_1,\xi_2 ξ1​,ξ2​之间有约束(关系)。 套用舒尔补公式: marg掉 ξ 1 \xi_1 ξ1​之后,信息被传递到 L 1 和 L 2 L_1和L_2 L1​和L2​之间了。 T2.

趋势列表上又多了两个漏洞!

CVE-2023-24955 和 CVE-2023-29360 来自微软产品 5 月和 6 月的安全补丁报告。它们之所以特别危险,是因为出现了公开漏洞利用。 以下是详细信息。 第一个漏洞 CVE-2023-24955存在于 Microsoft SharePoint Server 中。它可导致远程代码执行。 它与覆盖随后由服务器执…

匿名上位机V7波形显示教程-简单能用

匿名上位机V7波形显示教程-简单能用 匿名上位机V7下位机数据格式根据匿名上位机V7的手册说明文档,编写对应的指令在主函数中初始化ANDmessage驱动连接匿名上位机V7 匿名上位机V7下位机数据格式 DATA区域内容: 举例说明DATA区域格式,例如上文&…

选择排序算法:简单但有效的排序方法

在计算机科学中,排序算法是基础且重要的主题之一。选择排序(Selection Sort)是其中一个简单但非常有用的排序算法。本文将详细介绍选择排序的原理和步骤,并提供Java语言的实现示例。 选择排序的原理 选择排序的核心思想是不断地从…

NestJs和Vite使用monorepo管理项目中,需要使用共享的文件夹步骤

NestJs和Vite使用monorepo管理项目中,需要使用共享的文件夹步骤 1 首先需要将nest-cli打包的功能通过webpack接管 nest-cli.json文件内容 {"$schema": "https://json.schemastore.org/nest-cli","collection": "nestjs/schematics",…

FPGA project : TFT_LCD

实验目标: 驱动TFT_LCD显示十色彩条。 重点掌握的知识: 1,液晶显示器,简称LCD(Liquid Crystal Display),相对于上一代CRT显示器(阴极射线管显示器),LCD显示器具有功耗低、体积小、承载的信息量大及不伤眼…

Python入门教程48:Pycharm永久镜像源的pip配置方法

国内几个好用的Python镜像服务器地址: 清华大学镜像站:https://pypi.tuna.tsinghua.edu.cn/simple/阿里云镜像站:https://mirrors.aliyun.com/pypi/simple/中科大镜像站:https://pypi.mirrors.ustc.edu.cn/simple/中国科技大学镜…

入门运维之MySQL管理

一、系统数据库 Mysql数据库安装完成后,自带了以下四个数据库,具体作用如下: 1.1常用工具 1.1.1 mysql 该mysql不是指mysql服务,而是指mysql的客户端工具。 语法 :mysql [options] [database] 选项 :-u, --user=name #指定用户名-p, --password[=name] #指定密码-h,…

若依不分离+Thymeleaf select选中多个回显

项目中遇到的场景&#xff0c;亲测实用 表单添加时&#xff0c;select选中多个&#xff0c;编辑表单时&#xff0c;select多选回显&#xff0c;如图 代码&#xff1a; // 新增代码 <label class"col-sm-3 control-label">通道&#xff1a;</label><…

博途SCL区间搜索指令(判断某个数属于某个区间)

S型速度曲线行车位置控制,停靠位置搜索功能会用到区间搜索指令,下面我们详细介绍区间搜索指令的相关应用。 S型加减速行车位置控制(支持点动和停车位置搜索)-CSDN博客S型加减速位置控制详细算法和应用场景介绍,请查看下面文章博客。本篇文章不再赘述,这里主要介绍点动动和…

二十六、设置时序电路初始状态的方法(初始值设置)(时序电路置数)2

方法2 在理解方法1的化简(1)这个方法后,又可以想到输入触发器R和S两个输入端的信号也无非就是0和1。那么直接用LOAD这个信号接在R和S两个输入端上即可。 先用开关判断触发器的R和S是低电平触发还是高电平触发(下图触发器可以直接看出为低电平触发,但是实际用管子搭建的触…

Jmeter+jenkins接口性能测试平台实践整理

最近两周在研究jmeter&#xff0b;Jenkin的性能测试平台测试dubbo接口&#xff0c;分别尝试使用maven&#xff0c;ant和Shell进行构建&#xff0c;jmeter相关设置略。 一、Jmeterjenkins&#xff0b;Shell&#xff0b;tomcat 安装Jenkins,JDK,tomcat,并设置环境变量&#xff0…

Flutter+SpringBoot实现ChatGPT流实输出

FlutterSpringBoot实现ChatGPT流式输出、上下文了连续对话 最终实现Flutter的流式输出上下文连续对话。 这里就是提供一个简单版的工具类和使用案例&#xff0c;此处页面仅参考。 服务端 这里直接封装提供工具类&#xff0c;修改自己的apiKey即可使用&#xff0c;支持连续…

BASH shell脚本篇5——文件处理

这篇文章介绍下BASH shell中的文件处理。之前有介绍过shell的其它命令&#xff0c;请参考&#xff1a; BASH shell脚本篇1——基本命令 BASH shell脚本篇2——条件命令 BASH shell脚本篇3——字符串处理 BASH shell脚本篇4——函数 在Bash Shell脚本中&#xff0c;可以使用…

visual studio禁用qt-vsaddin插件更新

visual studio里qt-vsaddin插件默认是自动更新的&#xff0c;由于qt-vsaddin插件新版本的操作方式与老版本相差较大&#xff0c;且新版本不稳定&#xff0c;容易出Bug&#xff0c;所以需要禁用其自动更新&#xff0c;步骤如下&#xff1a;     点击VS2019菜单栏上的【扩展】–…

【计算机网络】高级IO之select

文章目录 1. 什么是IO&#xff1f;什么是高效 IO? 2. IO的五种模型五种IO模型的概念理解同步IO与异步IO整体理解 3. 阻塞IO4. 非阻塞IOsetnonblock函数为什么非阻塞IO会读取错误&#xff1f;对错误码的进一步判断检测数据没有就绪时&#xff0c;返回做一些其他事情完整代码myt…

热点文章采集-热点资讯采集工具免费

在信息时代&#xff0c;掌握热点资讯、了解热门时事、采集热门文章是许多自媒体从业者和信息追踪者的重要任务。然而&#xff0c;这并不是一项容易的任务。信息的海洋庞大而繁杂&#xff0c;要从中捞取有价值的热点和文章需要耗费大量时间和精力。 热点资讯采集&#xff1a;信息…

基于体素场景的摄像机穿模处理

基于上一篇一种基于体素的射线检测 使用射线处理第三人称摄像头穿模问题 基于体素的第三人称摄像机拉近简单处理 摄像机移动至碰撞点处 简单的从角色身上发射一条射线到摄像机&#xff0c;中途遇到碰撞就把摄像机移动至该碰撞点 public void UpdateDistance(float defaultDist…

FOC程序cubemx配置-ADC配置

具体配置步骤大家参考&#xff1a;这篇文章 我配置后用keil5自带的仿真工具查看引脚波形&#xff0c;在这里写一下遇到的问题。 1、波形仿真的时候出现 Unknown Signal&#xff1a;参考 这篇文章 2、生成的波形并不完全互补。 PS&#xff1a;出现以上这种情况时&#xff0…