在工作节点上安装 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 模块的主要内容,如果未能解决你的问题,请参考以下文章

如何在特定节点上运行 Spark 作业

Spark 独立集群如何在工作节点上管理多个执行程序?

什么是 Spark 作业?

Spark 在具有多个应用程序的工作人员上运行了多少 JVM

spark安装

在集群上运行Spark