背景:
pyspark 运行时需要很多额外数据科学包,比如pandas,numpy, pyspark 等等 。如果不使用virtualenv 独立打包,你需要在每个nodemanager 节点上的python都要安装这些包,而且还设计各种版本问题。
如果使用virtualenv独立打包,每个用户都将有一个独立的python环境包,每个用户可以根据自己的需求安装自己的版本。
而且不需要在nodemanager 每个节点上安装,也不影响系统的python环境。
1、找一个机器pip install virtualenv
2、创建一个虚拟环境virtualenv -p /usr/bin/python3.6 pyspark_env
-p 指定python版本,如果想用python2.7 就指定/usr/bin/python2.7
3、source pyspark_env/bin/activate 进入创建的python虚拟环境
4、pyspark_env/bin/pip install pandas pyspark numpy
5、deactivate 推出虚拟环境
6、zip -r pyspark_env.zip pyspark_env 打包成一个zip
7、hadoop fs -put pyspark_env.zip /tmp/pyspark_env.zip 把pyspark_env.zip 上传到hdfs
8、提交任务 加上--archives 以及指定spark driver python路径
spark-submit \
--deploy-mode cluster \
--master yarn \
--driver-memory 2g \
--num-executors 6 \
--executor-memory 4g \
--executor-cores 2 \
--queue default \
--name test \
--archives hdfs:///tmp/pyspark_env.zip#pyspark_env \
--conf spark.pyspark.driver.python=./pyspark_env/pyspark_env/bin/python3 \
--conf spark.pyspark.python=./pyspark_env/pyspark_env/bin/python3 \
/home/hadoop/tmp/nibo/test.py
--archives hdfs:///tmp/pyspark_env.zip#pyspark_env
#号后面的pyspark_env 意思是解压zip的目录名字,如果不加#pyspark_env 解压的目录名就会变成pyspark_env.zip。
这样提交pyspark任务,nodemanager就会到hdfs 先把python环境包下载下来,然后解压。执行任务 。
网友评论