由于python的算法开发常常会用到pytorch、sklearn、tensorflow这种动不动几个G的大包和大的语料,而我们开发的模型常常需要用于大数据环境的预测,所以避免不了使用pyspark、greenplum这种集群环境去跑数据。

Spark on YARN又分为client模式和cluster模式:在client模式下,Spark Application运行的Driver会在提交程序的节点上,而该节点可能是YARN集群内部节点,也可能不是,一般来说提交Spark Application的客户端节点不是YARN集群内部的节点,那么在客户端节点上可以根据自己的需要安装各种需要的软件和环境,以支撑Spark Application正常运行。在cluster模式下,Spark Application运行时的所有进程都在YARN集群的NodeManager节点上,而且具体在哪些NodeManager上运行是由YARN的调度策略所决定的。

对比这两种模式,最关键的是Spark Application运行时Driver所在的节点不同,而且,如果想要对Driver所在节点的运行环境进行配置,区别很大,但这对于PySpark Application运行来说是非常关键的。

PySpark Application运行原理

理解PySpark Application的运行原理,有助于我们使用Python编写Spark Application,并能够对PySpark Application进行各种调优。PySpark构建于Spark的Java API之上,数据在Python脚本里面进行处理,而在JVM中缓存和Shuffle数据,数据处理流程如下图所示 :


Spark Application会在Driver中创建pyspark.SparkContext对象,后续通过pyspark.SparkContext对象来构建Job DAG并提交DAG运行。使用Python编写PySpark Application,在Python编写的Driver中也有一个pyspark.SparkContext对象,该pyspark.SparkContext对象会通过Py4J模块启动一个JVM实例,创建一个JavaSparkContext对象。PY4J只用在Driver上,后续在Python程序与JavaSparkContext对象之间的通信,都会通过PY4J模块来实现,而且都是本地通信。
————————————————

PySpark Application中也有RDD,对Python RDD的Transformation操作,都会被映射到Java中的PythonRDD对象上。对于远程节点上的Python RDD操作,Java PythonRDD对象会创建一个Python子进程,并基于Pipe的方式pipe函数可用于创建一个管道,以实现进程间的通信)与该Python子进程通信,将用户编写Python处理代码和数据发送到Python子进程中进行处理。

我们基于Spark on YARN模式,并根据当前企业所具有的实际集群运行环境情况,来说明如何在Spark集群上运行PySpark Application,大致分为如下2种情况:

  1. YARN集群配置Python环境,这种情况,如果是初始安装YARN、Spark集群,并考虑到了当前应用场景需要支持Python程序运行在Spark集群之上,这时可以准备好对应Python软件包、依赖模块,在YARN集群中的每个节点上进行安装。这样,YARN集群的每个NodeManager上都具有Python环境,可以编写PySpark  Application并在集群上运行。目前比较流行的是直接安装Python虚拟环境,使用Anaconda等软件,可以极大地简化Python环境的管理工作。缺点是,如果后续使用Python编写Spark Application,需要增加新的依赖模块,那么就需要在YARN集群的每个节点上都进行该新增模块的安装。而且,如果依赖Python的版本,可能还需要管理不同版本Python环境。因为提交PySpark Application运行,具体在哪些NodeManager上运行该Application,是由YARN的调度器决定的,必须保证每个NodeManager上都具有Python环境(基础环境+依赖模块),当然这些可以做成脚本化管理,使得python的依赖包完成各节点的自动安装。
spark-submit     --master yarn  --name "20220331093907run01.py"  --driver-memory 6G   --driver-cores 4               --executor-memory 32G --executor-cores 12  --num-executors 10               --archives /usr/local/anaconda3/envs/pyspark.zip              --total-executor-cores 16               --conf spark.default.parallelism=150               --conf spark.executor.memoryOverhead=4g               --conf spark.driver.memoryOverhead=2g    --conf spark.yarn.maxAppAttempts=3  --conf spark.yarn.submit.waitAppCompletion=true              --conf spark.pyspark.driver.python=/usr/local/anaconda3/envs/pyspark/bin/python3              --conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=/usr/local/anaconda3/envs/pyspark/bin/python3              --conf spark.pyspark.python=/usr/local/anaconda3/envs/pyspark/bin/python3              hdfs://master:8020/algo/tasks/20220331093907run01.py
  1. YARN集群不配置Python环境,这种情况,更适合企业已经安装了规模较大的YARN集群,并在开始使用时并未考虑到后续会使用基于Python来编写Spark Application,并且不想在YARN集群的NodeManager上安装Python基础环境及其依赖模块。我们参考了Benjamin Zaitlen的博文(详见后面参考链接),并基于Anaconda软件环境进行了实践和验证,具体实现思路如下所示:

    在任意一个Linux OS的节点上,安装Anaconda软件
    通过Anaconda创建虚拟Python环境
    在创建好的Python环境中下载安装依赖的Python模块
    将整个Python环境打成zip包
    提交PySpark Application时,并通过--archives选项指定zip包路径

    spark-submit     --master yarn  --name "20220331093907run01.py"                 --deploy-mode client --driver-memory 6G   --driver-cores 4               --executor-memory 32G --executor-cores 12  --num-executors 10               --archives /usr/local/anaconda3/envs/pyspark.zip              --total-executor-cores 16               --conf spark.default.parallelism=150               --conf spark.executor.memoryOverhead=4g               --conf spark.driver.memoryOverhead=2g    --conf spark.yarn.maxAppAttempts=3  --conf spark.yarn.submit.waitAppCompletion=true              --conf spark.pyspark.driver.python=/usr/local/anaconda3/envs/pyspark/bin/python3          hdfs://master:8020/algo/tasks/20220331093907run01.py

PySpark任务在YARN集群上运行python 算法相关推荐

  1. pythonspark集群模式运行_有关python numpy pandas scipy 等 能在YARN集群上 运行PySpark

    有关这个问题,似乎这个在某些时候,用python写好,且spark没有响应的算法支持, 能否能在YARN集群上 运行PySpark方式, 将python分析程序提交上去? Spark Applicat ...

  2. 基于YARN集群构建运行PySpark Application

    文章转载:https://www.tuicool.com/articles/eaYVN3v Spark Application可以直接运行在YARN集群上,这种运行模式,会将资源的管理与协调统一交给Y ...

  3. anaconda3环境整体打包放在Spark集群上运行

    一.将虚拟Python环境打包 创建好环境后,进入到环境所在的文件夹,例如环境是/home/hadoop/anaconda3/envs, cd到envs下,使用打包命令将当前目录下的文件打成zip包: ...

  4. spark在集群上运行

    1.spark在集群上运行应用的详细过程 (1)用户通过spark-submit脚本提交应用 (2)spark-submit脚本启动驱动器程序,调用用户定义的main()方法 (3)驱动器程序与集群管 ...

  5. 小白学习Spark03-在集群上运行Spark

    03 在集群上运行Spark 3.1 Spark运行架构 3.1.1 驱动器节点 3.1.2 执行器节点 3.1.3 集群管理器 3.1.4 启动Spark程序 3.1.5 小结 3.2 使用spar ...

  6. Python---pyspark中的数据输出(collect,reduce,take,count,saveAsTextFile),了解PySpark代码在大数据集群上运行

    1. Spark的编程流程就是: 将数据加载为RDD(数据输入) 对RDD进行计算(数据计算) 将RDD转换为Python对象(数据输出) 2. 数据输出的方法 将RDD的结果输出为Python对象的 ...

  7. 在生产集群上运行topology

    2019独角兽企业重金招聘Python工程师标准>>> 在生产集群上运行topology 博客分类: 分布式计算 在生产集群上运行topology跟本地模式差不多.下面是步骤: 1) ...

  8. 从认证到调度,K8s 集群上运行的小程序到底经历了什么?

    作者 | 声东  阿里云售后技术专家 导读:不知道大家有没有意识到一个现实:大部分时候,我们已经不像以前一样,通过命令行,或者可视窗口来使用一个系统了. 前言 现在我们上微博.或者网购,操作的其实不是 ...

  9. 在local模式下的spark程序打包到集群上运行

    一.前期准备 前期的环境准备,在Linux系统下要有Hadoop系统,spark伪分布式或者分布式,具体的教程可以查阅我的这两篇博客: Hadoop2.0伪分布式平台环境搭建 Spark2.4.0伪分 ...

  10. 如何在集群上运行Shark

    如何在集群上运行Shark 本文介绍在计算机集群上如何启动和运行Shark.如果对Amazon EC2上运行Shark感兴趣,请点击这里查看如何使用EC2脚本快速启动预先配置好的集群. 依赖: 注意: ...

最新文章

  1. 当表格列数太多时,怎么实现表格的横向滚动
  2. 使用session监听+spring MVC拦截器禁止用户重复登录
  3. 【NOIP2010】【P1317】乌龟棋
  4. linux函数计时,Linux 中的计时——gettimeofday函数
  5. jackson实现java对象转支付宝/微信模板消息
  6. 三星mega2 android os,GALAXY MEGA2
  7. 技术博客么?开始每天一更
  8. 训练日志 2019.4.17
  9. Kubesphere查看token
  10. Python_Socket实现简单的ssh/ftp
  11. Excel-DNA开发包:ExcelDna-0.34.6.zip下载
  12. python dict批量选择_这一定是你见过最全面的python重点
  13. 罗翔 ---- 落俗不可避免,浪漫至死不渝
  14. opencv 学习第一课 图像读取、显示、写入 代码注释版 保证你每一行都能读懂
  15. keil 5 注册机使用及报错解决办法
  16. 软件工程导论—可行性研究
  17. 小马激活工具激活系统导致系统崩溃
  18. java for循环
  19. Android阿拉伯适配rtl
  20. 评郭德纲《论50年相声之现状》

热门文章

  1. Flutter实战之AS快键键
  2. SQL 中的 in 与 not in、exists 与 not exists 的区别以及性能分析
  3. 面试常考:Java中synchronized和volatile有什么区别?
  4. 我是如何在5 天内,完成 60 个类的核心模块的重构
  5. 怎么避免后台被搜索_优化亚马逊后台关键词的6个技巧,让买家快速找到你
  6. 电信公网ip和内网ip的区别_私有IP共有IP和弹性IP的区别
  7. 单片机脉冲喷吹仪c语言,C51单片机脉冲累加器(C语言程序)
  8. centos mysql gui_mysql gui
  9. jdk32位安装包下载_MySQL 8.0.19安装图文详解!手把手教会您从下载到安装成功
  10. python env虚拟环境