PySpark使用小结(三)

在集群上提交pyspark脚本,如果是多个py脚本之间有相互依赖关系,需要将所有脚本打包为.egg文件,然后用一个.py主脚本来调用这些文件。提交的时候同时提交.egg文件和.py文件。

将多个文件.py文件打包为一个.egg文件的代码如下,需要注意:

  1. 在文件夹下面必须有一个__init__.py文件,文件内部不需要有任何内容
  2. py文件引用的时候要使用相对路径,避免更换了包的路径后导致程序出错。./代表当前路径,../代表上一层目录
  3. 只有指定目录中的.py文件会被打包为.egg文件,其余格式的文件不会被处理
  4. .比如将haha文件夹打包进hehe.egg里再放入my_path路径下,直接设定mypath为当前工作路径,import haha即可,不需要写成from hehe import haha
import os
os.chdir('my_path')

from setuptools import setup, find_packages  
  
setup(  
    name = "xxx",  
    version = "0.1",  
    packages = find_packages(),  

    description = "xxx",  
    long_description = "xxx",  
    author = "liuzimu",  
    author_email = "xxx",  
  
    license = "xxx",  
    keywords = ("xx", "xxx"),  
    platforms = "xxx",  
    url = "xxx",   
      
)  

在spark集群上提交.egg和.py文件的脚本如下,因为要使用hive,所以要加上“files ${SPARK_HOME}/conf/hive-site.xml”

因为不想永久地改变系统环境变量,所以要用到export语句临时更改系统环境变量。

export SPARK_MAJOR_VERSION=2
export PYSPARK_DRIVER_PYTHON=ipython
export PYSPARK_PYTHON=ipython
export PYSPARK_DRIVER_PYTHON_OPTS
SPARK_HOME=/usr/hdp/current/spark2-client

${SPARK_HOME}/bin/spark-submit \
--master yarn \
--deploy-mode cluster \
--driver-memory 8g \
--num-executors 4 \
--executor-memory 8g \
--executor-cores 4 \
--files ${SPARK_HOME}/conf/hive-site.xml \
--py-files /path/file.egg /path/file.py

    原文作者:刘子慕
    原文地址: https://zhuanlan.zhihu.com/p/31209895
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞