【问题标题】:pyspark SparkContext issue "Another SparkContext is being constructed"pyspark SparkContext 问题“正在构建另一个 SparkContext”
【发布时间】:2018-03-06 17:05:38
【问题描述】:

我按照本教程在我的 EC2 实例上安装了 Spark:
https://sparkour.urizone.net/recipes/installing-ec2/#03
但是当我尝试启动 pyspark shell 时,出现此错误:
“正在构建另一个 SparkContext”

这里是完整的例外:

[ec2-user@ip-10-0-0-153 ~]$ pyspark
Python 2.7.12 (default, Sep  1 2016, 22:14:00) 
[GCC 4.8.3 20140911 (Red Hat 4.8.3-9)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
17/08/22 11:46:16 WARN spark.SparkContext: Another SparkContext is being constructed (or threw an exception in its constructor).  This may indicate an error, since only one SparkContext may be running in this JVM (see SPARK-2243). The other SparkContext was created at:
org.apache.spark.api.java.JavaSparkContext.<init>(JavaSparkContext.scala:58)
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
java.lang.reflect.Constructor.newInstance(Constructor.java:423)
py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:247)
py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
py4j.Gateway.invoke(Gateway.java:236)
py4j.commands.ConstructorCommand.invokeConstructor(ConstructorCommand.java:80)
py4j.commands.ConstructorCommand.execute(ConstructorCommand.java:69)
py4j.GatewayConnection.run(GatewayConnection.java:214)
java.lang.Thread.run(Thread.java:748)
Traceback (most recent call last):
  File "/opt/spark/python/pyspark/shell.py", line 54, in <module>
    spark = SparkSession.builder.getOrCreate()
  File "/opt/spark/python/pyspark/sql/session.py", line 169, in getOrCreate
    sc = SparkContext.getOrCreate(sparkConf)
  File "/opt/spark/python/pyspark/context.py", line 334, in getOrCreate
    SparkContext(conf=conf or SparkConf())
  File "/opt/spark/python/pyspark/context.py", line 118, in __init__
    conf, jsc, profiler_cls)
  File "/opt/spark/python/pyspark/context.py", line 180, in _do_init
    self._jsc = jsc or self._initialize_context(self._conf._jconf)
  File "/opt/spark/python/pyspark/context.py", line 273, in _initialize_context
    return self._jvm.JavaSparkContext(jconf)
  File "/opt/spark/python/lib/py4j-0.10.4-src.zip/py4j/java_gateway.py", line 1401, in __call__
  File "/opt/spark/python/lib/py4j-0.10.4-src.zip/py4j/protocol.py", line 319, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling None.org.apache.spark.api.java.JavaSparkContext.
: java.lang.NoClassDefFoundError: Could not initialize class org.apache.spark.internal.config.package$
    at org.apache.spark.SparkConf.validateSettings(SparkConf.scala:546)
    at org.apache.spark.SparkContext.<init>(SparkContext.scala:373)
    at org.apache.spark.api.java.JavaSparkContext.<init>(JavaSparkContext.scala:58)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:247)
    at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
    at py4j.Gateway.invoke(Gateway.java:236)
    at py4j.commands.ConstructorCommand.invokeConstructor(ConstructorCommand.java:80)
    at py4j.commands.ConstructorCommand.execute(ConstructorCommand.java:69)
    at py4j.GatewayConnection.run(GatewayConnection.java:214)
    at java.lang.Thread.run(Thread.java:748)

我搜索了很多,并尝试了所有方法,但没有解决方案。我使用这段代码来获取所有正在运行的上下文的列表:

>>> from pyspark import SparkConf
>>> conf = SparkConf()
>>> conf.getAll()

我得到了这个:

[(u'spark.master', u'local[*]'), (u'spark.submit.deployMode', u'client'), (u'spark.app.name', u'PySparkShell')]

有什么办法可以解决这个问题吗?

【问题讨论】:

  • 如果你在运行pyspark,你不需要创建一个新的上下文...
  • 我不是。启动 pyspark 时出现此错误。在我写完命令 pyspark
  • 还不知道?有人吗?
  • 真正的问题是“在其构造函数中抛出异常”而不是“正在构造另一个 SparkContext”。如果您向下查看堆栈跟踪,您将看到构造函数中引发的错误:“调用 None.org.apache.spark.api.java.JavaSparkContext 时发生错误。:java.lang.NoClassDefFoundError:无法初始化类 org。 apache.spark.internal.config.package$”。虽然该消息有点误导,但问题在于环境配置(例如主 URL 等)。试着研究一下。如果您使用的是 AWS,为什么不使用 EMR?
  • 我以前不知道 EMR。我会试一试。顺便说一句,我通过在 spark-env.sh 文件中设置 SPARK_MASTER_HOST=127.0.0.1 解决了这个问题

标签: apache-spark amazon-ec2 pyspark


【解决方案1】:

我通过在 spark-env.sh 文件中设置 SPARK_MASTER_HOST=127.0.0.1 解决了这个问题

【讨论】:

    【解决方案2】:

    导航到 Spark 配置文件夹:

    cd $SPARK_HOME/conf
    

    使用编辑器打开 spark-env.sh 文件(此文件是否不存在复制 spark-env-template 文件):

    vi spark-env.sh
    

    将 SPARK_LOCAL_IP 值编辑为您的机器 IP(例如 205.210.42.205):

    SPARK_LOCAL_IP="205.210.42.205"
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-20
      相关资源
      最近更新 更多