spark.executorEnv似乎没有任何效果

时间:2016-03-17 08:14:31

标签: apache-spark environment-variables pyspark

根据Spark docs,有一种方法可以将环境变量传递给生成的执行程序:

  

spark.executorEnv。[EnvironmentVariableName]将EnvironmentVariableName指定的环境变量添加到Executor进程。用户可以指定其中的多个来设置多个环境变量。

我正在尝试指示我的pyspark应用程序使用特定的python可执行文件(带有numpy等的anaconda环境等),这通常通过更改PYSPARK_PYTHON中的spark-env.sh变量来完成。虽然这种方式有效,但每次我想切换virtualenv时,都会向所有群集节点发送新的配置,这看起来像是一个巨大的过度杀伤。

这就是我尝试以下列方式传递PYSPARK_PYTHON的原因:

uu@e1:~$ PYSPARK_DRIVER_PYTHON=ipython pyspark --conf \
spark.executorEnv.PYSPARK_PYTHON="/usr/share/anaconda/bin/python" \
--master spark://e1.local:7077

但它似乎不起作用:

In [1]: sc._conf.getAll()
Out[1]: 
[(u'spark.executorEnv.PYSPARK_PYTHON', u'/usr/share/anaconda/bin/python'),
 (u'spark.rdd.compress', u'True'),
 (u'spark.serializer.objectStreamReset', u'100'),
 (u'spark.master', u'spark://e1.local:7077'),
 (u'spark.submit.deployMode', u'client'),
 (u'spark.app.name', u'PySparkShell')]

In [2]: def dummy(x):
    import sys
    return sys.executable
   ...: 

In [3]: sc.parallelize(xrange(100),50).map(dummy).take(10)

Out[3]: 
['/usr/bin/python2.7',
 '/usr/bin/python2.7',
 '/usr/bin/python2.7',
 '/usr/bin/python2.7',
 '/usr/bin/python2.7',
 '/usr/bin/python2.7',
 '/usr/bin/python2.7',
 '/usr/bin/python2.7',
 '/usr/bin/python2.7',
 '/usr/bin/python2.7']

我的spark-env.sh没有配置PYSPARK_PYTHON,所以这只是被调用的默认python。一些额外的信息:它是spark 1.6.0独立模式集群。

我错过了一些重要的事情吗?

1 个答案:

答案 0 :(得分:2)

快速查看https://github.com/apache/spark/blob/master/bin/pyspark

我认为他们只是在做出口 你能做到吗

导出PYSPARK_PYTHON =“/ usr / share / anaconda / bin / python”

看它是否适用于所有执行者 然后运行

PYSPARK_DRIVER_PYTHON = ipython pyspark