2016-12-22 3 views
1

J'essaye d'exécuter un script python en utilisant un python personnalisé et de déployer --deploy-mode cluster sur un cluster Enterprise 4.2.PYSPARK_PYTHON fonctionne avec le client --deploy-mode mais pas le cluster --deploy-mode

[[email protected] ~]$ 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> 

Puis-je créer un simple script pyspark:

[[email protected] ~]$ 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()) 

Je puis essayez d'exécuter le script comme ceci:

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 

Cela fonctionne sur le fil cluster mais n'utilise PAS le PYSPARK_PYTHON variable

Cependant, si j'utilise --deploy-mode client, PYSPARK_PYTHON est utilisé ok.


Mise à jour

J'ai essayé d'ajouter ceci avant le SparkContext est initialisés:

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

aussi, tenté de mettre --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 

Cependant,

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

Répondre

1

Vous avez raison, le PYSPARK_PYTHON ne fonctionnera pas de cette façon.

Vous pouvez essayer d'ajouter cette ligne de commande à votre script avant démarrer le contexte Spark:

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

Bien sûr, si le chemin de Anaconda est ce qui précède, sinon vous devez ajouter à vos travailleurs travailler, ou changer le chemin qu'Anaconda est dans chaque travail.

+0

Malheureusement, cela ne l'a pas fait: 'Fichier "/disk4/local/usercache/biadmin/appcache/application_1477084339086_0505/container_e09_1477084339086_0505_02_000002/pyspark.zip/pyspark/worker.py", ligne 64, dans le principal ("% d .% d "% sys.version_info [: 2], version)) Exception: Python dans le worker a une version 2.7 différente de celle du pilote 2.6, PySpark ne peut pas fonctionner avec différentes versions mineures –

+0

Eh bien, mais le' os.environ' travaillé? L'erreur signifie que vous pointez vers une autre version de Python. Vous devez changer le python des travailleurs. –

+0

J'ai ajouté 'print (sys.executable)' après avoir défini os.environ [".."] et malheureusement il montre '/ usr/bin/python' –