pyspark集群环境中jdk版本不兼容,python无相应模块的包的解决办法

问题:在某些情况下,我们会用到其他厂商的大数据平台,而我们是没有相关管理权限的,但是集群和我们已有的代码所需要的环境存在差异,所以我们要向集群设置我们自己的运行环境的参数等,主要解决方案如下

 

1、对于pyspark,首先我们需要一个我们的相关的所有包的python虚拟环境,这里推荐anaconda的虚拟环境,里面包含很多科学计算的模块便于数据分析使用,在任意一台能联网的机器上创建一个conda的虚拟环境比如mini_environment,提前下载好你所需要的模块,这个步骤网上教程都有,但是尽可能的减少这个环境的大小,只包括基础库和你需要的就行

2、到你的anaconda虚拟环境 envs目录下,对你的虚拟环境进行打成一个zip包,这里要注意打包的时候,要把这个文件夹打成根目录,防止后面出问题,比如我的就在该目录下进行打包 zip -r mini.zip ./mini_environment,然后将这个包上传的集群目录下

3、jdk版本不一致,有些集群还是用的jdk1.7的环境,但是我们需要jdk1.8,这里就下载对应的jdk的包 比如dk-8u172-linux-x64.tar.gz,上传至集群目录

4、在提交任务的时候指定我们的运行环境如下,已如下命令提交代码,集群会分发我们上传的环境的相关包,到所有机器上,所以这个环境的包要尽可能的小,

spark-submit --master yarn-cluster \
	--archives hdfs://xx/tmp/mini.zip#mini,hdfs://xx/tmp/jdk-8u172-linux-x64.tar.gz#jdk \
	--conf "spark.executorEnv.JAVA_HOME=jdk/jdk1.8.0_172" \
	--conf "spark.yarn.appMasterEnv.JAVA_HOME=jdk/jdk1.8.0_172" \
	--conf "spark.executorEnv.PYSPARK_PYTHON=mini/mini_environment/bin/python" \
	--conf "spark.yarn.appMasterEnv.PYSPARK_PYTHON=mini/mini_environment/bin/python" \
	--conf "spark.executorEnv.PYSPARK_DRIVER=mini/mini_environment/bin/python" \
	--conf "spark.yarn.appMasterEnv.PYSPARK_DRIVER=mini/mini_environment/bin/python" \
	--queue root.xxx \
	--py-files common.py,parseUtil.py,person_schema_info.py \
	--files table_schema_indices.csv \
	test.py
	

5、对于在项目研发过程中,如果又需要用到其他的模块,不需要在重新打包了,只需要把我们需要的包打成zip,同样上传到集群目录下,在代码中用addPyFile进行添加,以pyspark中的graphFarmes为例,我们在官网官网下载地址进行下载,其他的也可以在离线仓库python离线仓库下载在进行打包,只要没有很多的其他依赖,都可以这样,如果有相关依赖,可能就要重新整个环境,代码如下,一般这种情况下也要下载其对应的jar包,然后在提交任务的时候用 --jars xxx.jar进行引入,不然在运行时会有classNotFound的异常

spark.sparkContext.addPyFile(hdfs://xx/tmp/graphframes.zip)
# 引入zip文件后在进行导入,不然会提示找不到该模块
from graphframes import *

6、以上几个步骤下来,应该能解决大部分因无法控制环境引起的各种问题,以上

你可能感兴趣的:(python,spark)