在群集上运行Spark:初始作业未接受任何资源

时间:2016-11-28 21:56:51

标签: apache-spark dataframe pyspark apache-spark-sql linode

  1. 我在linode.com上有一个远程Ubuntu服务器,有4个核心和8G RAM
  2. 我的远程Ubuntu服务器上有一个Spark-2群集,包含1个master和1个slave。
  3. 我在MacBook上本地启动了PySpark shell,通过以下方式连接到远程服务器上的主节点:

    $ PYSPARK_PYTHON=python3 /vagrant/spark-2.0.0-bin-hadoop2.7/bin/pyspark --master spark://[server-ip]:7077
    
  4. 我尝试从网站上执行简单的Spark示例:

    from pyspark.sql import SparkSession
    
    spark = SparkSession \
        .builder \
        .appName("Python Spark SQL basic example") \
        .config("spark.some.config.option", "some-value") \
        .getOrCreate()
    df = spark.read.json("/path/to/spark-2.0.0-bin-hadoop2.7/examples/src/main/resources/people.json")
    
  5. 我收到了错误

      

    初次工作没有接受任何资源;检查您的群集UI   确保工人注册并拥有足够的资源

  6. 我的服务器和本地计算机上都有足够的内存,但我一次又一次地遇到这个奇怪的错误。我的Spark集群有6G,我的脚本只使用4个内核,每个节点有1G内存。

    [Spark admin screenshot]

  7. 我已经用Google搜索了这个错误并试图设置不同的内存配置,也禁用了两台机器上的防火墙,但它对我没有帮助。我不知道如何解决它。

  8. 有人遇到同样的问题吗?有什么想法吗?

1 个答案:

答案 0 :(得分:4)

您正在以客户端模式提交申请。这意味着在本地计算机上启动了驱动程序进程。

执行Spark应用程序时,所有计算机都必须能够相互通信。很可能您的驱动程序进程无法从执行程序访问(例如,它使用私有IP或隐藏在防火墙后面)。如果是这种情况,您可以通过检查执行程序日志来确认(转到应用程序,选择状态为EXITED的工作人员并检查stderr。您应该“看到执行者因为失败而失败” org.apache.spark.rpc.RpcTimeoutException)。

有两种可能的解决方案:

  • 从您可以从群集中访问的计算机上提交应用程序。
  • 以群集模式提交申请。这将使用群集资源来启动驱动程序进程,因此您必须考虑到这一点。