当前位置: 首页 > news >正文

Spark On YARN时指定Python版本

坑很多,直接上兼容性最佳的命令,将python包上传到hdfs或者file:/home/xx/(此处无多余的/)

# client 模式
$SPARK_HOME/spark-submit \
--master yarn \
--deploy-mode client \
--num-executors 2 \
--conf "spark.yarn.dist.archives=<Python包路径>/Python包名字.tgz#Python别名" \
--conf "spark.yarn.appMasterEnv.PYSPARK_PYTHON=./Python别名/bin/python" \
本地python路径比如Hello.py# cluster 模式
$SPARK_HOME/spark-submit \
--master yarn \
--deploy-mode cluster \
--num-executors 2 \
--conf "spark.yarn.dist.archives=<Python包路径>/Python包名字.tgz#Python别名" \
--conf "spark.yarn.appMasterEnv.PYSPARK_PYTHON=./Python别名/bin/python" \
本地python路径比如Hello.py

具体细节

关于 Python包
  • 打包可以参考 https://www.jianshu.com/p/d77e16008957,https://blog.csdn.net/sgyuanshi/article/details/114648247 非官方的python,比如anaconda的python可能会有坑,所以最好先用官方版本进行测试

  • 此处使用官方2.7.9打包了一个 myPython.tgz

    • 这个文件解压 后是 ./binlibshare等文件夹

    • python指令在./bin录下,dddd(懂的都懂)

    • myPython.tgz可以上传到hdfs也可以放在服务器本地

  • 然后用 archives参数指向myPython.tgz,以下2种都可以

    • --conf "spark.yarn.dist.archives=<Python包路径>/Python包名字.tgz#Python别名"
    • --archives "<Python包路径>/Python包名字.tgz#Python别名"
  • #Python别名是必须的,比如是#py279,则YARN会把压缩文件解压到py279文件夹中,后续就可以直接使用./py279/bin/python 来指向 运行时的python了

  • myPython.tgz的存放位置

    • hdfs时基本没有坑,比如是 hdfs://aaa:port/home/xxx/yy/myPython.tgz
      • 则上述archive参数为 --archives hdfs://aaa:port/home/xxx/yy/myPython.tgz#py279
    • 存在本地时,有坑,比如是 在 /home/haha/myPython.tgz
      • 则上述archive参数为--archives file:/home/haha/myPython.tgz#py279,此处并不是file:///home/hahaxxx (即正确的形式并没有多余的/)

至此,python包已经放好了,也重命名了,比如是存到了hdfs:

--archives "hdfs://aaa:port/home/xxx/yy/myPython.tgz#py279"

然后就需要 driver和executor把python指向上述 python,即py279

关于Driver、Executor指向python

指定Python版本主要有两组参数:小写字母and大写字母;两组参数在使用的时候,根据client模式和cluster模式的不同,会有区别,经过测试,建议使用大写字母

  • 小写字母:兼容性较差
    • spark.pyspark.driver.python
    • spark.pyspark.python
  • 大写字母:兼容性较好
    • spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON
    • spark.yarn.appMasterEnv.PYSPARK_PYTHON

具体测试结果如下
在这里插入图片描述

关于表格中“指本地”、“指集群”、“有无driver路径”的理解,首先简单介绍一下client与cluser模式的区别,这更容易理解。直观的讲:

client模式时,Driver在当前服务器,Executor在集群中,所以Driver的python版本可以指向本地服务器的地址,

而Executor使用的python必须要由上面的参数提交后由YARN发布到各个Executor所在的节点。

cluster模式时,Driver和Executor都在集群中,所以Driver的python也要由YARN通过刚刚的路径提供。

因此,

测试1:client,小写, 有driver路径, 【成功】
$SPARK_HOME/bin/sbmit client \ 其他参数
--archives "hdfs://aaa:port/home/xxx/yy/myPython.tgz#py279" \
--conf "spark.pyspark.driver.python=客户端本地路径如/home/localPython/bin/python" \
--conf "spark.pyspark.python=必须是 ./py279/bin/python" \
本地python路径比如Hello.py
测试2:client, 小写,无driver路径, 【失败 】
$SPARK_HOME/bin/sbmit client \ 其他参数
--archives "hdfs://aaa:port/home/xxx/yy/myPython.tgz#py279" \
--conf "spark.pyspark.python=必须是 ./py279/bin/python" \ # driver的路径已经删了
本地python路径比如Hello.py
测试3:cluster, 小写,指本地,有driver路径, 【失败 】
$SPARK_HOME/bin/sbmit cluster \ 其他参数
--archives "hdfs://aaa:port/home/xxx/yy/myPython.tgz#py279" \
--conf "spark.pyspark.driver.python=客户端本地路径如/home/localPython/bin/python" \
--conf "spark.pyspark.python=必须是 ./py279/bin/python" \
本地python路径比如Hello.py
测试4:cluster, 小写,指集群,有driver路径, 【成功 】
$SPARK_HOME/bin/sbmit cluster \ 其他参数
--archives "hdfs://aaa:port/home/xxx/yy/myPython.tgz#py279" \
--conf "spark.pyspark.driver.python=./py279/bin/python"\ #driver指向了与executor相同python
--conf "spark.pyspark.python=必须是 ./py279/bin/python" \
本地python路径比如Hello.py

大写字母的 spark.yarn.appMasterEnv.PYSPARK_PYTHON同理,

所以,测试之后,最简单的方案就是文章开头的方案。

如果参数使用不合理,或者打包的python包有问题(比如anaconda的),会报错误如下:

Caused by: java.io.IOException: Cannot run program "/xxxx/xxx/py279/myPy279/bin/python": error=13, Permission deniedLast 4096 bytes of stderr :
eason: User class threw exception: java.io.IOException: Cannot run program "/xxxx/xxx/py279/myPy279/bin/python": error=13, Permission deniedException in thread "main" java.io.IOException: Cannot run program "/xxxx/xxx/py279/myPy279/bin/python": error=2, No such file or directory

不是找不到python路径就是权限不够

相关文章:

Spark On YARN时指定Python版本

坑很多&#xff0c;直接上兼容性最佳的命令&#xff0c;将python包上传到hdfs或者file:/home/xx/(此处无多余的/) # client 模式 $SPARK_HOME/spark-submit \ --master yarn \ --deploy-mode client \ --num-executors 2 \ --conf "spark.yarn.dist.archives<Python包…...

[数据库]库的增删改查

●&#x1f9d1;个人主页:你帅你先说. ●&#x1f4c3;欢迎点赞&#x1f44d;关注&#x1f4a1;收藏&#x1f496; ●&#x1f4d6;既选择了远方&#xff0c;便只顾风雨兼程。 ●&#x1f91f;欢迎大家有问题随时私信我&#xff01; ●&#x1f9d0;版权&#xff1a;本文由[你帅…...

Wine零知识学习1 —— 介绍

一、什么是Wine Wine是“Wine Is Not an Emulator” 的首字母缩写&#xff0c;是一个能够在多种POSIX-compliant操作系统&#xff08;诸如Linux、macOS及BSD等&#xff09;上运行 Windows 应用的兼容层。Wine不像虚拟机或者模拟器那样模仿内部的Windows逻辑&#xff0c;而是將…...

设计模式--建造者模式 builder

设计模式--建造者模式 builder&#xff09;建造者模式简介建造者模式--小例子&#xff08;电脑购买&#xff09;1.产品类2.抽象构建者3.实体构建类4.指导者类5.客户端测试类小结建造者模式简介 建造者模式有四个角色,概念划分如下&#xff1a; Product &#xff1a; 产品类&a…...

终于周末啦,继续来总结一下Python的一些知识点啦

目录 Python概念梳理 常见概念梳理 Python经典判断题 判断题 选择题 Python概念梳理 常见概念梳理 Python中&#xff0c;不仅仅变量的值是可以变化的&#xff0c;类型也是可以随时变化的 1、Python的变量必须初始化否则提示 is not defined 2、if、while中定义的变量在…...

CUDA By Example(八)——流

文章目录页锁定主机内存可分页内存函数页锁定内存函数CUDA流使用单个CUDA流使用多个CUDA流GPU的工作调度机制高效地使用多个CUDA流遇到的问题(未解决)页锁定主机内存 在之前的各个示例中&#xff0c;都是通过 cudaMalloc() 在GPU上分配内存&#xff0c;以及通过标准的C库函数 …...

02- pandas 数据库 (数据库)

pandas 数据库重点: pandas 的主要数据结构: Series (一维数据)与 DataFrame (二维数据)。 pd.DataFrame(data np.random.randint(0,151,size (5,3)), # 生成pandas数据 index [Danial,Brandon,softpo,Ella,Cindy], # 行索引 …...

less常用语法总结

CSS预处理器 CSS 预处理器是什么?一般来说,它们基于 CSS 扩展了一套属于自己的 DSL,来解决我们书写 CSS 时难以解决的问题: 语法不够强大,比如无法嵌套书写导致模块化开发中需要书写很多重复的选择器;没有变量和合理的样式复用机制,使得逻辑上相关的属性值必须以字面量…...

DHCP Relay中继实验

DHCP Relay实验拓扑图设备配置结果验证拓扑图 要求PC1按照地址池自动分配&#xff0c;而PC要求分配固定的地址&#xff0c;网段信息已经在图中进行标明。 设备配置 AR1&#xff1a; AR1作为DHCP Server基本配置跟DHCP Server没区别&#xff0c;不过要加一条静态路由&#xff…...

“1+1>2”!《我要投资》与天际汽车再度“双向奔赴”!

文|螳螂观察 作者| 图霖 胡海泉老师重磅回归、创始人现场真情告白……新一季的《我要投资》&#xff0c;不仅维持了往季在专业度上的高水准&#xff0c;也贡献了不少高话题度的“出圈”时刻。 在竞争激烈的的综艺节目竞技场&#xff0c;能举办数季的节目&#xff0c;往往都是…...

【分享】订阅金蝶KIS集简云连接器同步OA付款审批数据至金蝶KIS

方案简介 集简云基于钉钉连接平台完成与钉钉的深度融合&#xff0c;实现钉钉OA审批与数百款办公应用软件&#xff08;如金蝶KIS、用友等&#xff09;的数据互通&#xff0c;让钉钉的OA审批流程与企业内部应用软件的采购、付款、报销、收款、人事管理、售后工单、立项申请等环节…...

dubbo服务消费

dubbo在服务消费时调用的方法栈比较深&#xff0c;所以得一边看一边记&#xff0c;还是比较费力的。在dubbo服务发现中&#xff0c;我们看到通过ReferenceConfig#get()返回的是要调用接口的代理对象&#xff0c;因此通过接口的代理对象调用方法时是调用InvocationHandler(Invok…...

Python调用API接口,实现人脸识别

人生苦短&#xff0c;我用Python 在开始之前&#xff0c;先问问大家&#xff1a; 什么是百度Aip模块&#xff1f; 百度AI平台提供了很多的API接口供开发者快速的调用运用在项目中 本文写的是使用百度AI的**在线接口SDK模块&#xff08;baidu-aip&#xff09;**进行实现人脸识…...

2月10日刷题总结

编辑距离题目描述设 AA 和 BB 是两个字符串。我们要用最少的字符操作次数&#xff0c;将字符串 AA 转换为字符串 BB。这里所说的字符操作共有三种&#xff1a;删除一个字符&#xff1b;插入一个字符&#xff1b;将一个字符改为另一个字符。A, BA,B 均只包含小写字母。输入格式第…...

C++学习/温习:新型源码学编程(三)

写在前面(祝各位新春大吉&#xff01;兔年如意&#xff01;) 【本文持续更新中】面向初学者撰写专栏&#xff0c;个人原创的学习C/C笔记&#xff08;干货&#xff09;所作源代码输出内容为中文&#xff0c;便于理解如有错误之处请各位读者指正请读者评论回复、参与投票&#xf…...

阿里云ecs服务器搭建CTFd(ubuntu20)

1.更新apt包索引 sudo apt-get update更新源 1、使用快捷键【ctrlaltt】打开终端。 2、输入以下命令备份原有软件源文件。 cp /etc/apt/sources.list /etc/apt/sources.list.bak_yyyymmdd 3、再输入以下命令打开sources.list文件并添加新的软件源地址。 vim /etc/apt/sources.…...

视频号小店新订单如何实时同步企业微信

随着直播带货的火热&#xff0c;视频号小店也为商家提供商品信息服务、商品交易&#xff0c;支持商家在视频号运营电商&#xff0c;许多企业也将产品的零售路径渗透至视频号小店中了。如果我们希望在视频号小店接收到订单后&#xff0c;能尽快及时发货&#xff0c;给用户较好的…...

ag-Grid Enterprise

ag-Grid Enterprise Ag-Grid被描述为一种商业产品&#xff0c;已在EULA下分发&#xff0c;它非常先进&#xff0c;性能就像Row分组一样&#xff0c;还有范围选择、master和case、行的服务器端模型等等。 ag Grid Enterprise的巨大特点&#xff1a; 它具有以下功能和属性&#x…...

扫雷——C语言【详解+全部码源】

前言&#xff1a;今天我们学习的是C语言中另一个比较熟知的小游戏——扫雷 下面开始我们的学习吧&#xff01; 文章目录游戏整体思路游戏流程游戏菜单的打印创建数组并初始化布置雷排查雷完整代码game.hgame.ctest.c游戏整体思路 我们先来看一下网上的扫雷游戏怎么玩 需要打印…...

【C++】类和对象(下)

文章目录1. 再谈构造函数1.1 初始化列表1.2 explicit关键字2. static成员2.1 概念2.2 特性3. 友元3.1 友元函数3.1 友元类4. 内部类5. 匿名对象6. 拷贝对象时的一些编译器优化7. 再次理解类和对象1. 再谈构造函数 1.1 初始化列表 在创建对象时&#xff0c;编译器通过调用构造…...

CnDataSeed发布:中国科研工作者跳槽研究数据库(CAMRD)

一、数据简介 追踪学术流动&#xff0c;解析科研人才动力机制&#xff01; 在中国科研生态快速演化的背景下&#xff0c;科研人才流动是科研创新与学术产出的关键驱动力。但跳槽相关研究在高教研究中一直较为稀缺&#xff0c;系统化、可量化的科研工作者跳槽数据长期缺失&…...

MATLAB中扩展卡尔曼滤波与无迹卡尔曼滤波源代码:一键运行,误差对比及显示最大误差数字图像程...

MATLAB编写的EKF和UKF滤波程序源代码 扩展卡尔曼滤波、无迹卡尔曼滤波的MATLAB程序&#xff0c;有误差对比图像和最大误差数字的显示。 只有一个m文件&#xff0c;打开就能运行。 带中文注释。直接双击EKFUKFComparison.m就能看到两个滤波器在非线性系统里的较量。这个文件里塞…...

3.23-3.25笔记

这期实现温湿度采集、光照强度监测、智能设备控制&#xff08;加湿器、PWM 调光 LED、PWM 调速风扇&#xff09;确定引脚&#xff0c;根据原理图找出可以使用的引脚开关。根据手册信息PWM口GPIO0_D0和GPIO0_C6&#xff0c;把设备树GPIO0_D0做5G的复位disable&#xff0c;再加入…...

2026年主流接口测试平台慢因分析与选型参考

2026年主流接口测试平台慢因分析与选型参考 核心观点摘要 2026年接口测试响应慢核心诱因可归为三类&#xff1a;工具本身并发调度能力不足、协议适配不全导致额外转码开销、缺少AI智能链路优化能力&#xff0c;多数企业接口测试效率低与工具选型不当直接相关。本次盘点覆盖当前…...

Spigot服务器搭建后,别忘了做这5件事:优化、备份、插件与安全基础设置

Spigot服务器搭建后必做的5项关键优化与安全设置 当你第一次看到Spigot服务器成功启动时&#xff0c;那种成就感确实令人兴奋。但很快你会发现&#xff0c;一个能运行的基础服务器和真正稳定、高效、安全的游戏环境之间&#xff0c;还有不小的距离。很多新手服主在这个阶段容易…...

Python串口助手开发避坑实录:新手用tkinter+pyserial常遇到的5个典型问题及解决

Python串口助手开发避坑指南&#xff1a;5个典型问题与实战解决方案 第一次用Python开发串口调试工具时&#xff0c;那种既兴奋又忐忑的心情我至今记得。看着自己写的界面能收发数据&#xff0c;成就感爆棚&#xff1b;但随之而来的各种奇怪问题&#xff0c;又让人抓狂。本文将…...

如何让Windows任务栏焕然一新?TranslucentTB给你答案

如何让Windows任务栏焕然一新&#xff1f;TranslucentTB给你答案 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 您是否曾对Windows系统一…...

探索Comsol在光子晶体光纤SPR - PCF传感器及光学仿真中的奇妙世界

Comsol光子晶体光纤spr pcf传感器comsol光 Comsol光子晶体光纤spr pcf传感器 comsol光学仿真spr。 利用几何相位缺陷态光子晶体实现谷自旋分离在光学领域&#xff0c;光子晶体光纤&#xff08;PCF&#xff09;以及表面等离子体共振&#xff08;SPR&#xff09;相关的研究一直热…...

高效转换CSDN博客为Markdown:自动化工具与批量处理技巧

1. 为什么需要将CSDN博客转为Markdown格式 作为一个写了多年技术博客的老鸟&#xff0c;我深刻理解Markdown格式对技术写作的重要性。CSDN的富文本编辑器虽然方便&#xff0c;但存在几个致命问题&#xff1a;格式锁定在平台内、排版灵活性差、迁移成本高。而Markdown作为轻量级…...

2026年AI大爆发:DeepSeek、Claude、Gemini三强鼎立,智能体应用成为新战场

进入2026年&#xff0c;AI领域迎来前所未有的激烈竞争格局。DeepSeek凭借极低的训练成本和开源策略强势出圈&#xff0c;R1模型在推理能力上直追GPT-o1&#xff0c;引发全球AI圈震动&#xff1b;Anthropic的Claude 3.7 Sonnet推出了扩展思考模式&#xff0c;在代码和复杂推理任…...