apache-spark - 在集群 : Initial job has not accepted any resources 上运行 Spark

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

  1. 我有一个远程 Ubuntu 服务器 linode.com具有 4 核和 8G RAM
  2. 我的远程 Ubuntu 服务器上有一个由 1 个主服务器和 1 个从服务器组成的 Spark-2 集群。
  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. 我遇到错误

    Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources

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

    [Spark admin screenshot]

  7. 我在 Google 上搜索了此错误,并尝试设置不同的内存配置,还禁用了两台计算机上的防火墙,但这对我没有帮助。我不知道如何解决它。

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

最佳答案

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

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

有两种可能的解决方案:

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

关于apache-spark - 在集群 : Initial job has not accepted any resources 上运行 Spark,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55949017/

相关文章:

python - 将 Pandas 列转换为具有罕见日期格式的日期时间

python - 将 pyspark 数据框中的两列转换为一个 python 字典

apache-spark - Spark 中的广播哈希联接和广播嵌套循环联接有什么区别?

hadoop - 使用 HBASE 的 Spark 与使用 HDFS 的 Spark

google-cloud-storage - 在 Google Cloud Storage 中合并超过 32 个文件

python - 无法安装pyspark

python - 如何使用 Python 类处理 RDD?

java - GlassFish 4.0 CDI 部署失败 + Apache Spark

python - 来自特定 ISO 格式的 Pandas 日期时间转换

Python Pandas : conditional subtraction