zoukankan      html  css  js  c++  java
  • pyspark基于python虚拟环境运行

    1.背景

    目前大数据使用的是Amazon EMR集群,该集群可根据计算需求变化灵活扩展或收缩集群,就会存在一个问题:当spark任务提交之后,EMR集群会根据计算的需求进行扩展,新扩展的机器上python环境各不相同,并且每次扩展的机器ip不相同(不是同一台机器),对某些第三方包,例如:pandas 还会依赖numpy,并且对版本还有一定要求,必须大于15.4;此时python依赖的冲突就会导致spark任务执行失败。

    2.解决方案

    鉴于以上问题,通过搭建独立的Python运行环境可以解决以上问题,同时还可以使得单个项目的运行环境与其他项目互不影响。

    3.搭建方法

    3.1.安装virtualenv

    3.1.1.检查服务器是否安装virtualenv

    virtualenv --version

    3.1.2.没有的话需要安装

    pip install virtualenv

    3.2.创建python虚拟环境

    cd /home/hadoop/code

    mkdir py_spark_env #创建目录py_spark_env

    virtualenv -p /usr/bin/python3.6 pyspark_venv #选择使用python3.6解释器创建虚拟环境目录

    source pyspark_venv/bin/activate #激活虚拟环境变量

    deactivate #退出当前虚拟环境

    删除虚拟环境,只需要删除它的文件夹:rm -rf pyspark_venv

    3.3.安装python依赖

    3.3.1安装python依赖库

    安装之前需要选择虚拟环境,否则就会安装在系统的环境下

    source pyspark_venv/bin/activate   #选择虚拟环境

    pip install pandas   #安装pandas
    pip install pyspark #安装pyspark
    以上的依赖库会安装在:
    /home/hadoop/code/py_spark_env/pyspark_venv/lib64/python3.6/dist-packages下
    需要将其拷贝至
    /home/hadoop/code/py_spark_env/pyspark_venv/lib64/python3.6/site-packages下

    3.3.2.验证python虚拟环境

    选择虚拟环境:source pyspark_venv/bin/activate   

    在服务器终端执行python: python #可以看到当前的python环境是3.6.8
    以下截图是在本地测试pandas和numpy依赖可用性:

    3.4.spark基于python虚拟环境提交任务

    3.4.1.打包python虚拟环境

    cd /home/hadoop/code/py_spark_env

    zip -r py_spark_venv.zip py_spark_venv

    3.4.2.上传至s3或者hdfs

    hadoop fs -put py_spark_venv.zip s3://tmp/bigdata/config

    hadoop fs -put py_spark_venv.zip /tmp/pyspark

    如果还需要增加其它第三方依赖,则需要通过执行步骤3.3安装依赖,再打包成zip,上传至s3或者hdfs上。

    3.4.3.spark依赖虚拟环境

    请参考以下示例:

    spark-submit 
    --deploy-mode cluster
    --master yarn
    --driver-memory 2g
    --num-executors 6
    --executor-memory 4g
    --executor-cores 2
    --queue default
    --name test
    --archives s3://tmp/bigdata/config/pyspark_venv.zip#pyspark_venv
    --conf spark.pyspark.driver.python=./pyspark_venv/pyspark_venv/bin/python3
    --conf spark.pyspark.python=./pyspark_venv/pyspark_venv/bin/python3
    /home/hadoop/tmp/nibo/test.py

     

    注:
    --archives s3://tmp/bigdata/config/pyspark_venv.zip#pyspark_venv ----会将pyspark_venv.zip解压,解压的目录是"pyspark_venv", #后面的pyspark_venv不能省略,会被解压到每个Executor的工作目录中,仅限于Spark on Yarn模式
    --conf spark.pyspark.driver.python=./pyspark_venv/pyspark_venv/bin/python3 ----指定python执行器
    --conf spark.pyspark.python=./pyspark_venv/pyspark_venv/bin/python3 ----指定python执行器

     

     

     

     

  • 相关阅读:
    解决electron-vue中无法使用Element的Tooltip组件
    解决Electron安装包下载慢的问题
    虚拟机VirtualBox 共享挂载问题:mount: /mnt/xxx: wrong fs type, bad option, bad superblock on xxx
    git 设置和取消代理
    (转载)数据库连接池到底应该设多大?这篇文章可能会颠覆你的认知
    MySQL主主复制+MMM实现高可用
    Mysql5.6主从热备配置
    java 启动 shell脚本
    redis批量删除key
    spring mvc异常统一处理(ControllerAdvice注解)
  • 原文地址:https://www.cnblogs.com/jsjnb/p/13572537.html
Copyright © 2011-2022 走看看