在工作节点上安装 SPARK 模块

Installing Modules for SPARK on worker nodes

我正在 运行在 Cloudera 环境中以独立模式运行 SPARK 1.3。我可以从 ipython notebook 运行 pyspark,但是一旦我添加第二个工作节点,我的代码就会停止 运行ning 并出现 returns 错误。 我很确定这是因为我的主节点上的模块对工作节点不可见。 我尝试导入 numpy,但即使我通过 anaconda 在我的 worker 上安装了 numpy,它也没有用。我以同样的方式在 master 和 worker 上安装了 anaconda。

但是,根据 Josh Rosen 的建议,我确保在工作节点上安装了这些库。

https://groups.google.com/forum/#!topic/spark-users/We_F8vlxvq0

但是,我似乎仍然遇到问题。包括我的工人无法识别命令 abs 的事实。这是 python 2.6

中的标准

我是运行ning的代码来自这个post:

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

我也经常将 anaconda 发行版与 PySpark 一起使用,发现设置 PYSPARK_PYTHON 变量很有用,指向 anaconda 发行版中的 python 二进制文件。我发现否则我会遇到很多奇怪的错误。您可以检查 python 是否被 运行 rdd.map(lambda x: sys.executable).distinct().collect() 使用。我怀疑它没有指向正确的位置。

无论如何,我建议将路径和环境变量的配置包装在脚本中。我使用以下。

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 环境。