2016-12-22 3 views
1

Ich versuche, einen Python-Skript mit einem benutzerdefinierten Python ausführen und bereitstellen --deploy-mode cluster auf einem Enterprise 4.2-Cluster.PYSPARK_PYTHON arbeitet mit --deploy-Modus-Client aber nicht --deploy-Modus Cluster

[[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> 

Dann erstelle ich eine einfache pyspark Skript:

[[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()) 

ich dann versuchen, das Skript wie folgt auszuführen:

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 

Dies läuft auf dem Garn Cluster aber verwendet nicht die PYSPARK_PYTHON variabel.

Wenn ich jedoch --deploy-mode client verwenden, wird PYSPARK_PYTHON ok verwendet.


aktualisieren

Ich habe dies vor dem SparkContext versucht Zugabe initialisiert:

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

auch versucht Einstellung --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 

, jedoch

[[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 

Antwort

1

Sie haben Recht, das PYSPARK_PYTHON wird nicht so funktionieren.

Sie können versuchen, diese Befehlszeile in Ihrem Skript hinzufügen, bevor die Spark-Context starten:

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

Natürlich, wenn Ihr anaconda Weg dies oben ist, wenn nicht Sie dies auf Ihre Mitarbeiter müssen hinzufügen arbeiten oder ändern Sie den Pfad, den Anaconda in jeder Arbeit ist.

+0

Leider, dass es nicht getan hat: 'File "/disk4/local/usercache/biadmin/appcache/application_1477084339086_0505/container_e09_1477084339086_0505_02_000002/pyspark.zip/pyspark/worker.py", Zeile 64, in dem Haupt ("% d .% d“% sys.version_info [2], Version)) Ausnahme: Python in Arbeitern als in Treiber 2.7 andere Version hat 2,6, PySpark kann nicht mit verschiedenen kleineren versions' –

+0

Nun, aber das' os.environ' läuft hat funktioniert? Der Fehler bedeutet, dass Sie auf eine andere Version von Python zeigen. Sie müssen den Python der Arbeiter ändern. –

+0

Ich habe 'print (sys.excutable) 'nach der Einstellung von os.environ [" .. "] hinzugefügt und leider zeigt es'/usr/bin/python' –

Verwandte Themen