PYSPARK_PYTHON可与--deploy-mode客户端配合使用,但不能与--deploy-mode集群配合使用

时间:2016-12-22 16:48:46

标签: apache-spark pyspark ibm-cloud yarn biginsights

我正在尝试使用自定义python运行python脚本,并在Enterprise 4.2群集上部署--deploy-mode cluster

[biadmin@bi4c-xxxxx-mastermanager ~]$ hive
hive> CREATE TABLE pokes (foo INT, bar STRING);
OK
Time taken: 2.147 seconds
hive> LOAD DATA LOCAL INPATH '/usr/iop/4.2.0.0/hive/doc/examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;
Loading data to table default.pokes
Table default.pokes stats: [numFiles=1, numRows=0, totalSize=5812, rawDataSize=0]
OK
Time taken: 0.49 seconds
hive> 

然后我创建一个简单的pyspark脚本:

[biadmin@bi4c-xxxxxx-mastermanager ~]$ cat test_pokes.py
from pyspark import SparkContext
from pyspark.sql import HiveContext

sc = SparkContext()
hc = HiveContext(sc)

pokesRdd = hc.sql('select * from pokes')
print( pokesRdd.collect() )
然后我尝试像这样运行脚本:

export PYSPARK_PYTHON=/home/biadmin/anaconda2/bin/python2.7 
export PYSPARK_DRIVER_PYTHON=/home/biadmin/anaconda2/bin/python2.7
spark-submit --master yarn \
             --deploy-mode cluster \
             --jars /usr/iop/4.2.0.0/hive/lib/datanucleus-api-jdo-3.2.6.jar,/usr/iop/4.2.0.0/hive/lib/datanucleus-core-3.2.10.jar,/usr/iop/4.2.0.0/hive/lib/datanucleus-rdbms-3.2.9.jar \
             --files /usr/iop/current/spark-client/conf/hive-site.xml \ 
             test_pokes.py

这在纱线群集上运行,但不使用PYSPARK_PYTHON变量。

但是,如果我使用--deploy-mode client,则使用PYSPARK_PYTHON确定。

更新

我在初始化SparkContext之前尝试添加它:

os.environ["PYSPARK_PYTHON"] = '/home/biadmin/anaconda2/bin/python2.7'
os.environ["PYSPARK_DRIVER_PYTHON"] = '/home/biadmin/anaconda2/bin/python2.7'

另外,尝试设置--conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=/home/biadmin/anacond‌​a2/bin/python2.7

Container: container_e09_1477084339086_0508_02_000001 on bi4c-xxxxxx-data-1.bi.services.bluemix.net_45454
==========================================================================================================
LogType:stderr
...
java.io.IOException: Cannot run program "/home/biadmin/anaconda2/bin/python2.7": error=2, No such file or directory

然而,

[biadmin@bi4c-xxxxxx-mastermanager ~]$ ssh bi4c-xxxxxx-data-1.bi.services.bluemix.net
[biadmin@bi4c-xxxxxx-data-2 ~]$ ls /home/biadmin/anaconda2/bin/python2.7
/home/biadmin/anaconda2/bin/python2.7

2 个答案:

答案 0 :(得分:1)

你是对的,PYSPARK_PYTHON不会这样。

您可以尝试在启动Spark上下文之前在脚本中添加此命令行:

os.environ["PYSPARK_PYTHON"] = '/home/biadmin/anaconda2/bin/python2.7'
os.environ["PYSPARK_DRIVER_PYTHON"] = '/home/biadmin/anaconda2/bin/python2.7'

当然,如果您的anaconda路径如上所述,如果不是,您需要将此添加到您的工作人员工作,或更改anaconda在每项工作中的路径。

答案 1 :(得分:0)

对我有用的是使用 conda pack 打包 python 环境,如下所述: http://spark.apache.org/docs/latest/api/python/user_guide/python_packaging.html

然后通过----archives 部署它。 请注意,确实使用 export 设置 PYSPARK_PYTHON 不起作用,您需要使用 --conf 设置它

这对我有用:

conda create -y -n pyspark_conda_env
conda activate pyspark_conda_env
conda pack -f -o pyspark_conda_env.tar.gz
spark-submit --master yarn \
       --archives pyspark_conda_env.tar.gz#environment \
       --deploy-mode cluster \
       --conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=./environment/bin/python \
       --conf spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON=./environment/bin/python \
       main.py