在工作节点上安装 SPARK 模块
Posted
技术标签:
【中文标题】在工作节点上安装 SPARK 模块【英文标题】:Installing Modules for SPARK on worker nodes 【发布时间】:2015-06-25 00:12:55 【问题描述】:我在 cloudera 环境中以独立模式运行 SPARK 1.3。我可以从 ipython notebook 运行 pyspark,但是一旦我添加了第二个工作节点,我的代码就会停止运行并返回错误。 我很确定这是因为我的主节点上的模块对工作节点不可见。 我尝试导入 numpy,但即使我通过 anaconda 在我的工作人员上安装了 numpy,它也不起作用。我以同样的方式在 master 和 worker 上安装了 anaconda。
但是,按照 Josh Rosen 的建议,我确保在工作节点上安装了这些库。
https://groups.google.com/forum/#!topic/spark-users/We_F8vlxvq0
但是,我似乎仍然遇到问题。包括我的工人不认识命令 abs 的事实。这是python 2.6中的标准
我正在运行的代码来自这篇文章:
https://districtdatalabs.silvrback.com/getting-started-with-spark-in-python
def isprime(n):
"""
check if integer n is a prime
"""
# make sure n is a positive integer
n = abs(int(n))
# 0 and 1 are not primes
if n < 2:
return False
# 2 is the only even prime number
if n == 2:
return True
# all other even numbers are not primes
if not n & 1:
return False
# range starts with 3 and only needs to go up the square root of n
# for all odd numbers
for x in range(3, int(n**0.5)+1, 2):
if n % x == 0:
return False
return True
# Create an RDD of numbers from 0 to 1,000,000
nums = sc.parallelize(xrange(1000000))
# Compute the number of primes in the RDD
print nums.filter(isprime).count()
【问题讨论】:
abs()
在 spark 1.3.1 的工作人员上工作正常
要检查pyspark
中工作人员的python 版本号:import sys
rdd = sc.parallelize(xrange(30),30)
rdd.map(lambda x: sys.version).distinct().collect()
我的集群工作人员只得到python 2.7.9 版本abs()
【参考方案1】:
我也经常将 anaconda 发行版与 PySpark 一起使用,并发现设置 PYSPARK_PYTHON
变量非常有用,它指向 anaconda 发行版中的 python 二进制文件。我发现否则我会遇到很多奇怪的错误。您可以通过运行rdd.map(lambda x: sys.executable).distinct().collect()
来检查是否正在使用 python。我怀疑它没有指向正确的位置。
无论如何,我建议将路径和环境变量的配置包装在脚本中。我使用以下。
def configure_spark(spark_home=None, pyspark_python=None):
spark_home = spark_home or "/path/to/default/spark/home"
os.environ['SPARK_HOME'] = spark_home
# Add the PySpark directories to the Python path:
sys.path.insert(1, os.path.join(spark_home, 'python'))
sys.path.insert(1, os.path.join(spark_home, 'python', 'pyspark'))
sys.path.insert(1, os.path.join(spark_home, 'python', 'build'))
# If PySpark isn't specified, use currently running Python binary:
pyspark_python = pyspark_python or sys.executable
os.environ['PYSPARK_PYTHON'] = pyspark_python
当您指向您的 anaconda 二进制文件时,您还应该能够导入安装在其 site-packages
目录中的所有软件包。这种技术也应该适用于 conda 环境。
【讨论】:
谢谢,我通过将 Anaconda 安装到 /opt/anaconda 解决了所有问题我还设置了 PYSPARK_PYTHON=/opt/anaconda/bin/python2.7 我还将 anaconda 添加到 etc/ 中的路径变量中profile 这解决了我所有的问题。以上是关于在工作节点上安装 SPARK 模块的主要内容,如果未能解决你的问题,请参考以下文章