热门标签 | 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 等


推荐阅读
  • 技术日志:深入探讨Spark Streaming与Spark SQL的融合应用
    技术日志:深入探讨Spark Streaming与Spark SQL的融合应用 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • Spark与HBase结合处理大规模流量数据结构设计
    本文将详细介绍如何利用Spark和HBase进行大规模流量数据的分析与处理,包括数据结构的设计和优化方法。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 字节流(InputStream和OutputStream),字节流读写文件,字节流的缓冲区,字节缓冲流
    字节流抽象类InputStream和OutputStream是字节流的顶级父类所有的字节输入流都继承自InputStream,所有的输出流都继承子OutputStreamInput ... [详细]
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • 属性类 `Properties` 是 `Hashtable` 类的子类,用于存储键值对形式的数据。该类在 Java 中广泛应用于配置文件的读取与写入,支持字符串类型的键和值。通过 `Properties` 类,开发者可以方便地进行配置信息的管理,确保应用程序的灵活性和可维护性。此外,`Properties` 类还提供了加载和保存属性文件的方法,使其在实际开发中具有较高的实用价值。 ... [详细]
  • Android中将独立SO库封装进JAR包并实现SO库的加载与调用
    在Android开发中,将独立的SO库封装进JAR包并实现其加载与调用是一个常见的需求。本文详细介绍了如何将SO库嵌入到JAR包中,并确保在外部应用调用该JAR包时能够正确加载和使用这些SO库。通过这种方式,开发者可以更方便地管理和分发包含原生代码的库文件,提高开发效率和代码复用性。文章还探讨了常见的问题及其解决方案,帮助开发者避免在实际应用中遇到的坑。 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • HBase Java API 进阶:过滤器详解与应用实例
    本文详细探讨了HBase 1.2.6版本中Java API的高级应用,重点介绍了过滤器的使用方法和实际案例。首先,文章对几种常见的HBase过滤器进行了概述,包括列前缀过滤器(ColumnPrefixFilter)和时间戳过滤器(TimestampsFilter)。此外,还详细讲解了分页过滤器(PageFilter)的实现原理及其在大数据查询中的应用场景。通过具体的代码示例,读者可以更好地理解和掌握这些过滤器的使用技巧,从而提高数据处理的效率和灵活性。 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
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社区 版权所有