关键错误:SparkConf初始化期间的SPARK_HOME

3

我是一个刚入门的Spark用户,想要从命令行中运行Python脚本。我已经在交互式环境下测试了pyspark并且它可以正常工作。但是当我尝试创建sc时,出现了以下错误:

File "test.py", line 10, in <module>
    conf=(SparkConf().setMaster('local').setAppName('a').setSparkHome('/home/dirk/spark-1.4.1-bin-hadoop2.6/bin'))
  File "/home/dirk/spark-1.4.1-bin-hadoop2.6/python/pyspark/conf.py", line 104, in __init__
    SparkContext._ensure_initialized()
  File "/home/dirk/spark-1.4.1-bin-hadoop2.6/python/pyspark/context.py", line 229, in _ensure_initialized
    SparkContext._gateway = gateway or launch_gateway()
  File "/home/dirk/spark-1.4.1-bin-hadoop2.6/python/pyspark/java_gateway.py", line 48, in launch_gateway
    SPARK_HOME = os.environ["SPARK_HOME"]
  File "/usr/lib/python2.7/UserDict.py", line 23, in __getitem__
    raise KeyError(key)
KeyError: 'SPARK_HOME'
1个回答

10

看起来有两个问题。

第一个问题是你使用的路径。 SPARK_HOME 应该指向 Spark 安装的根目录,所以在你的情况下,它应该是 /home/dirk/spark-1.4.1-bin-hadoop2.6 而不是 /home/dirk/spark-1.4.1-bin-hadoop2.6/bin

第二个问题是你使用 setSparkHome 的方式。如果你查看docstring,它的目的是

设置工作节点上安装 Spark 的路径

SparkConf 构造函数假定主节点上已经设置了 SPARK_HOME它调用 pyspark.context.SparkContext._ensure_initialized后者调用 pyspark.java_gateway.launch_gateway后者尝试访问 SPARK_HOME,但失败了。

为了解决这个问题,你应该在创建 SparkConf 之前设置 SPARK_HOME

import os
os.environ["SPARK_HOME"] = "/home/dirk/spark-1.4.1-bin-hadoop2.6"
conf = (SparkConf().setMaster('local').setAppName('a'))

1
如果我正在尝试连接到远程机器怎么办?并且在尝试运行客户端(在这种情况下是pyspark)时设置"SPARK_HOME"并没有什么意义,对吗?这应该被删除吗? - Tanny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接