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、以上幾個步驟下來,應該能解決大部分因無法控制環境引起的各種問題,以上

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章