热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

spark的python环境及Nomodule问题(超详细)

Spark集群与python的结合从上一篇文章我们知道,spark有几种资源管理方式,具体可参考:spark几种集群管理器总结如果Sp
Spark集群与python的结合

从上一篇文章我们知道,spark有几种资源管理方式,具体可参考:spark几种集群管理器总结

如果Spark Application运行在yarn集群上,在这种运行模式下,资源的管理与协调会统一由yarn处理,而这种模式就能够实现基于yarn集群运算的Application的多样性,可以支持运行MapReduc程序、HBase集群、Storm集群,还可以运行使用Python开发的机器学习应用程序,等等。

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

PySpark是Spark为python提供的api,为使用Python程序编写Spark Application而实现的客户端库,通过PySpark可以编写Spark Application并在Spark集群上运行。Python具有非常丰富的科学计算、机器学习处理库,如numpy、pandas、scipy等等。为了能够充分利用这些高效的Python模块,很多机器学习程序都会使用Python实现,同时也希望能够在Spark集群上运行。
如果python环境不具备的话会报以下类似错误:

ImportError: No module named numpy

要实现Python程序运行在Spark集群之上,总结有有2种情况:

YARN集群配置Python环境

在开始安装YARN及Spark集群的时候,可以将对应Python软件包、依赖模块,在YARN集群中的每个节点上进行安装。这样,YARN集群的每个NodeManager上都具有Python环境,可以编写PySpark Application并在集群上运行。

优点

对于PySpark的使用,如果偏向机器学习,可以考虑在整个集群中都安装好Python环境,并根据不同的需要进行依赖模块的统一管理,能够极大地方便PySpark Application的运行。

缺点

如果后续使用Python编写Spark Application,需要增加新的依赖模块,那么就需要将该模块在YARN集群的每个节点上都进行安装。而且如果环境中有多个Python版本,还需要涉及不同版本Python环境的管理。因为提交PySpark Application运行是由YARN资源管理器决定的,所以必须保证每个NodeManager上都具有Python环境(基础环境+依赖模块)。

YARN集群未配置Python环境

如果已经安装了规模较大的YARN集群,且在开始开始的时候未曾考虑后续会使用基于Python来编写Spark Application,未曾在YARN集群的NodeManager上安装Python基础环境及其依赖模块。现在要想使用Python编写Spark Application。

实现思路如下所示:

  1. 在任意一台机器节点上,安装Anaconda软件
  2. 通过Anaconda创建虚拟Python环境
  3. 在创建好的Python环境中下载安装依赖的Python模块
  4. 将整个Python环境打成zip包
  5. 提交PySpark Application时,并通过–archives选项指定zip包路径

具体操作步骤见作者另一文章:linux下用Anaconda创建python虚拟环境并打包

可以在linux本地解压文件,也可以将压缩包上传至hdfs

hdfs dfs -put ***/***/python37.zip /***/***/***/env

使用spark-submit命令引用


client模式

假设上一步得到python37.zip文件,该文件包含numpy、pandas、scipy这三个依赖包。该zip文件大概有500MB以上。将该zip压缩包拷贝到指定目录中,方便后续提交PySpark Application。

1、在linux本地解压

--conf spark.yarn.dist.archives=/home/hadoop/python37 \
--conf spark.pyspark.driver.python=/home/hadoop/python37/bin/python \
--conf spark.pyspark.python=/home/hadoop/python37/bin/python \

2、将python37.zip文件上传到hdfs

--conf spark.yarn.dist.archives=hdfs://input/test/python37.zip#python37 \
--conf spark.pyspark.driver.python=./python37/bin/python3 \
--conf spark.pyspark.python=./python37/bin/python3 \

注意:archives命令后的#是必须的,它指的是将这个zip包解压到的文件夹。

在提交PySpark Application时会将该环境zip包上传到运行Application的所在的每个节点上,并解压缩后为Python代码提供运行环境。如果不想每次都从客户端将该环境文件上传到集群中运行PySpark Application的节点上,可以采用将zip包上传到HDFS上的方式,并修改–archives参数的值为hdfs://***/***/python37.zip#python37。

另外,如果我们要运行的.py文件中,也依赖一些自己编写的函数,具有多个Python依赖的文件。想要通过上面的方式运行,则必须将这些依赖的Python文件拷贝到我们创建的环境中,对应的目录为python37/lib/python3.7/site-packages/

cluster模式

cluster模式下,driver端可以略去。

--conf spark.yarn.dist.archives=hdfs://input/test/python37.zip#python37 \
--conf spark.pyspark.python=./python37/bin/python3 \

举例:

## yarn client hdfs文件
spark-submit \
--master yarn \
--deploy-mode cluster \
--driver-memory 4g \
--executor-memory 2g \
--executor-cores 3 \
--queue prod \
--conf spark.yarn.dist.archives=hdfs://input/test/python37.zip#python37 \
--conf spark.pyspark.driver.python=./python37/bin/python3 \
--conf spark.pyspark.python=./python37/bin/python3 \
--jars /home/hadoop/mysql-connector-java-8.0.21.jar,/home/hadoop/elasticsearch-spark-20_2.11-7.9.2.jar,/home/hadoop/ojdbc6.jar \
/home/hadoop/test.py

优点

不需要考虑YARN集群每个节点上是否都具有Python环境,任何版本Python编写的PySpark Application都可以使用集群资源运行。

缺点


  1. 不在YARN集群上安装Python环境的方案,会使提交的Python环境zip包在YARN集群中传输带来一定开销,而且每次提交一个PySpark Application都需要打包一个环境zip文件,如果有大量的Python实现的PySpark Application需要在Spark集群上运行,开销会越来越大。
  2. 如果PySpark应用程序修改,可能需要重新打包环境。增加额外的工作。

参考:
pyspark提交代码到yarn模式,报错ImportError: No module
PySpark任务在YARN集群上运行 关联python包numpy pandas scipy 等


推荐阅读
  • hadoop完全分布式搭建
    原文链接:hadoop完全分布式搭建主机分配以及地址要求:角色主机名IP地址Namenodemaster192.168.222.201Datanodeslave ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
  • Hadoop2.6.0 + 云centos +伪分布式只谈部署
    3.0.3玩不好,现将2.6.0tar.gz上传到usr,chmod-Rhadoop:hadophadoop-2.6.0,rm掉3.0.32.在etcp ... [详细]
  • mapreduce源码分析总结
    这篇文章总结的非常到位,故而转之一MapReduce概述MapReduce是一个用于大规模数据处理的分布式计算模型,它最初是由Google工程师设计并实现的ÿ ... [详细]
  • Hadoop 源码学习笔记(4)Hdfs 数据读写流程分析
    Hdfs的数据模型在对读写流程进行分析之前,我们需要先对Hdfs的数据模型有一个简单的认知。数据模型如上图所示,在NameNode中有一个唯一的FSDirectory类负责维护文件 ... [详细]
  •        在搭建Hadoop环境之前,请先阅读如下博文,把搭建Hadoop环境之前的准备工作做好,博文如下:       1、CentOS6.7下安装JDK,地址:http:b ... [详细]
  • MapReduce工作流程最详细解释
    MapReduce是我们再进行离线大数据处理的时候经常要使用的计算模型,MapReduce的计算过程被封装的很好,我们只用使用Map和Reduce函数,所以对其整体的计算过程不是太 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 突破MIUI14限制,自定义胶囊图标、大图标样式,支持任意APP
    本文介绍了如何突破MIUI14的限制,实现自定义胶囊图标和大图标样式,并支持任意APP。需要一定的动手能力和主题设计师账号权限或者会主题pojie。详细步骤包括应用包名获取、素材制作和封包获取等。 ... [详细]
  • MR程序的几种提交运行模式本地模型运行1在windows的eclipse里面直接运行main方法,就会将job提交给本地执行器localjobrunner执行-- ... [详细]
author-avatar
晴felleman_110
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有